mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			159 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			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
 |