diff --git a/Shell/Tests/backgrounding.sh b/Shell/Tests/backgrounding.sh new file mode 100644 index 0000000000..08a78b53fc --- /dev/null +++ b/Shell/Tests/backgrounding.sh @@ -0,0 +1,53 @@ +#!/bin/Shell + +setopt --verbose + +fail(msg) { + echo FAIL: $msg + exit 1 +} + +last_idx='' +block_idx=0 +block() { + block_idx=$(expr 1 + $block_idx) + last_idx=$block_idx + mkfifo fifo$block_idx + cat fifo$block_idx& +} + +unblock(idx) { + echo unblock $idx > fifo$idx + rm -f fifo$idx +} + +assert_job_count(count) { + ecount=$(jobs | wc -l) + shift + if test $ecount -ne $count { + for $* { + unblock $it + } + fail "expected $ecount == $count" + } +} + +block +i=$last_idx + +assert_job_count 1 $i + +unblock $i +wait + +block +i=$last_idx +block +j=$last_idx + +assert_job_count 2 $i $j + +unblock $i +unblock $j +wait +