Select Git revision
-
Charles Barnwell authoredCharles Barnwell authored
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" ]
}