1echo T.errmsg:  check some error messages
2
3awk=${awk-../a.out}
4
5ls >glop
6awk=$awk awk  '
7{	pat = $0
8	prog = ""
9	while (getline x > 0 && x != "")
10		prog = prog "\n" x
11	print sprintf("\n%s '"'"'%s'"'"' <glop >>devnull 2>foo",
12		ENVIRON["awk"], prog)
13	print sprintf("grep '"'"'%s'"'"' foo >>devnull || echo '"'"'BAD: %s'"'"' failed", pat, pat)
14}
15' >foo.sh <<\!!!!
16illegal primary in regular expression
17/(/
18
19illegal break, continue, next or nextfile from BEGIN
20BEGIN { nextfile }
21
22illegal break, continue, next or nextfile from END
23END { nextfile }
24
25nextfile is illegal inside a function
26function foo() { nextfile }
27
28duplicate argument
29function f(i,j,i) { return i }
30
31nonterminated character class
32/[[/
33
34nonterminated character class
35/[]/
36
37nonterminated character class
38/[\
39
40nonterminated character class
41BEGIN { s = "[x"; if (1 ~ s) print "foo"}
42
43syntax error in regular expression
44BEGIN { if ("x" ~ /$^/) print "ugh" }
45
46syntax error in regular expression
47/((.)/
48
49division by zero
50BEGIN { print 1/0 }
51
52division by zero in /=
53BEGIN { x = 1; print x /= 0 }
54
55division by zero in %=
56BEGIN { x = 1; print x %= 0 }
57
58division by zero in mod
59BEGIN { print 1%0 }
60
61can.t read value.* array name.
62BEGIN { x[1] = 0; split("a b c", y, x) }
63
64can.t read value.* function
65function f(){}; {split($0, x, f)}
66
67can.t assign.* a function
68function f(){}; {f = split($0, x)}
69
70can.t assign to x; it.s an array name.
71{x = split($0, x)}
72
73is a function, not an array
74function f(){}; {split($0, f)}
75
76function f called with 1 args, uses only 0
77BEGIN { f(f) }
78function f() { print "x" }
79
80can.t use function f as argument in f
81BEGIN { f(f) }
82function f() { print "x" }
83
84x is an array, not a function
85{ split($0, x) }; function x() {}
86
87illegal nested function
88function x() { function g() {} }
89
90return not in function
91{ return }
92
93break illegal outside
94{ break }
95
96continue illegal outside
97{ continue }
98
99non-terminated string
100{ print "abc
101}
102
103illegal field $(foo)
104BEGIN { print $"foo" }
105
106next is illegal inside a function
107BEGIN { f() }
108function f() { next }
109
110not enough args in printf(%s)
111BEGIN { printf("%s") }
112
113weird printf conversion
114BEGIN { printf("%z", "foo")}
115
116function f has .* arguments, limit .*
117function f(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,
118	c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,
119	e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10) {}
120BEGIN { f(123) }
121
122bailing out
123])}
124
125bailing out
126{ print }}
127
128bailing out
129{ print }}}
130
131bailing out
132]
133
134bailing out
135[
136
137bailing out
138a & b
139
140extra )
141{ x = 1) }
142
143illegal statement
144{ print ))}
145
146illegal statement
147{{ print }
148
149illegal statement
150{{{ print }
151
152illegal .*next.* from BEGIN
153BEGIN { next }
154
155illegal .*next.* from END
156END {	next; print NR }
157
158can.t open file ./nonexistentdir/foo
159BEGIN { print "abc" >"./nonexistentdir/foo" }
160
161you can.t define function f more than once
162function f() { print 1 }
163function f() { print 2 }
164
165function mp called with 1 args, uses only 0
166function mp(){ cnt++;}
167BEGIN {	mp(xx) }
168
169index.*doesn.t permit regular expressions
170BEGIN { index("abc", /a/) }
171
172log argument out of domain
173BEGIN { print log(-1) }
174
175exp result out of range
176BEGIN {print exp(1000)}
177
178null file name in print or getline
179BEGIN { print >foo }
180
181function has too many arguments
182BEGIN { length("abc", "def") }
183
184calling undefined function foo
185BEGIN { foo() }
186
187this should print a BAD message
188BEGIN { print }
189!!!!
190
191
192echo '	running tests in foo.sh'
193sh foo.sh
194
195test -r core && echo BAD: someone dropped core 1>&2
196
197echo xxx >foo0
198$awk '{print x}' x='a
199b' foo0 >foo1 2>foo2
200grep 'newline in string' foo2 >/dev/null || echo 'BAD: T.errmsg newline in string'
201
202$awk -safe 'BEGIN{"date" | getline}' >foo 2>foo2
203grep 'cmd | getline is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg cmd|getline unsafe'
204
205$awk -safe 'BEGIN{print >"foo"}' >foo 2>foo2
206grep 'print > is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print > unsafe'
207
208$awk -safe 'BEGIN{print >> "foo"}' >foo 2>foo2
209grep 'print >> is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print >> unsafe'
210
211$awk -safe 'BEGIN{print | "foo"}' >foo 2>foo2
212grep 'print | is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print | unsafe'
213
214$awk -safe 'BEGIN {system("date")}' >foo 2>foo2
215grep 'system is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg system unsafe'
216