From c6dbd862d0c5d1d539ad3d58dc1c754a9f166308 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Wed, 25 Apr 2018 10:16:51 +0100 Subject: 42714: Add fg and bg tests. Use ed to get minimal user interaction without needing advanced terminal handling. Improve test output of failures of pattern differences. --- Test/W02jobs.ztst | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++---- Test/ztst.zsh | 23 +++++++++++++++++-- 2 files changed, 83 insertions(+), 6 deletions(-) (limited to 'Test') diff --git a/Test/W02jobs.ztst b/Test/W02jobs.ztst index 65b860072..1ec0b8e8b 100644 --- a/Test/W02jobs.ztst +++ b/Test/W02jobs.ztst @@ -13,6 +13,14 @@ zpty_input() { zpty -w zsh "${(F)@}" $'\n' } + zpty_line() { + local REPLY + integer i + for (( i = 0; i < ${1:-1}; ++i )); do + zpty -r zsh REPLY + print -r -- ${REPLY%%($'\r\n'|$'\n')} + done + } zpty_stop() { # exit twice in case of check_jobs zpty -w zsh $'exit\nexit\n' @@ -161,15 +169,17 @@ zpty_start zpty_input 'sleep 10 & sleep 9 & sleep 8 & sleep 7 &' - sleep 0.1 + zpty_line 4 zpty_input 'kill %4' + # Dunno why we need this when checking input... sleep 0.1 + zpty_line zpty_input 'kill -HUP %3' - sleep 0.1 + zpty_line zpty_input 'kill -INT %2' - sleep 0.1 + zpty_line zpty_input 'kill -KILL %1' - sleep 0.1 + zpty_line zpty_stop 0:various `kill` signals with multiple running jobs *>\[1] [0-9]## @@ -181,6 +191,54 @@ *>\[2] ? interrupt*sleep* *>\[1] ? kill*sleep* + zpty_start + zpty_input $'ed 2>/dev/null\n=\n' + zpty_line + zpty_input $'a\nstuff1\n.\nw tmpfile\nq\n' + zpty_stop + cat tmpfile + rm -f tmpfile +0:Sanity check of "ed" as foreground process +*>0 +*>stuff1 +F:This test checks we can run the simple editor "ed" as a way of testing +F:user interaction for later job control tests . The test itself is +F:trivial; its failure may simply indicate our test methodology does not +F:work on this system. + + zpty_start + zpty_input $'ed 2>/dev/null\n=\n' + zpty_line + zpty_input $'\C-z' + zpty_input 'fg' + zpty_input $'a\nstuff2\n.\nw tmpfile\nq\n' + zpty_stop + cat tmpfile + rm -f tmpfile +0:Basic fg with subsequent user interaction +*>0 +*>zsh:*(stopped|suspended)*ed* +*>*continued*ed* +*>stuff2 + + zpty_start + zpty_input $'ed 2>/dev/null\n=\n' + zpty_line + zpty_input $'\C-z' + zpty_input 'bg' + zpty_input 'fg' + zpty_input $'a\nstuff3\n.\nw tmpfile\nq\n' + zpty_stop + cat tmpfile + rm -f tmpfile +0:bg and fg with user input +*>0 +*>zsh:*(stopped|suspended)*ed* +*>*continued*ed* +*>*(stopped|suspended)*ed* +*>*continued*ed* +*>stuff3 + %clean zmodload -ui zsh/zpty diff --git a/Test/ztst.zsh b/Test/ztst.zsh index 0b2679927..1a6a0b543 100755 --- a/Test/ztst.zsh +++ b/Test/ztst.zsh @@ -315,7 +315,8 @@ ZTST_diff() { if (( diff_pat )); then local -a diff_lines1 diff_lines2 - integer failed i + integer failed i l n + local p diff_lines1=("${(f)$(<$argv[-2])}") diff_lines2=("${(f)$(<$argv[-1])}") @@ -330,7 +331,25 @@ ZTST_diff() { done fi if (( failed )); then - print -rl "Pattern match failed:" \<${^diff_lines1} \>${^diff_lines2} + print -r "Pattern match failed, line $i:" + n=${#diff_lines1} + (( ${#diff_lines2} > $n )) && n=${#diff_lines2} + for (( l = 1; l <= n; ++l )); do + if (( l == i )); then + p="-" + else + p=" " + fi + print -r -- "$p<${diff_lines1[l]}" + done + for (( l = 1; l <= n; ++l )); do + if (( l == i )); then + p="+" + else + p=" " + fi + print -r -- "$p>${diff_lines2[l]}" + done diff_ret=1 fi else -- cgit 1.4.1