source: vendor/sed/current/testsuite/compile-errors.sh

Last change on this file was 3611, checked in by bird, 11 months ago

vendor/sed/current: GNU sed 4.9 (sed-4.9.tar.xz sha256:6e226b732e1cd739464ad6862bd1a1aba42d7982922da7a53519631d24975181)

File size: 8.9 KB
Line 
1#!/bin/sh
2# Test compilation errors
3
4# Copyright (C) 2016-2022 Free Software Foundation, Inc.
5
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
15
16# You should have received a copy of the GNU General Public License
17# along with this program. If not, see <https://www.gnu.org/licenses/>.
18. "${srcdir=.}/testsuite/init.sh"; path_prepend_ ./sed
19print_ver_ sed
20
21#
22# Excess P modifier to s// (EXCESS_P_OPT)
23#
24cat <<\EOF >exp-exs-p || framework_failure_
25sed: -e expression #1, char 8: multiple `p' options to `s' command
26EOF
27returns_ 1 sed 's/./x/pp' </dev/null 2>err-exs-p || fail=1
28compare_ exp-exs-p err-exs-p || fail=1
29
30#
31# Excess G modifier to s// (EXCESS_G_OPT)
32#
33cat <<\EOF >exp-exs-g || framework_failure_
34sed: -e expression #1, char 8: multiple `g' options to `s' command
35EOF
36returns_ 1 sed 's/./x/gg' </dev/null 2>err-exs-g || fail=1
37compare_ exp-exs-g err-exs-g || fail=1
38
39#
40# zero numeric modifier to s// (ZERO_N_OPT)
41#
42cat <<\EOF >exp-exs-0 || framework_failure_
43sed: -e expression #1, char 7: number option to `s' command may not be zero
44EOF
45returns_ 1 sed 's/./x/0' </dev/null 2>err-exs-0 || fail=1
46compare_ exp-exs-0 err-exs-0 || fail=1
47
48
49#
50# Multiple number modifiers to s// (EXCESS_N_OPT)
51#
52cat <<\EOF >exp-exs-n || framework_failure_
53sed: -e expression #1, char 9: multiple number options to `s' command
54EOF
55returns_ 1 sed 's/./x/2p3' </dev/null 2>err-exs-n || fail=1
56compare_ exp-exs-n err-exs-n || fail=1
57
58
59#
60# Unknown s/// modifier letter
61#
62cat << \EOF >exp-unk-s-opt || framework_failure_
63sed: -e expression #1, char 7: unknown option to `s'
64EOF
65returns_ 1 sed 's/./x/Q' </dev/null 2>err-unk-s-opt || fail=1
66compare_ exp-unk-s-opt err-unk-s-opt || fail=1
67
68#
69# Special case: s/// followed by \r alone
70#
71printf "s/./x/\r" > s-opt-r-in || framework_failure_
72cat << \EOF >exp-s-opt-r || framework_failure_
73sed: file s-opt-r-in line 1: unknown option to `s'
74EOF
75returns_ 1 sed -f s-opt-r-in </dev/null 2>err-s-opt-r || fail=1
76compare_ exp-s-opt-r err-s-opt-r || fail=1
77
78
79#
80# Step-address as first address (BAD_STEP)
81# (both +N and ~N addresses)
82cat <<\EOF >exp-step-addr || framework_failure_
83sed: -e expression #1, char 2: invalid usage of +N or ~N as first address
84EOF
85returns_ 1 sed '~1d' </dev/null 2>err-step-addr1 || fail=1
86compare_ exp-step-addr err-step-addr1 || fail=1
87returns_ 1 sed '+1d' </dev/null 2>err-step-addr2 || fail=1
88compare_ exp-step-addr err-step-addr2 || fail=1
89
90
91#
92# Multiple '!' (BAD_BANG)
93#
94cat <<\EOF >exp-bad-bang || framework_failure_
95sed: -e expression #1, char 3: multiple `!'s
96EOF
97returns_ 1 sed '1!!d' </dev/null 2>err-bad-bang || fail=1
98compare_ exp-bad-bang err-bad-bang || fail=1
99
100
101#
102# GNU extension commands, not accepted in --posix mode
103# (bad_command(OPT))
104for opt in e F v z L Q T R W ;
105do
106 cat <<EOF >exp-posix-cmd-$opt || framework_failure_
107sed: -e expression #1, char 2: unknown command: \`$opt'
108EOF
109 returns_ 1 sed --posix "1$opt" </dev/null 2>err-posix-cmd-$opt || fail=1
110 compare_ exp-posix-cmd-$opt err-posix-cmd-$opt || fail=1
111done
112
113#
114# GNU extension commands, accepting only one address in --posix mode
115# (ONE_ADDR)
116cat <<\EOF >exp-one-addr || framework_failure_
117sed: -e expression #1, char 4: command only uses one address
118EOF
119for opt in a i l = r ;
120do
121 returns_ 1 sed --posix "1,2$opt" </dev/null 2>err-posix-cmd-$opt || fail=1
122 compare_ exp-one-addr err-posix-cmd-$opt || fail=1
123done
124
125# q/Q always accept one address (Q is gnu extension, can't use --posix, above)
126for opt in q Q ;
127do
128 returns_ 1 sed "1,2$opt" </dev/null 2>err-posix-cmd-$opt || fail=1
129 compare_ exp-one-addr err-posix-cmd-$opt || fail=1
130done
131
132#
133# Comment with address (NO_CLOSE_BRACE_ADDR)
134#
135cat <<\EOF >exp-no-sharp || framework_failure_
136sed: -e expression #1, char 2: comments don't accept any addresses
137EOF
138returns_ 1 sed '1#foo' </dev/null 2>err-no-sharp || fail=1
139compare_ exp-no-sharp err-no-sharp || fail=1
140
141
142#
143# Unexpected closing braces (EXCESS_CLOSE_BRACE)
144#
145cat <<\EOF >exp-unexp-brace || framework_failure_
146sed: -e expression #1, char 2: unexpected `}'
147EOF
148returns_ 1 sed '1}' </dev/null 2>err-unexp-brace || fail=1
149compare_ exp-unexp-brace err-unexp-brace || fail=1
150
151
152#
153# Umatched opening braces (EXCESS_OPEN_BRACE)
154# TODO: why 'char 0' ?
155cat <<\EOF >exp-unmatched-braces || framework_failure_
156sed: -e expression #1, char 0: unmatched `{'
157EOF
158returns_ 1 sed '1{' </dev/null 2>err-unmatched-braces || fail=1
159compare_ exp-unmatched-braces err-unmatched-braces || fail=1
160
161
162#
163# '}' with address (NO_CLOSE_BRACE_ADDR)
164#
165cat <<\EOF >exp-brace-addr || framework_failure_
166sed: -e expression #1, char 3: `}' doesn't want any addresses
167EOF
168returns_ 1 sed '{1}' </dev/null 2>err-brace-addr || fail=1
169compare_ exp-brace-addr err-brace-addr || fail=1
170
171
172#
173# Too new version requested (ANCIENT_VERSION)
174# (i.e. this version of SED is too old)
175cat <<\EOF >exp-anc-ver || framework_failure_
176sed: -e expression #1, char 4: expected newer version of sed
177EOF
178returns_ 1 sed 'v9.0' </dev/null 2>err-anc-ver || fail=1
179compare_ exp-anc-ver err-anc-ver || fail=1
180
181
182#
183# Junk after command (EXCESS_JUNK)
184# notes: EOF, \n or ';' are allowed after a command.
185# multiple places abort with EXCESS_JUNK, check them all.
186# dummy addresses ensure the offending char is the same.
187cat <<\EOF >exp-junk || framework_failure_
188sed: -e expression #1, char 7: extra characters after command
189EOF
190returns_ 1 sed '11111=d' </dev/null 2>err-junk || fail=1
191compare_ exp-junk err-junk || fail=1
192returns_ 1 sed 'y/a/b/d' </dev/null 2>err-junk-y || fail=1
193compare_ exp-junk err-junk-y || fail=1
194returns_ 1 sed '1111{}d' </dev/null 2>err-junk-braces || fail=1
195compare_ exp-junk err-junk-braces || fail=1
196returns_ 1 sed '22222ld' </dev/null 2>err-junk-braces || fail=1
197compare_ exp-junk err-junk-braces || fail=1
198
199
200#
201# Slash after a/c/i (EXPECTED_SLASH)
202# note: GNU extensions are less strict than --posix.
203cat <<\EOF >exp-junk || framework_failure_
204sed: -e expression #1, char 2: expected \ after `a', `c' or `i'
205EOF
206for opt in a c i ;
207do
208 # EOF after command
209 returns_ 1 sed "1$opt" </dev/null 2>err-junk-$opt || fail=1
210 compare_ exp-junk err-junk-$opt || fail=1
211
212 # no slash after command, in GNU extension mode - accepted.
213 sed "1${opt}foo" </dev/null >/dev/null || fail=1
214
215 # no slash after command, in --posix mode - rejected.
216 returns_ 1 sed --posix "${opt}foo" </dev/null 2>err-junk-$opt-psx || fail=1
217 compare_ exp-junk err-junk-$opt-psx || fail=1
218done
219
220
221#
222# ':' with address (NO_COLON_ADDR)
223#
224cat <<\EOF >exp-colon-addr || framework_failure_
225sed: -e expression #1, char 2: : doesn't want any addresses
226EOF
227returns_ 1 sed '2:' </dev/null 2>err-colon-addr || fail=1
228compare_ exp-colon-addr err-colon-addr || fail=1
229
230
231
232#
233# q/Q need one address (ONE_ADDR)
234#
235cat <<\EOF >exp-colon-addr || framework_failure_
236sed: -e expression #1, char 2: : doesn't want any addresses
237EOF
238returns_ 1 sed '2:' </dev/null 2>err-colon-addr || fail=1
239compare_ exp-colon-addr err-colon-addr || fail=1
240
241
242#
243# unterminated Y commands (UNTERM_Y_CMD)
244# NOTE: the code calls bad_proc(UNTERM_Y_CMD)
245# in multiple places due to varied conditions - check them all.
246# dummy addresses ensures the offending character is always 5.
247cat <<\EOF >exp-unterm-y || framework_failure_
248sed: -e expression #1, char 5: unterminated `y' command
249EOF
250returns_ 1 sed '1111y' </dev/null 2>err-unterm-y1 || fail=1
251compare_ exp-unterm-y err-unterm-y1 || fail=1
252returns_ 1 sed '111y/' </dev/null 2>err-unterm-y2 || fail=1
253compare_ exp-unterm-y err-unterm-y2 || fail=1
254returns_ 1 sed '11y/a' </dev/null 2>err-unterm-y3 || fail=1
255compare_ exp-unterm-y err-unterm-y3 || fail=1
256returns_ 1 sed '1y/a/' </dev/null 2>err-unterm-y4 || fail=1
257compare_ exp-unterm-y err-unterm-y4 || fail=1
258returns_ 1 sed 'y/a/a' </dev/null 2>err-unterm-y5 || fail=1
259compare_ exp-unterm-y err-unterm-y5 || fail=1
260
261#
262# Y command with bad legth (Y_CMD_LEN)
263# TODO: check with multibyte strings.
264cat <<\EOF >exp-bad-y-len || framework_failure_
265sed: -e expression #1, char 7: strings for `y' command are different lengths
266EOF
267returns_ 1 sed 'y/a/bb/' </dev/null 2>err-bad-y-len || fail=1
268compare_ exp-bad-y-len err-bad-y-len || fail=1
269
270
271#
272# GNU Extension: allow a/c/i to continue in next 'program'.
273# in --posix mode, reject it with "incomplete command" (INCOMPLETE_CMD)
274#
275cat <<\EOF >exp-inc-cmd || framework_failure_
276sed: -e expression #1, char 2: incomplete command
277EOF
278for opt in a c i ;
279do
280 # works as a gnu extension
281 sed -e "$opt\\" -e foo < /dev/null || fail=1
282
283 # rejected in posix mode
284 returns_ 1 sed --posix -e "$opt\\" -e foo </dev/null 2>err-inc-cmd-$opt \
285 || fail=1
286 compare_ exp-inc-cmd err-inc-cmd-$opt || fail=1
287done
288
289
290Exit $fail
Note: See TracBrowser for help on using the repository browser.