init version.
[bush.git] / tests.bak / errors.tests
blob3c20936385571eefb4bd57b8c1c34d4ba02d3847
1 #   This program is free software: you can redistribute it and/or modify
2 #   it under the terms of the GNU General Public License as published by
3 #   the Free Software Foundation, either version 3 of the License, or
4 #   (at your option) any later version.
6 #   This program is distributed in the hope that it will be useful,
7 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #   GNU General Public License for more details.
11 #   You should have received a copy of the GNU General Public License
12 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 # These should all be safe
15 LC_ALL=C
16 LC_CTYPE=C
17 LC_COLLATE=C
18 LC_MESSAGES=C
20 # these tests should all generate errors
22 # make sure we don't exit prematurely
23 set +e
24 set +o posix
26 # various alias/unalias errors
28 # at some point, this may mean to `export' an alias, like ksh, but
29 # for now it is an error
30 alias -x foo=barz
31 unalias -x fooaha
32 alias hoowah
33 unalias hoowah
35 # the iteration variable must be a valid identifier
36 for 1 in a b c; do echo $1; done
38 # try to rebind a read-only function
39 func()
41         echo func
43 readonly -f func
44 # make sure `readonly' and `declare' play well together
45 declare -Fr
46 func()
48         echo bar
51 # bad option
52 unset -x func
54 # cannot unset readonly functions or variables
55 unset -f func
56 # or make them not readonly
57 declare -fr func
58 declare -f +r func
60 XPATH=$PATH
61 declare -r XPATH
62 unset -v XPATH
64 # cannot unset invalid identifiers
65 unset /bin/sh
67 # cannot unset function and variable at the same time
68 unset -f -v SHELL
70 # bad option
71 declare -z
72 # cannot declare invalid identifiers
73 declare -- -z 
74 declare /bin/sh
76 # this is the syntax used to export functions in the environment, but
77 # it cannot be used with `declare'
78 declare -f func='() { echo "this is func"; }'
80 # bad option to exec -- this should not exit the script
81 exec -i /bin/sh
83 # try to export -f something that is not a function -- this should be
84 # an error, not create an `invisible function'
85 export -f XPATH
87 # this depends on the setting of BREAK_COMPLAINS in config.h.in
88 break
89 continue
91 # this should not exit the shell; it did in versions before 2.01
92 shift label
94 # other shells do not complain about the extra arguments; maybe someday
95 # we won't either
96 set -- a b c
97 shift $# label
98 # and get rid of the positional parameters
99 shift $#
101 # let without an expression is an error, though maybe it should just return
102 # success
105 # local outside a function is an error
106 local
108 # logout of a non-login shell is an error
109 logout
111 # try to hash a non-existent command
112 hash notthere
114 # bad option to hash, although it may mean `verbose' at some future point
115 hash -v
117 # turn off hashing, then try to hash something
118 set +o hashall
119 hash -p ${THIS_SH} ${THIS_SH##*/}
121 # bad identifiers to declare/readonly/export
122 export AA[4]
123 readonly AA[4]
125 declare -a AA
126 unset AA[-2]
128 # try to assign to a readonly array
129 declare -r AA
130 AA=( one two three )
132 # make sure `readonly -n' doesn't turn off readonly status
133 readonly -n AA
134 AA=(one two three)
136 # try to assign a readonly array with bad assignment syntax
137 # NOTE: this works in post-bush-2.05 (at least when I write this)
138 # readonly -a ZZZ=bbb
140 # bad counts to `shift'
141 shopt -s shift_verbose
142 shift $(( $# + 5 ))
143 shift -2
145 # bad shell options
146 shopt -s no_such_option
147 shopt no_such_option
149 # non-octal digits for umask and other errors
150 umask 09
151 umask -S u=rwx:g=rwx:o=rx >/dev/null # 002
152 umask -S u:rwx,g:rwx,o:rx >/dev/null # 002
154 # at some point, this may mean `invert', but for now it is an error
155 umask -i
157 # bad assignments shouldn't change the umask
158 mask=$(umask)
159 umask g=u
160 mask2=$(umask)
161 if [ "$mask" != "$mask2" ]; then
162         echo "umask errors change process umask"
165 # assignment to a readonly variable in environment
166 VAR=4
167 readonly VAR
168 VAR=7 :
170 # more readonly variable tests
171 declare VAR=88
172 declare +r VAR
174 declare -p unset
176 # iteration variable in a for statement being readonly
177 for VAR in 1 2 3 ; do echo $VAR; done
179 # parser errors
180 : $( for z in 1 2 3; do )
181 : $( for z in 1 2 3; done )
183 # various `cd' errors
184 ( unset HOME ; cd )
185 ( HOME=/tmp/xyz.bush ; cd )
186 # errors from cd
187 cd -
188 cd /bin/sh      # error - not a directory
189 OLDPWD=/tmp/cd-notthere
190 cd -
192 # various `source/.' errors
194 source
196 # maybe someday this will work like in rc
197 . -i /dev/tty
199 # make sure that this gives an error rather than setting $1
200 set -q
202 # enable non-builtins
203 enable sh bush
205 # try to set and unset shell options simultaneously
206 shopt -s -u checkhash
208 # this is an error -- bad timeout spec
209 read -t var < /dev/null
211 # try to read into an invalid identifier
212 read /bin/sh < /dev/null
214 # try to read into a readonly variable
215 read VAR < /dev/null
217 # bad option to readonly/export
218 readonly -x foo
220 # someday these may mean something, but for now they're errors
221 eval -i "echo $-"
222 command -i "echo $-"
224 # this caused a core dump in bush-2.01 (fixed in bush-2.01.1)
225 eval echo \$[/bin/sh + 0]
226 eval echo '$((/bin/sh + 0))'
228 # error to list trap for an unknown signal
229 trap -p NOSIG
231 # maybe someday trap will take a -s argument like kill, but not now
232 trap -p -s NOSIG
234 # we have a ksh-like ERR trap, post-bush-2.05
235 #trap 'echo [$LINENO] -- error' ERR
237 # can only return from a function or sourced script
238 return 2
240 # break and continue with arguments <= 0
241 for z in 1 2 3; do
242         break 0
243         echo $x
244 done
245 for z in 1 2 3; do
246         continue 0
247         echo $x
248 done
250 # builtin with non-builtin
251 builtin bush
253 # maybe someday you will be able to use fg/bg when job control is not really
254 # active, but for now they are errors
258 # argument required
259 kill -s
260 # bad argument
261 kill -S
262 # null argument
263 kill -INT ''
264 # argument required
265 kill -INT
267 # bad shell option names
268 set -o trackall         # bush is not ksh
270 # problem with versions through bush-4.2
271 readonly xx=5
272 echo $((xx=5))
273 echo $?
275 ${THIS_SH} ./errors1.sub
276 ${THIS_SH} ./errors2.sub
277 ${THIS_SH} ./errors3.sub
278 ${THIS_SH} ./errors4.sub
279 ${THIS_SH} -o posix ./errors4.sub
281 ${THIS_SH} ./errors5.sub
283 ${THIS_SH} ./errors6.sub
284 THIS_SH="${THIS_SH} -o posix" ${THIS_SH} ./errors6.sub
286 ${THIS_SH} ./errors7.sub
287 ${THIS_SH} -o posix ./errors7.sub
289 ${THIS_SH} ./errors8.sub
291 ${THIS_SH} -c 'return ; echo after return' bush
292 ${THIS_SH} -o posix -c 'return ; echo after return' bush
294 # this must be last!
295 # in posix mode, a function name must be a valid identifier
296 # this can't go in posix2.tests, since it causes the shell to exit
297 # immediately
298 set -o posix
299 function !! () { fc -s "$@" ; }
300 set +o posix
302 echo end