about summary refs log tree commit diff
path: root/Test/05command.ztst
blob: 9581064934c093e8e1b91aa497278a4567b61e80 (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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
%prep

  storepath=($path)

  mkdir command.tmp command.tmp/dir1 command.tmp/dir2

  cd command.tmp

  print '#!/bin/sh\necho This is top' >tstcmd
  print '#!/bin/sh\necho This is dir1' >dir1/tstcmd
  print '#!/bin/sh\necho This is dir2' >dir2/tstcmd

  chmod 755 tstcmd dir1/tstcmd dir2/tstcmd

%test
  ./tstcmd
0:./prog execution
>This is top

  path=($ZTST_testdir/command.tmp/dir1
        $ZTST_testdir/command.tmp/dir2
        .)
  tstcmd
  path=($storepath)
0:path (1)
>This is dir1

  path=(. command.tmp/dir{1,2})
  tstcmd
  path=($storepath)
0:path (2)
>This is top

  functst() { print $# arguments:; print -l $*; }
  functst "Eines Morgens" "als Gregor Samsa"
  functst ""
  functst "aus unrühigen Träumen erwachte"
  foo="fand er sich in seinem Bett"
  bar=
  rod="zu einem ungeheuren Ungeziefer verwandelt."
  functst $foo $bar $rod
# set up alias for next test
  alias foo='print This is alias one'
0:function argument passing
>2 arguments:
>Eines Morgens
>als Gregor Samsa
>1 arguments:
>
>1 arguments:
>aus unrühigen Träumen erwachte
>2 arguments:
>fand er sich in seinem Bett
>zu einem ungeheuren Ungeziefer verwandelt.

  alias foo='print This is alias two'
  fn() { foo; }
  fn
0:Aliases in functions
>This is alias one

  foo='Global foo'
  traptst() { local foo="Local foo"; trap 'print $foo' EXIT; }
  traptst
0:EXIT trap environment
>Global foo

  functst() { return 0; print Ha ha; return 1; }
  functst
0:return (1)

  functst() { return 1; print Ho ho; return 0; }
  functst
1:return (2)

  unfunction functst
  fpath=(.)
  print "print This is functst." >functst
  autoload functst
  functst
0:autoloading (1)
>This is functst.

  unfunction functst
  print "functst() { print This, too, is functst; }; print Hello." >functst
  typeset -fu functst
  functst
  functst
0:autoloading with initialization
>Hello.
>This, too, is functst

  unfunction functst
  print "print Yet another version" >functst
  functst() { autoload -X; }
  functst
0:autoloading via -X
>Yet another version

  chpwd() { print Changed to $PWD; }
  cd .
  unfunction chpwd
0q:chpwd
>Changed to $ZTST_testdir/command.tmp

# Hard to test periodic, precmd and preexec non-interactively.

  fn() { TRAPEXIT() { print Exit; }; }
  fn
0:TRAPEXIT
>Exit

  unfunction fn
  print 'TRAPDEBUG() {
      print Line $LINENO
    }
    :
    unfunction TRAPDEBUG
  }' > fn
  autoload fn
  fn
  rm fn
0:TRAPDEBUG
>Line 1
>Line 1

  unfunction fn
  print 'trap '\''print Line $LINENO'\'' DEBUG
    :
    trap - DEBUG
  }' > fn
  autoload fn
  fn
  rm fn
0:trap DEBUG
>Line 1
>Line 2

  TRAPZERR() { print Command failed; }
  true
  false
  true
  false
  unfunction TRAPZERR
0:TRAPZERR
>Command failed
>Command failed

  trap 'print Command failed again.' ZERR
  true
  false
  true
  false
  trap - ZERR
0:trap ZERR
>Command failed again.
>Command failed again.