summary refs log tree commit diff
path: root/Test
diff options
context:
space:
mode:
authorPeter Stephenson <p.w.stephenson@ntlworld.com>2017-12-22 20:00:54 +0000
committerPeter Stephenson <p.w.stephenson@ntlworld.com>2017-12-22 20:21:23 +0000
commit5f6a52c06ca956cf61eacd7f45f270899337d45e (patch)
treeb8743b8d42059b329ab6d65fb4019dba45566318 /Test
parent349c95765a030cf614c3c2a9fdc45941d3b115fc (diff)
downloadzsh-5f6a52c06ca956cf61eacd7f45f270899337d45e.tar.gz
zsh-5f6a52c06ca956cf61eacd7f45f270899337d45e.tar.xz
zsh-5f6a52c06ca956cf61eacd7f45f270899337d45e.zip
42156: new CHECK_RUNNING_JOBS option demanded by bash groupies
Also new job options.

Also suppress debug error if rows or columns are reported as zero as
this is normal without a physical terminal.
Diffstat (limited to 'Test')
-rw-r--r--Test/W02jobs.ztst186
1 files changed, 186 insertions, 0 deletions
diff --git a/Test/W02jobs.ztst b/Test/W02jobs.ztst
new file mode 100644
index 000000000..65b860072
--- /dev/null
+++ b/Test/W02jobs.ztst
@@ -0,0 +1,186 @@
+# Tests for interactive job control
+
+%prep
+
+  if [[ $OSTYPE == cygwin ]]; then
+    ZTST_unimplemented='the zsh/zpty module does not work on Cygwin'
+  elif zmodload zsh/zpty 2> /dev/null; then
+    zpty_start() {
+      export PS1= PS2=
+      zpty -d
+      zpty zsh "${(q)ZTST_testdir}/../Src/zsh -fiV +Z"
+    }
+    zpty_input() {
+      zpty -w zsh "${(F)@}" $'\n'
+    }
+    zpty_stop() {
+      # exit twice in case of check_jobs
+      zpty -w zsh $'exit\nexit\n'
+      # zpty gives no output when piped without these braces (?)
+      { zpty -r zsh } | sed $'/[^[:space:]]/!d; s/\r$//;'
+      zpty -d
+      :
+    }
+  else
+    ZTST_unimplemented='the zsh/zpty module is not available'
+  fi
+
+%test
+
+  zpty_start
+  zpty_input 'setopt no_long_list_jobs'
+  zpty_input ': &'
+  zpty_input 'wait'
+  zpty_stop
+0:job notification with no_long_list_jobs
+*>\[1] [0-9]##
+*>\[1]  + done[[:space:]]##:
+
+  zpty_start
+  zpty_input 'setopt long_list_jobs'
+  zpty_input ': &'
+  zpty_input 'wait'
+  zpty_stop
+0:job notification with long_list_jobs
+*>\[1] [0-9]##
+*>\[1]  + [0-9]## done[[:space:]]##:
+
+  zpty_start
+  zpty_input 'setopt no_hup no_check_jobs'
+  zpty_input 'sleep 3 &'
+  zpty_stop
+0:running job with no_hup + no_check_jobs
+*>\[1] [0-9]##
+
+  zpty_start
+  zpty_input 'setopt no_check_jobs'
+  zpty_input 'sleep 3 &'
+  zpty_stop
+0:running job with no_check_jobs
+*>\[1] [0-9]##
+*>zsh:*SIGHUPed*
+
+  zpty_start
+  zpty_input 'setopt check_jobs no_check_running_jobs'
+  zpty_input 'sleep 3 &'
+  zpty_stop
+0:running job with check_jobs + no_check_running_jobs
+*>\[1] [0-9]##
+*>zsh:*SIGHUPed*
+
+  zpty_start
+  zpty_input 'setopt check_jobs check_running_jobs'
+  zpty_input 'sleep 3 &'
+  zpty_stop
+0:running job with check_jobs + check_running_jobs
+*>\[1] [0-9]##
+*>zsh:*running jobs*
+*>zsh:*SIGHUPed*
+
+  zpty_start
+  zpty_input 'setopt check_jobs no_check_running_jobs'
+  zpty_input 'sleep 3'
+  sleep 0.1
+  zpty_input $'\C-z'
+  zpty_stop
+0:suspended job with check_jobs + no_check_running_jobs
+*>zsh:*(stopped|suspended)*sleep*
+*>zsh:*(stopped|suspended) jobs*
+# no 'SIGHUPed' message for suspended jobs
+
+  zpty_start
+  zpty_input 'setopt check_jobs check_running_jobs'
+  zpty_input 'sleep 3'
+  sleep 0.1
+  zpty_input $'\C-z'
+  zpty_stop
+0:suspended job with check_jobs + check_running_jobs
+*>zsh:*(stopped|suspended)*sleep*
+*>zsh:*(stopped|suspended) jobs*
+# no 'SIGHUPed' message for suspended jobs
+
+  zpty_start
+  zpty_input 'sleep 5 & sleep 4 & sleep 3 &'
+  zpty_input 'jobs'
+  zpty_stop
+0:`jobs` (misc.) with multiple running jobs
+*>\[1] [0-9]##
+*>\[2] [0-9]##
+*>\[3] [0-9]##
+*>\[1]    running*sleep 5*
+*>\[2]  - running*sleep 4*
+*>\[3]  + running*sleep 3*
+*>zsh:*SIGHUPed*
+
+  zpty_start
+  zpty_input 'sleep 3 &'
+  zpty_input 'jobs -l'
+  zpty_input 'jobs -p'
+  zpty_stop
+0:`jobs -l` and `jobs -p` with running job
+*>\[1] [0-9]##
+*>\[1]  + [0-9]## running*sleep*
+*>\[1]  + [0-9]## running*sleep*
+*>zsh:*SIGHUPed*
+
+  zpty_start
+  zpty_input 'sleep 3 &'
+  zpty_input 'jobs -d'
+  zpty_stop
+0:`jobs -d` with running job
+*>\[1] [0-9]##
+*>\[1]  + running*sleep*
+*>\(pwd : ?*\)
+*>zsh:*SIGHUPed*
+
+  zpty_start
+  zpty_input 'sleep 3 &'
+  zpty_input 'jobs -r'
+  zpty_input 'print -- -'
+  zpty_input 'jobs -s'
+  zpty_stop
+0:`jobs -r` and `jobs -s` with running job
+*>\[1] [0-9]##
+*>\[1]  + running*sleep*
+*>-
+*>zsh:*SIGHUPed*
+
+  zpty_start
+  zpty_input 'sleep 5'
+  sleep 0.1
+  zpty_input $'\C-z'
+  zpty_input 'jobs -r'
+  zpty_input 'print -- -'
+  zpty_input 'jobs -s'
+  zpty_stop
+0:`jobs -r` and `jobs -s` with suspended job
+*>zsh:*(stopped|suspended)*sleep*
+*>-
+*>\[1]  + (stopped|suspended)*sleep*
+# no 'SIGHUPed' message for suspended jobs
+
+  zpty_start
+  zpty_input 'sleep 10 & sleep 9 & sleep 8 & sleep 7 &'
+  sleep 0.1
+  zpty_input 'kill %4'
+  sleep 0.1
+  zpty_input 'kill -HUP %3'
+  sleep 0.1
+  zpty_input 'kill -INT %2'
+  sleep 0.1
+  zpty_input 'kill -KILL %1'
+  sleep 0.1
+  zpty_stop
+0:various `kill` signals with multiple running jobs
+*>\[1] [0-9]##
+*>\[2] [0-9]##
+*>\[3] [0-9]##
+*>\[4] [0-9]##
+*>\[4]  ? terminate*sleep*
+*>\[3]  ? hangup*sleep*
+*>\[2]  ? interrupt*sleep*
+*>\[1]  ? kill*sleep*
+
+%clean
+
+  zmodload -ui zsh/zpty