source: vendor/bash/3.1-p17/tests/builtins.tests

Last change on this file was 3228, checked in by bird, 18 years ago

bash 3.1

File size: 5.3 KB
Line 
1# tests for miscellaneous builtins not tested elsewhere
2set +p
3set +o posix
4
5ulimit -c 0 2>/dev/null
6
7# check that break breaks loops
8for i in a b c; do echo $i; break; echo bad-$i; done
9echo end-1
10for i in a b c; do echo $i; break 1; echo bad-$i; done
11echo end-2
12for i in a b c; do
13 for j in x y z; do
14 echo $i:$j
15 break
16 echo bad-$i
17 done
18 echo end-$i
19done
20echo end-3
21
22# check that break breaks nested loops
23for i in a b c; do
24 for j in x y z; do
25 echo $i:$j
26 break 2
27 echo bad-$i
28 done
29 echo end-$i
30done
31echo end
32
33# check that continue continues loops
34for i in a b c; do echo $i; continue; echo bad-$i ; done
35echo end-1
36for i in a b c; do echo $i; continue 1; echo bad-$i; done
37echo end-2
38for i in a b c; do
39 for j in x y z; do
40 echo $i:$j
41 continue
42 echo bad-$i-$j
43 done
44 echo end-$i
45done
46echo end-3
47
48# check that continue breaks out of nested loops
49for i in a b c; do
50 for j in x y z; do
51 echo $i:$j
52 continue 2
53 echo bad-$i-$j
54 done
55 echo end-$i
56done
57echo end
58
59# check that `eval' re-evaluates arguments, but `builtin' and `command' do not
60AVAR='$BVAR'
61BVAR=foo
62
63echo $AVAR
64builtin echo $AVAR
65command echo $AVAR
66eval echo \$AVAR
67eval echo $AVAR
68
69# test out eval with a temp environment
70AVAR=bar eval echo \$AVAR
71BVAR=xxx eval echo $AVAR
72
73unset -v AVAR BVAR
74
75# test umask
76mask=$(umask)
77umask 022
78umask
79umask -S
80umask -S u=rwx,g=rwx,o=rx >/dev/null # 002
81umask
82umask -S
83umask -p
84umask -p -S
85umask 0
86umask -S
87umask ${mask} # restore original mask
88
89# builtin/command without arguments should do nothing. maybe someday they will
90builtin
91command
92
93# test enable
94enable -ps
95
96enable -aps ; enable -nps
97
98enable -n test
99case "$(type -t test)" in
100builtin) echo oops -- enable -n test failed ;;
101*) echo enable -n test worked ;;
102esac
103
104enable test
105case "$(type -t test)" in
106builtin) echo enable test worked ;;
107*) echo oops -- enable test failed ;;
108esac
109
110# test options to exec
111(exec -a specialname ${THIS_SH} -c 'echo $0' )
112(exec -l -a specialname ${THIS_SH} -c 'echo $0' )
113# test `clean' environment. if /bin/sh is bash, and the script version of
114# printenv is run, there will be variables in the environment that bash
115# sets on startup. Also test code that prefixes argv[0] with a dash.
116(export FOO=BAR ; exec -c -l printenv ) | grep FOO
117(FOO=BAR exec -c printenv ) | grep FOO
118
119(export FOO=BAR ; exec printenv ) | grep FOO
120(FOO=BAR exec printenv ) | grep FOO
121
122# ok, forget everything about hashed commands
123hash -r
124hash
125
126# this had better succeed, since command -p guarantees we will find the
127# standard utilties
128command -p hash rm
129
130# check out source/.
131
132# sourcing a zero-length-file had better not be an error
133rm -f /tmp/zero-length-file
134cp /dev/null /tmp/zero-length-file
135. /tmp/zero-length-file
136echo $?
137rm /tmp/zero-length-file
138
139AVAR=AVAR
140
141. ./source1.sub
142AVAR=foo . ./source1.sub
143
144. ./source2.sub
145echo $?
146
147set -- a b c
148. ./source3.sub
149
150# make sure source with arguments does not change the shell's positional
151# parameters, but that the sourced file sees the arguments as its
152# positional parameters
153echo "$@"
154. ./source3.sub x y z
155echo "$@"
156
157# but if the sourced script sets the positional parameters explicitly, they
158# should be reflected in the calling shell's positional parameters. this
159# also tests one of the shopt options that controls source using $PATH to
160# find the script
161echo "$@"
162shopt -u sourcepath
163. source4.sub
164echo "$@"
165
166# this is complicated when the sourced scripts gets its own positional
167# parameters from arguments to `.'
168set -- a b c
169echo "$@"
170. source4.sub x y z
171echo "$@"
172
173# test out cd and $CDPATH
174${THIS_SH} ./builtins1.sub
175
176# test behavior of `.' when given a non-existant file argument
177${THIS_SH} ./source5.sub
178
179# in posix mode, assignment statements preceding special builtins are
180# reflected in the shell environment. `.' and `eval' need special-case
181# code.
182set -o posix
183echo $AVAR
184AVAR=foo . ./source1.sub
185echo $AVAR
186
187AVAR=AVAR
188echo $AVAR
189AVAR=foo eval echo \$AVAR
190echo $AVAR
191
192AVAR=AVAR
193echo $AVAR
194AVAR=foo :
195echo $AVAR
196set +o posix
197
198# but assignment statements preceding `export' are always reflected in
199# the environment
200foo="" export foo
201declare -p foo
202unset foo
203
204# assignment statements preceding `declare' should be displayed correctly,
205# but not persist after the command
206FOO='$$' declare -p FOO
207declare -p FOO
208unset FOO
209
210# except for `declare -x', which should be equivalent to `export'
211FOO='$$' declare -x FOO
212declare -p FOO
213unset FOO
214
215# test out kill -l. bash versions prior to 2.01 did `kill -l num' wrong
216sigone=$(kill -l | sed -n 's:^ 1) *\([^ ]*\)[ ].*$:\1:p')
217
218case "$(kill -l 1)" in
219${sigone/SIG/}) echo ok;;
220*) echo oops -- kill -l failure;;
221esac
222
223# kill -l and trap -l should display exactly the same output
224sigonea=$(trap -l | sed -n 's:^ 1) *\([^ ]*\)[ ].*$:\1:p')
225
226if [ "$sigone" != "$sigonea" ]; then
227 echo oops -- kill -l and trap -l differ
228fi
229
230# POSIX.2 says that exit statuses > 128 are mapped to signal names by
231# subtracting 128 so you can find out what signal killed a process
232case "$(kill -l $(( 128 + 1)) )" in
233${sigone/SIG/}) echo ok;;
234*) echo oops -- kill -l 129 failure;;
235esac
236
237# out-of-range signal numbers should report the argument in the error
238# message, not 128 less than the argument
239kill -l 4096
240
241# kill -l NAME should return the signal number
242kill -l ${sigone/SIG/}
243
244# test behavior of shopt xpg_echo
245${THIS_SH} ./builtins2.sub
246
247# this must be last -- it is a fatal error
248exit status
249
250echo after bad exit
Note: See TracBrowser for help on using the repository browser.