Bash · 1958 bytes Raw Blame History
1 #!/bin/sh
2 TEST_PREFIX="[jobs-fg-bg]"
3
4 # Job control tests require a PTY — skip in CI/non-interactive mode
5 if [ ! -t 0 ] && [ -z "$FORCE_JOB_TESTS" ]; then
6 echo "Passed: 0"
7 echo "Failed: 0"
8 echo "Skipped: 0"
9 echo "Total: 0"
10 exit 0
11 fi
12
13 . "$(cd "$(dirname "$0")/.." && pwd)/test_harness.sh"
14
15 section "1. jobs display"
16 check_exit "jobs with no background jobs" 'jobs' "0"
17 compare_output "jobs shows background process" 'sleep 60 & jobs; kill %1 2>/dev/null; wait 2>/dev/null'
18 check_exit "jobs -p shows PIDs" 'sleep 60 & jobs -p >/dev/null; kill %1 2>/dev/null; wait 2>/dev/null' "0"
19 compare_output "jobs after completion" 'true & wait; jobs'
20 compare_output "jobs shows multiple" 'sleep 60 & sleep 60 & jobs | wc -l | tr -d " "; kill %1 %2 2>/dev/null; wait 2>/dev/null'
21 compare_output "jobs -p output is numeric" 'sleep 60 & jobs -p | grep -qE "^[0-9]+$" && echo yes; kill %1 2>/dev/null; wait 2>/dev/null'
22
23 section "2. fg"
24 compare_exit "fg with no jobs fails" 'fg 2>/dev/null'
25 compare_output "fg brings job to foreground" 'sleep 0.1 & fg %1 >/dev/null 2>&1; echo $?'
26 compare_exit "fg invalid job spec fails" 'fg %99 2>/dev/null'
27
28 section "3. bg"
29 compare_exit "bg with no stopped jobs fails" 'bg 2>/dev/null'
30 compare_exit "bg invalid job spec fails" 'bg %99 2>/dev/null'
31
32 section "4. job spec parsing"
33 compare_output "kill by job spec %1" 'sleep 60 & kill %1 2>/dev/null; wait 2>/dev/null; echo done'
34 compare_output "multiple background jobs" 'sleep 60 & sleep 60 & kill %1 %2 2>/dev/null; wait 2>/dev/null; echo done'
35 compare_output "job numbering sequential" 'sleep 60 & sleep 60 & sleep 60 & kill %1 %2 %3 2>/dev/null; wait 2>/dev/null; echo done'
36
37 section "5. background execution"
38 compare_output "command runs in background" '(echo bg_done) & wait; echo fg_done'
39 compare_output "background preserves exit" '(exit 42) & wait $!; echo $?'
40 compare_output "dollar-bang tracks PID" 'sleep 0.1 & test -n "$!" && echo yes'
41
42 print_summary