Skip to content
Snippets Groups Projects
Select Git revision
  • 36122640131d0a785fa503d9a8aa3db97d81e1a1
  • main default
2 results

README.md

Blame
  • To learn more about this project, read the wiki.
    student_tests.sh 2.59 KiB
    #!/usr/bin/env bats
    
    # File: student_tests.sh
    # 
    # Create your unit tests suit in this file
    
    @test "Check if shell starts" {
        run ./dsh <<< "exit"
        [ "$status" -eq 0 ]
            # These echo commands will help with debugging and will only print
        #if the test fails
        echo "Captured stdout:" 
        echo "Output: $output"
        echo "Exit Status: $status"
        echo "${stripped_output} -> ${expected_output}"
    
        # Check exact match
        [ "$stripped_output" = "$expected_output" ]
    }
    
    @test "Example: check ls runs without errors" {
        run ./dsh <<EOF                
    ls
    EOF
    
        # Assertions
        [ "$status" -eq 0 ]
            # These echo commands will help with debugging and will only print
        #if the test fails
        echo "Captured stdout:" 
        echo "Output: $output"
        echo "Exit Status: $status"
        echo "${stripped_output} -> ${expected_output}"
    
        # Check exact match
        [ "$stripped_output" = "$expected_output" ]
    }
    
    @test "Create and navigate into new directory" {
        run ./dsh <<EOF
    mkdir -p /tmp/student_test_dir
    cd /tmp/student_test_dir
    pwd
    EOF
    
        # Remove extra spaces but **preserve newlines**
        stripped_output=$(echo "$output" | tr -s '[:space:]' | tr '\n' '|' )
    
        # Adjust expected output to match actual shell behavior
        expected_output="/tmp/student_test_dir|dsh2> dsh2> dsh2> dsh2> |cmd loop returned 0|"
    
        # Debugging output
        echo "Captured stdout:"
        echo "Output: $output"
        echo "Exit Status: $status"
        echo "${stripped_output} -> ${expected_output}"
    
        # Assertion: Check exact match
        [ "$stripped_output" = "$expected_output" ]
    }
    
    @test "Handle command execution failures gracefully" {
        run ./dsh <<< "command_that_does_not_exist"
        
        # Expected error message
        expected_error="execvp failed: No such file or directory"
    
        
    
        # Check if output contains the expected error message
        [[ "$output" == *"$expected_error"* ]]
    
         # Debugging output
        echo "Captured stdout:"
        echo "Output: $output"
        echo "Exit Status: $status"
        echo "${stripped_output} -> ${expected_output}"
    
        # Assertion: Check exact match
        [ "$stripped_output" = "$expected_output" ]
    }
    
    @test "Detect too many arguments for built-in cd" {
        run ./dsh <<< "cd /tmp extra_argument"
        
        # Expected error message
        expected_error="error: cd command accepts at most 1 argument"
    
        
    
        # Check if output contains the expected error message
        [[ "$output" == *"$expected_error"* ]]
    
        # Debugging output
        echo "Captured stdout:"
        echo "Output: $output"
        echo "Exit Status: $status"
        # Assertion: Check exact match
        [ "$stripped_output" = "$expected_output" ]
    }