xref: /titanic_50/usr/src/lib/libshell/common/tests/bracket.sh (revision 3eae19d9cf3390cf5b75e10c9c1945fd36ad856a)
1########################################################################
2#                                                                      #
3#               This software is part of the ast package               #
4#           Copyright (c) 1982-2007 AT&T Knowledge Ventures            #
5#                      and is licensed under the                       #
6#                  Common Public License, Version 1.0                  #
7#                      by AT&T Knowledge Ventures                      #
8#                                                                      #
9#                A copy of the License is available at                 #
10#            http://www.opensource.org/licenses/cpl1.0.txt             #
11#         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         #
12#                                                                      #
13#              Information and Software Systems Research               #
14#                            AT&T Research                             #
15#                           Florham Park NJ                            #
16#                                                                      #
17#                  David Korn <dgk@research.att.com>                   #
18#                                                                      #
19########################################################################
20function err_exit
21{
22	print -u2 -n "\t"
23	print -u2 -r ${Command}[$1]: "${@:2}"
24	let Errors+=1
25}
26alias err_exit='err_exit $LINENO'
27
28Command=${0##*/}
29integer Errors=0
30null=''
31if	[[ ! -z $null ]]
32then	err_exit "-z: null string should be of zero length"
33fi
34file=/tmp/regress$$
35if	[[ -z $file ]]
36then	err_exit "-z: $file string should not be of zero length"
37fi
38trap "rm -f $file" EXIT
39rm -f $file
40if	[[ -a $file ]]
41then	err_exit "-a: $file shouldn't exist"
42fi
43> $file
44if	[[ ! -a $file ]]
45then	err_exit "-a: $file should exist"
46fi
47chmod 777 $file
48if	[[ ! -r $file ]]
49then	err_exit "-r: $file should be readable"
50fi
51if	[[ ! -w $file ]]
52then	err_exit "-w: $file should be writable"
53fi
54if	[[ ! -w $file ]]
55then	err_exit "-x: $file should be executable"
56fi
57if	[[ ! -w $file || ! -r $file ]]
58then	err_exit "-rw: $file should be readable/writable"
59fi
60if	[[ -s $file ]]
61then	err_exit "-s: $file should be of zero size"
62fi
63if	[[ ! -f $file ]]
64then	err_exit "-f: $file should be an ordinary file"
65fi
66if	[[  -d $file ]]
67then	err_exit "-f: $file should not be a directory file"
68fi
69if	[[  ! -d . ]]
70then	err_exit "-d: . should not be a directory file"
71fi
72if	[[  -f /dev/null ]]
73then	err_exit "-f: /dev/null  should not be an ordinary file"
74fi
75chmod 000 $file
76if	[[ -r $file ]]
77then	err_exit "-r: $file should not be readable"
78fi
79if	[[ ! -O $file ]]
80then	err_exit "-r: $file should be owned by me"
81fi
82if	[[ -w $file ]]
83then	err_exit "-w: $file should not be writable"
84fi
85if	[[ -w $file ]]
86then	err_exit "-x: $file should not be executable"
87fi
88if	[[ -w $file || -r $file ]]
89then	err_exit "-rw: $file should not be readable/writable"
90fi
91if	[[   -z x &&  -z x || ! -z x ]]
92then	:
93else	err_exit " wrong precedence"
94fi
95if	[[   -z x &&  (-z x || ! -z x) ]]
96then	err_exit " () grouping not working"
97fi
98if	[[ foo < bar ]]
99then	err_exit "foo comes before bar"
100fi
101[[ . -ef $(pwd) ]] || err_exit ". is not $PWD"
102set -o allexport
103[[ -o allexport ]] || err_exit '-o: did not set allexport option'
104if	[[ -n  $null ]]
105then	err_exit "'$null' has non-zero length"
106fi
107if	[[ ! -r /dev/fd/0 ]]
108then	err_exit "/dev/fd/0 not open for reading"
109fi
110if	[[ ! -w /dev/fd/2 ]]
111then	err_exit "/dev/fd/2 not open for writing"
112fi
113sleep 1
114if	[[ ! . -ot $file ]]
115then	err_exit ". should be older than $file"
116fi
117if	[[ /bin -nt $file ]]
118then	err_exit "$file should be newer than /bin"
119fi
120if	[[ $file != /tmp/* ]]
121then	err_exit "$file should match /tmp/*"
122fi
123if	[[ $file = '/tmp/*' ]]
124then	err_exit "$file should not equal /tmp/*"
125fi
126[[ ! ( ! -z $null && ! -z x) ]]	|| err_exit "negation and grouping"
127[[ -z '' || -z '' || -z '' ]]	|| err_exit "three ors not working"
128[[ -z '' &&  -z '' && -z '' ]]	|| err_exit "three ors not working"
129(exit 8)
130if	[[ $? -ne 8 || $? -ne 8 ]]
131then	err_exit 'value $? within [[...]]'
132fi
133x='(x'
134if	[[ '(x' != '('* ]]
135then	err_exit " '(x' does not match '('* within [[...]]"
136fi
137if	[[ '(x' != "("* ]]
138then	err_exit ' "(x" does not match "("* within [[...]]'
139fi
140if	[[ '(x' != \(* ]]
141then	err_exit ' "(x" does not match \(* within [[...]]'
142fi
143if	[[ 'x(' != *'(' ]]
144then	err_exit " 'x(' does not match '('* within [[...]]"
145fi
146if	[[ 'x&' != *'&' ]]
147then	err_exit " 'x&' does not match '&'* within [[...]]"
148fi
149if	[[ 'xy' = *'*' ]]
150then	err_exit " 'xy' matches *'*' within [[...]]"
151fi
152if	[[ 3 > 4 ]]
153then	err_exit '3 < 4'
154fi
155if	[[ 4 < 3 ]]
156then	err_exit '3 > 4'
157fi
158if	[[ 3x > 4x ]]
159then	err_exit '3x < 4x'
160fi
161x='bin|dev|?'
162cd /
163if	[[ $(print $x) != "$x" ]]
164then	err_exit 'extended pattern matching on command arguments'
165fi
166if	[[ dev != $x ]]
167then	err_exit 'extended pattern matching not working on variables'
168fi
169if	[[ -u $SHELL ]]
170then	err_exit "setuid on $SHELL"
171fi
172if	[[ -g $SHELL ]]
173then	err_exit "setgid on $SHELL"
174fi
175test -d .  -a '(' ! -f . ')' || err_exit 'test not working'
176if	[[ '!' != ! ]]
177then	err_exit 'quoting unary operator not working'
178fi
179chmod 600 $file
180exec 4> $file
181print -u4 foobar
182if	[[ ! -s $file ]]
183then	err_exit "-s: $file should be non-zero"
184fi
185exec 4>&-
186if	[[ 011 -ne 11 ]]
187then	err_exit "leading zeros in arithmetic compares not ignored"
188fi
189{
190	set -x
191	[[ foo > bar ]]
192} 2> /dev/null || { set +x; err_exit "foo<bar with -x enabled" ;}
193set +x
194(
195	eval "[[ (a) ]]"
196) 2> /dev/null || err_exit "[[ (a) ]] not working"
197> $file
198chmod 4755 "$file"
199if	test -u $file && test ! -u $file
200then	err_exit "test ! -u suidfile not working"
201fi
202for i in '(' ')' '[' ']'
203do	[[ $i == $i ]] || err_exit "[[ $i != $i ]]"
204done
205(
206	[[ aaaa == {4}(a) ]] || err_exit 'aaaa != {4}(a)'
207	[[ aaaa == {2,5}(a) ]] || err_exit 'aaaa != {2,4}(a)'
208	[[ abcdcdabcd == {3,6}(ab|cd) ]] || err_exit 'abcdcdabcd == {3,4}(ab|cd)'
209	[[ abcdcdabcde == {5}(ab|cd)e ]] || err_exit 'abcdcdabcd == {5}(ab|cd)e'
210) || err_exit 'Errors with {..}(...) patterns'
211[[ D290.2003.02.16.temp == D290.+(2003.02.16).temp* ]] || err_exit 'pattern match bug with +(...)'
212rm -rf $file
213{
214[[ -N $file ]] && err_exit 'test -N /tmp/*: st_mtime>st_atime after creat'
215sleep 2
216print 'hello world'
217[[ -N $file ]] || err_exit 'test -N /tmp/*: st_mtime<=st_atime after write'
218sleep 2
219read
220[[ -N $file ]] && err_exit 'test -N /tmp/*: st_mtime>st_atime after read'
221} > $file < $file
222if	rm -rf "$file" && ln -s / "$file"
223then	[[ -L "$file" ]] || err_exit '-L not working'
224	[[ -L "$file"/ ]] && err_exit '-L with file/ not working'
225fi
226$SHELL -c 't=1234567890; [[ $t == @({10}(\d)) ]]' 2> /dev/null || err_exit ' @({10}(\d)) pattern not working'
227$SHELL -c '[[ att_ == ~(E)(att|cus)_.* ]]' 2> /dev/null || err_exit ' ~(E)(att|cus)_* pattern not working'
228$SHELL -c '[[ att_ =~ (att|cus)_.* ]]' 2> /dev/null || err_exit ' =~ ere not working'
229$SHELL -c '[[ abc =~ a(b)c ]]' 2> /dev/null || err_exit '[[ abc =~ a(b)c ]] fails'
230$SHELL -xc '[[ abc =~  \babc\b ]]' 2> /dev/null || err_exit '[[ abc =~ \babc\b ]] fails'
231[[ abc == ~(E)\babc\b ]] || err_exit '\b not preserved for ere when not in ()'
232[[ abc == ~(iEi)\babc\b ]] || err_exit '\b not preserved for ~(iEi) when not in ()'
233exit $((Errors))
234