mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-04 06:14:50 +01:00
115 lines
2.3 KiB
Text
115 lines
2.3 KiB
Text
|
%prep
|
||
|
|
||
|
setopt localtraps
|
||
|
|
||
|
%test
|
||
|
|
||
|
unsetopt DEBUG_BEFORE_CMD
|
||
|
debug-trap-bug1() {
|
||
|
setopt localtraps
|
||
|
print "print bug file here" >bug-file
|
||
|
print "print this is line one
|
||
|
print this is line two
|
||
|
print this is line three
|
||
|
print and this is line fifty-nine." >bug-file2
|
||
|
function debug_trap_handler {
|
||
|
print $functrace[1]
|
||
|
do_bug
|
||
|
}
|
||
|
function do_bug {
|
||
|
. ./bug-file
|
||
|
}
|
||
|
trap 'echo EXIT hit' EXIT
|
||
|
trap 'debug_trap_handler' DEBUG
|
||
|
. ./bug-file2
|
||
|
}
|
||
|
debug-trap-bug1
|
||
|
0: Relationship between traps and sources
|
||
|
>debug-trap-bug1:15
|
||
|
>bug file here
|
||
|
>this is line one
|
||
|
>./bug-file2:1
|
||
|
>bug file here
|
||
|
>this is line two
|
||
|
>./bug-file2:2
|
||
|
>bug file here
|
||
|
>this is line three
|
||
|
>./bug-file2:3
|
||
|
>bug file here
|
||
|
>and this is line fifty-nine.
|
||
|
>./bug-file2:4
|
||
|
>bug file here
|
||
|
>debug-trap-bug1:16
|
||
|
>bug file here
|
||
|
>EXIT hit
|
||
|
|
||
|
cat >zsh-trapreturn-bug2 <<-'HERE'
|
||
|
cmd='./fdasfsdafd'
|
||
|
[[ -x $cmd ]] && rm $cmd
|
||
|
set -o DEBUG_BEFORE_CMD
|
||
|
trap '[[ $? -ne 0 ]] && exit 0' DEBUG
|
||
|
$cmd # invalid command
|
||
|
# Failure
|
||
|
exit 10
|
||
|
HERE
|
||
|
$ZTST_testdir/../Src/zsh -f ./zsh-trapreturn-bug2
|
||
|
0: trapreturn handling bug is properly fixed
|
||
|
?./zsh-trapreturn-bug2:5: no such file or directory: ./fdasfsdafd
|
||
|
|
||
|
fn() {
|
||
|
setopt localtraps localoptions debugbeforecmd
|
||
|
trap '(( LINENO == 4 )) && setopt errexit' DEBUG
|
||
|
print $LINENO three
|
||
|
print $LINENO four
|
||
|
print $LINENO five
|
||
|
[[ -o errexit ]] && print "Hey, ERREXIT is set!"
|
||
|
}
|
||
|
fn
|
||
|
1:Skip line from DEBUG trap
|
||
|
>3 three
|
||
|
>5 five
|
||
|
|
||
|
# Assignments are a special case, since they use a simpler
|
||
|
# wordcode type, so we need to test skipping them separately.
|
||
|
fn() {
|
||
|
setopt localtraps localoptions debugbeforecmd
|
||
|
trap '(( LINENO == 4 )) && setopt errexit' DEBUG
|
||
|
x=three
|
||
|
x=four
|
||
|
print $LINENO $x
|
||
|
[[ -o errexit ]] && print "Hey, ERREXIT is set!"
|
||
|
}
|
||
|
fn
|
||
|
1:Skip assignment from DEBUG trap
|
||
|
>5 three
|
||
|
|
||
|
fn() {
|
||
|
setopt localtraps localoptions debugbeforecmd
|
||
|
trap 'print $LINENO' DEBUG
|
||
|
[[ a = a ]] && print a is ok
|
||
|
}
|
||
|
fn
|
||
|
0:line numbers of complex sublists
|
||
|
>3
|
||
|
>a is ok
|
||
|
|
||
|
fn() {
|
||
|
setopt localtraps localoptions debugbeforecmd
|
||
|
trap 'print $LINENO' DEBUG
|
||
|
print before
|
||
|
x=' first
|
||
|
second
|
||
|
third'
|
||
|
print $x
|
||
|
}
|
||
|
fn
|
||
|
0:line numbers of multiline assignments
|
||
|
>3
|
||
|
>before
|
||
|
>4
|
||
|
>7
|
||
|
> first
|
||
|
> second
|
||
|
> third
|
||
|
|