1# Test that xtrace output is correctly generated
2
3%prep
4  mkdir xtrace.tmp && cd xtrace.tmp
5
6  function xtf {
7    local regression_test_dummy_variable
8    print "$*"
9  }
10  function xtfx {
11    local regression_test_dummy_variable
12    print "Tracing: (){ builtin 2>file }" 2>>xtrace.err
13    { print "Tracing: (){ { builtin } 2>file }" } 2>>xtrace.err
14  }
15  echo 'print "$*"' > xt.in
16
17%test
18
19  PS4='+%N:%i> '
20  set -x
21  print 'Tracing: builtin'
22  print 'Tracing: builtin 2>file' 2>xtrace.err
23  cat <<<'Tracing: external'
24  cat <<<'Tracing: external 2>file' 2>>xtrace.err
25  ( print 'Tracing: ( builtin )' )
26  ( print 'Tracing: ( builtin ) 2>file' ) 2>>xtrace.err
27  ( cat <<<'Tracing: ( external )' )
28  ( cat <<<'Tracing: ( external ) 2>file' ) 2>>xtrace.err
29  { print 'Tracing: { builtin }' }
30  { print 'Tracing: { builtin } 2>file' } 2>>xtrace.err
31  { cat <<<'Tracing: { external }' }
32  { cat <<<'Tracing: { external } 2>file' } 2>>xtrace.err
33  repeat 1 do print 'Tracing: do builtin done'; done
34  repeat 1 do print 'Tracing: do builtin done 2>file'; done 2>>xtrace.err
35  repeat 1 do cat <<<'Tracing: do external done'; done
36  repeat 1 do cat <<<'Tracing: do external done 2>file'; done 2>>xtrace.err
37  xtf 'Tracing: function'
38  xtf 'Tracing: function 2>file' 2>>xtrace.err
39  xtfx
40  . ./xt.in 'Tracing: source'
41  . ./xt.in 'Tracing: source 2>file' 2>>xtrace.err
42  set +x
43  cat xtrace.err
440:xtrace with and without redirection
45>Tracing: builtin
46>Tracing: builtin 2>file
47>Tracing: external
48>Tracing: external 2>file
49>Tracing: ( builtin )
50>Tracing: ( builtin ) 2>file
51>Tracing: ( external )
52>Tracing: ( external ) 2>file
53>Tracing: { builtin }
54>Tracing: { builtin } 2>file
55>Tracing: { external }
56>Tracing: { external } 2>file
57>Tracing: do builtin done
58>Tracing: do builtin done 2>file
59>Tracing: do external done
60>Tracing: do external done 2>file
61>Tracing: function
62>Tracing: function 2>file
63>Tracing: (){ builtin 2>file }
64>Tracing: (){ { builtin } 2>file }
65>Tracing: source
66>Tracing: source 2>file
67>+(eval):8> print 'Tracing: ( builtin ) 2>file'
68>+(eval):10> cat
69>+(eval):12> print 'Tracing: { builtin } 2>file'
70>+(eval):14> cat
71>+(eval):16> print 'Tracing: do builtin done 2>file'
72>+(eval):18> cat
73>+xtf:1> local regression_test_dummy_variable
74>+xtf:2> print 'Tracing: function 2>file'
75>+xtfx:3> print 'Tracing: (){ { builtin } 2>file }'
76?+(eval):3> print 'Tracing: builtin'
77?+(eval):4> print 'Tracing: builtin 2>file'
78?+(eval):5> cat
79?+(eval):6> cat
80?+(eval):7> print 'Tracing: ( builtin )'
81?+(eval):9> cat
82?+(eval):11> print 'Tracing: { builtin }'
83?+(eval):13> cat
84?+(eval):15> print 'Tracing: do builtin done'
85?+(eval):17> cat
86?+(eval):19> xtf 'Tracing: function'
87?+xtf:1> local regression_test_dummy_variable
88?+xtf:2> print 'Tracing: function'
89?+(eval):20> xtf 'Tracing: function 2>file'
90?+(eval):21> xtfx
91?+xtfx:1> local regression_test_dummy_variable
92?+xtfx:2> print 'Tracing: (){ builtin 2>file }'
93?+(eval):22> . ./xt.in 'Tracing: source'
94?+./xt.in:1> print 'Tracing: source'
95?+(eval):23> . ./xt.in 'Tracing: source 2>file'
96?+./xt.in:1> print 'Tracing: source 2>file'
97?+(eval):24> set +x
98
99 typeset -ft xtf
100 xtf 'Tracing: function'
1010:tracing function
102>Tracing: function
103?+xtf:1> local regression_test_dummy_variable
104?+xtf:2> print 'Tracing: function'
105
106 echo 'PS4="+%x:%I> "
107 fn() {
108   print This is fn.
109 }
110 :
111 fn
112 ' >fnfile
113 $ZTST_testdir/../Src/zsh -fx ./fnfile 2>errfile
114 grep '\./fnfile' errfile 1>&2
1150:Trace output with sourcefile and line number.
116>This is fn.
117?+./fnfile:1> PS4='+%x:%I> ' 
118?+./fnfile:5> :
119?+./fnfile:6> fn
120?+./fnfile:3> print This is fn.
121
122 set -x
123 [[ 'f o' = 'f x'* || 'b r' != 'z o' && 'squashy sound' < 'squishy sound' ]]
124 [[ -e nonexistentfile || ( -z '' && -t 3 ) ]]
125 set +x
1260:Trace for conditions
127?+(eval):2> [[ 'f o' == f\ x* || 'b r' != z\ o && 'squashy sound' < 'squishy sound' ]]
128?+(eval):3> [[ -e nonexistentfile || -z '' && -t 3 ]]
129?+(eval):4> set +x
130