1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-04-30 05:45:16 +02:00
zsh/Test/W03jobparameters.ztst
Peter Stephenson 98e4634086 49906 (Bart), 49911: Fixes to querying jobs in subshell.
Don't attempt to query invalid job off end of table, resulting in
crashes from $jobtstates.

If background task started in subshell, look at tatsks within subshell
instead of main shell.  Document and add test.
2022-03-30 09:28:43 +01:00

79 lines
2.1 KiB
Plaintext

# Tests for interactive job control with parameter state
%prep
if 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_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'
# zpty gives no output when piped without these braces (?)
{ zpty -r zsh } | sed $'/[^[:space:]]/!d; s/\r$//;'
zpty -d
:
}
if ! zmodload zsh/parameter 2> /dev/null; then
ZTST_unimplemented='the zsh/parameter module is not available'
fi
else
ZTST_unimplemented='the zsh/zpty module is not available'
fi
%test
zpty_start
zpty_input "MODULE_PATH=${(q)MODULE_PATH}"
zpty_input 'sleep 3 &'
zpty_input 'print $jobstates'
zpty_input '(print $jobstates)'
zpty_input 'jobs -s'
zpty_stop
0:$jobstate for running job in main shell and subshell
*>\[1] [0-9]##
*>running:+:*=running
*>running:+:*=running
*>zsh:*SIGHUPed*
# $jobstates refers to a job started in the main shell unless
# one has been started in the subshell. In the latter case,
# the subshell has no job control so the job is not marked as current.
zpty_start
zpty_input "MODULE_PATH=${(q)MODULE_PATH}"
zpty_input 'sleep 3 &'
zpty_input '(print main; print $jobstates; sleep 2& print sub; print $jobstates)'
zpty_input 'jobs -s'
zpty_stop
0:$jobstate shows one job started in main shell or one started in subshell
*>\[1] [0-9]##
>main
*>running:+:*=running
>sub
*>running::*=running
*>zsh:*SIGHUPed*
# output from zpty removes empty lines
zpty_start
zpty_input "MODULE_PATH=${(q)MODULE_PATH}"
zpty_input '(print main; print $jobstates; sleep 2& print sub; print $jobstates)'
zpty_input 'jobs -s'
zpty_stop
0:$jobstate shows no job started in main shell but one started in subshell
>main
>sub
*>running::*=running