summary refs log tree commit diff
path: root/Test
diff options
context:
space:
mode:
authorPeter Stephenson <p.stephenson@samsung.com>2018-04-25 10:16:51 +0100
committerPeter Stephenson <p.stephenson@samsung.com>2018-04-25 10:16:51 +0100
commitc6dbd862d0c5d1d539ad3d58dc1c754a9f166308 (patch)
tree1e44bf35d71399bf2c36189a1fce380fd0b43a0f /Test
parent95d861d0283e47c64980c844d66be44c6c4aad8a (diff)
downloadzsh-c6dbd862d0c5d1d539ad3d58dc1c754a9f166308.tar.gz
zsh-c6dbd862d0c5d1d539ad3d58dc1c754a9f166308.tar.xz
zsh-c6dbd862d0c5d1d539ad3d58dc1c754a9f166308.zip
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.
Diffstat (limited to 'Test')
-rw-r--r--Test/W02jobs.ztst66
-rwxr-xr-xTest/ztst.zsh23
2 files changed, 83 insertions, 6 deletions
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