summary refs log tree commit diff
path: root/Test/C05debug.ztst
blob: a6ef54bb48d04d863a77b83521b07ca1ca361d60 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
%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