1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-12-29 16:25:35 +01:00
zsh/Test/C05debug.ztst
2008-12-29 04:24:36 +00:00

159 lines
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 2>erroutput.dif
mystat=$?
(
setopt extendedglob
print ${"$(< erroutput.dif)"%%:[^:]#: ./fdasfsdafd}
)
(( mystat == 0 ))
0: trapreturn handling bug is properly fixed
>./zsh-trapreturn-bug2:5
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
fn() {
emulate -L zsh; setopt debugbeforecmd
trap 'print "$LINENO: '\''$ZSH_DEBUG_CMD'\''"' DEBUG
print foo &&
print bar ||
print rod
x=y
print $x
fn2() { echo wow }
fn2
}
fn
0:ZSH_DEBUG_CMD in debug traps
>3: 'print foo && print bar || print rod'
>foo
>bar
>6: 'x=y '
>7: 'print $x'
>y
>8: 'fn2 () {
> echo wow
>}'
>9: 'fn2'
>0: 'echo wow'
>wow
foo() {
emulate -L zsh; setopt debugbeforecmd
trap '[[ $ZSH_DEBUG_CMD == *bar* ]] && return 2' DEBUG
echo foo
echo bar
}
foo
2:Status of forced return from eval-style DEBUG trap
>foo
%clean
rm -f bug-file bug-file2 erroutput.dif zsh-trapreturn-bug2