diff --git a/tests/pexpects/wait.py b/tests/pexpects/wait.py new file mode 100644 index 000000000..b385c9aae --- /dev/null +++ b/tests/pexpects/wait.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +from pexpect_helper import SpawnedProc + +sp = SpawnedProc() +send, sendline, sleep, expect_prompt, expect_re, expect_str = ( + sp.send, + sp.sendline, + sp.sleep, + sp.expect_prompt, + sp.expect_re, + sp.expect_str, +) +expect_prompt() + +# one background job +sendline("sleep 1 &") +expect_prompt() +sendline("wait") +expect_prompt("Job 1, 'sleep 1 &' has ended") +sendline("jobs") +expect_prompt("jobs: There are no jobs") + +# three job ids specified +sendline("sleep 0.3 &; sleep 0.1 &; sleep 0.2 &; sleep 0.4 &;") +expect_prompt() +sendline("wait %1 %3 %4") +expect_str("Job 2, 'sleep 0.1 &' has ended") +expect_str("Job 3, 'sleep 0.2 &' has ended") +expect_str("Job 1, 'sleep 0.3 &' has ended") +expect_prompt("Job 4, 'sleep 0.4 &' has ended") +sendline("jobs") +expect_prompt("jobs: There are no jobs") + +# specify job ids with -n option +sendline("sleep 0.3 &; sleep 0.1 &; sleep 0.2 &") +expect_prompt() +sendline("wait -n %1 %3") +expect_str("Job 2, 'sleep 0.1 &' has ended") +expect_prompt("Job 3, 'sleep 0.2 &' has ended") +sendline("wait -n %1") +expect_prompt("Job 1, 'sleep 0.3 &' has ended") +sendline("jobs") +expect_prompt("jobs: There are no jobs") + +# don't wait for stopped jobs +sendline("sleep 0.3 &") +expect_prompt() +sendline("kill -STOP %1") +expect_prompt() +sendline("wait") +expect_prompt() +sendline("wait %1") +expect_prompt() +sendline("wait -n") +expect_prompt() +sendline("bg %1") +expect_prompt() +sendline("wait") +expect_prompt() +sendline("jobs") +expect_prompt("jobs: There are no jobs") + +sendline( + "sleep .3 &; kill -STOP %1; kill -CONT %1; jobs | string match -r running; wait" +) +expect_prompt("running") + +# return immediately when no jobs +sendline("wait") +expect_prompt() +sendline("wait -n") +expect_prompt() +sendline("jobs") +expect_prompt("jobs: There are no jobs") + +# wait for jobs by its process name with -n option +sendline("for i in (seq 1 3); sleep 0.$i &; end") +expect_prompt() +sendline("wait -n sleep") +expect_prompt() +sendline("jobs | wc -l") +expect_str("2") +expect_prompt() +sendline("wait") +expect_prompt() +sendline("jobs") +expect_prompt("jobs: There are no jobs") + +# complex case +sendline("for i in (seq 1 10); ls | sleep 0.2 | cat > /dev/null &; end") +expect_prompt() +sendline("sleep 0.3 | cat &") +expect_prompt() +sendline("sleep 0.1 &") +expect_prompt() +sendline("wait $last_pid sleep") +expect_prompt() +sendline("jobs") +expect_prompt("jobs: There are no jobs") + +# don't wait for itself +sendline("wait wait") +expect_prompt("wait: Could not find child processes with the name 'wait'") +sendline("wait -n wait") +expect_prompt("wait: Could not find child processes with the name 'wait'") +sendline("jobs") +expect_prompt("jobs: There are no jobs") + +# test with fish script +sendline("fish -c 'sleep 0.2 &; sleep 0.3 &; sleep 0.1 &; wait -n sleep; jobs | wc -l'") +expect_str("1") +expect_prompt() + +# test error messages +sendline("wait 0") +expect_prompt("wait: '0' is not a valid process id") +sendline("wait 1") +expect_prompt("wait: Could not find a job with process id '1'") +sendline("wait hoge") +expect_prompt("wait: Could not find child processes with the name 'hoge'") diff --git a/tests/wait.expect b/tests/wait.expect deleted file mode 100644 index ab8362f1b..000000000 --- a/tests/wait.expect +++ /dev/null @@ -1,128 +0,0 @@ -# vim: set filetype=expect: -spawn $fish -expect_prompt - -# one background job -set error_msg "one background job: Fail" - -send_line "sleep 1 &" -expect_prompt -send_line "wait" -expect_prompt "Job 1, 'sleep 1 &' has ended" {} unmatched { puts stderr $error_msg } -send_line "jobs" -expect_prompt "jobs: There are no jobs" {} unmatched { puts stderr $error_msg } - -# three job ids specified -set error_msg "three job ids specified: Fail" - -send_line "sleep 0.3 &; sleep 0.1 &; sleep 0.2 &; sleep 0.4 &;" -expect_prompt -send_line "wait %1 %3 %4" -expect "Job 2, 'sleep 0.1 &' has ended" {} timeout { puts stderr $error_msg } -expect "Job 3, 'sleep 0.2 &' has ended" {} timeout { puts stderr $error_msg } -expect "Job 1, 'sleep 0.3 &' has ended" {} timeout { puts stderr $error_msg } -expect_prompt "Job 4, 'sleep 0.4 &' has ended" {} unmatched { puts stderr $error_msg } -send_line "jobs" -expect_prompt "jobs: There are no jobs" {} unmatched { puts stderr $error_msg } - -# specify job ids with -n option -set error_msg "specify job ids with -n option: Fail" - -send_line "sleep 0.3 &; sleep 0.1 &; sleep 0.2 &" -expect_prompt -send_line "wait -n %1 %3" -expect "Job 2, 'sleep 0.1 &' has ended" {} timeout { puts stderr $error_msg } -expect_prompt "Job 3, 'sleep 0.2 &' has ended" {} unmatched { puts stderr $error_msg } -send_line "wait -n %1" -expect_prompt "Job 1, 'sleep 0.3 &' has ended" {} unmatched { puts stderr $error_msg } -send_line "jobs" -expect_prompt "jobs: There are no jobs" {} unmatched { puts stderr $error_msg } - -# don't wait for stopped jobs -set error_msg "don't wait for stopped jobs: Fail" - -send_line "sleep 0.3 &" -expect_prompt -send_line "kill -STOP %1" -expect_prompt -send_line "wait" -expect_prompt -send_line "wait %1" -expect_prompt -send_line "wait -n" -expect_prompt -send_line "bg %1" -expect_prompt -send_line "wait" -expect_prompt -send_line "jobs" -expect_prompt "jobs: There are no jobs" {} unmatched { puts stderr $error_msg } - -send_line "sleep .3 &; kill -STOP %1; kill -CONT %1; jobs | string match -r running; wait" -expect_prompt "running" {} unmatched { puts stderr "continued job should be running: Fail" } - -# return immediately when no jobs -set error_msg "return immediately when no jobs: Fail" - -send_line "wait" -expect_prompt -send_line "wait -n" -expect_prompt -send_line "jobs" -expect_prompt "jobs: There are no jobs" {} unmatched { puts stderr $error_msg } - -# wait for jobs by its process name with -n option -set error_msg "wait for jobs by its process name with -n option: Fail" - -send_line "for i in (seq 1 3); sleep 0.\$i &; end" -expect_prompt -send_line "wait -n sleep" -expect_prompt -send_line "jobs | wc -l" -expect "2" {} timeout { puts stderr $error_msg } -expect_prompt -send_line "wait" -expect_prompt -send_line "jobs" -expect_prompt "jobs: There are no jobs" {} unmatched { puts stderr $error_msg } - -# complex case -set error_msg "complex case: Fail" - -send_line "for i in (seq 1 10); ls | sleep 0.2 | cat > /dev/null &; end" -expect_prompt -send_line "sleep 0.3 | cat &" -expect_prompt -send_line "sleep 0.1 &" -expect_prompt -send_line "wait \$last_pid sleep" -expect_prompt -send_line "jobs" -expect_prompt "jobs: There are no jobs" {} unmatched { puts stderr $error_msg } - -# don't wait for itself -set error_msg "don't wait for itself: Fail" - -send_line "wait wait" -expect_prompt "wait: Could not find child processes with the name 'wait'" {} unmatched { puts stderr $error_msg } -send_line "wait -n wait" -expect_prompt "wait: Could not find child processes with the name 'wait'" {} unmatched { puts stderr $error_msg } -send_line "jobs" -expect_prompt "jobs: There are no jobs" {} unmatched { puts stderr $error_msg } - -# test with fish script -set error_msg "test with fish script: Fail" - -send_line "fish -c 'sleep 0.2 &; sleep 0.3 &; sleep 0.1 &; wait -n sleep; jobs | wc -l'" -expect "1" {} timeout { puts stderr $error_msg } -expect_prompt - -# test error messages -set error_msg "test error messages: Fail" - -send_line "wait 0" -expect_prompt "wait: '0' is not a valid process id" {} unmatched { puts stderr $error_msg } -send_line "wait 1" -expect_prompt "wait: Could not find a job with process id '1'" {} unmatched { puts stderr $error_msg } -send_line "wait hoge" -expect_prompt "wait: Could not find child processes with the name 'hoge'" {} unmatched { puts stderr $error_msg } diff --git a/tests/wait.expect.err b/tests/wait.expect.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/wait.expect.out b/tests/wait.expect.out deleted file mode 100644 index e69de29bb..000000000