1 | #!/bin/sh
|
---|
2 | # Test compilation less-common cases
|
---|
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
|
---|
19 | print_ver_ sed
|
---|
20 |
|
---|
21 | #
|
---|
22 | # Special file names, with gnu extensions and without (if the host
|
---|
23 | # supports /dev/std{out,err} )
|
---|
24 | #
|
---|
25 | echo a > a || framework_failure_
|
---|
26 |
|
---|
27 | # With gnu extension enabled, /dev/stderr is emulated internally
|
---|
28 | # regardless of the operating system.
|
---|
29 | sed 'w/dev/stderr' a >out 2>err|| fail=1
|
---|
30 | compare_ a out || fail=1
|
---|
31 | compare_ a err || fail=1
|
---|
32 |
|
---|
33 | # In posix mode /dev/std* are not emulated internally. Skip if they
|
---|
34 | # don't exist. 'env' is used to avoid built-in 'test' which
|
---|
35 | # simulates /dev/stderr, e.g. bash on AIX.
|
---|
36 | if env test -w /dev/stderr ; then
|
---|
37 | sed --posix 'w/dev/stderr' a >out-psx 2>err-psx || fail=1
|
---|
38 | compare_ a out-psx || fail=1
|
---|
39 | compare_ a err-psx || fail=1
|
---|
40 | fi
|
---|
41 |
|
---|
42 |
|
---|
43 | #
|
---|
44 | # labels followed by various characters
|
---|
45 | # (read_label)
|
---|
46 | echo a > lbl-in-exp || framework_failure_
|
---|
47 | cat << \EOF > lbl-prog || framework_failure_
|
---|
48 | bZ
|
---|
49 | :Z
|
---|
50 | bY;
|
---|
51 | :Y
|
---|
52 | {bX}
|
---|
53 | :X ;
|
---|
54 | b W
|
---|
55 | : W
|
---|
56 | EOF
|
---|
57 | sed -f lbl-prog lbl-in-exp > lbl-out || fail=1
|
---|
58 | compare_ lbl-in-exp lbl-out
|
---|
59 |
|
---|
60 |
|
---|
61 |
|
---|
62 | #
|
---|
63 | # character classes (compile.c:snarf_char_class)
|
---|
64 | #
|
---|
65 |
|
---|
66 | # open brackets followed by EOF
|
---|
67 | cat <<\EOF >exp-err-op-bracket || framework_failure_
|
---|
68 | sed: -e expression #1, char 2: unterminated address regex
|
---|
69 | EOF
|
---|
70 | returns_ 1 sed '/[' </dev/null 2>err-op-bracket1 || fail=1
|
---|
71 | compare_ exp-err-op-bracket err-op-bracket1 || fail=1
|
---|
72 |
|
---|
73 |
|
---|
74 | # open brackets followed by \n
|
---|
75 | printf "/[\n" > op-bracket-prog || framework_failure_
|
---|
76 | cat <<\EOF >exp-err-op-bracket || framework_failure_
|
---|
77 | sed: file op-bracket-prog line 1: unterminated address regex
|
---|
78 | EOF
|
---|
79 | returns_ 1 sed -f op-bracket-prog </dev/null 2>err-op-bracket2 || fail=1
|
---|
80 | compare_ exp-err-op-bracket err-op-bracket2 || fail=1
|
---|
81 |
|
---|
82 |
|
---|
83 | # unterminated character class '[.'
|
---|
84 | # (snarf_char_class terminates on char 7, then returns)
|
---|
85 | cat <<\EOF >exp-chr-class || framework_failure_
|
---|
86 | sed: -e expression #1, char 7: unterminated `s' command
|
---|
87 | EOF
|
---|
88 | returns_ 1 sed 's/[[.//' </dev/null 2>err-chr-class || fail=1
|
---|
89 | compare_ exp-chr-class err-chr-class || fail=1
|
---|
90 |
|
---|
91 |
|
---|
92 | # closing bracket immediately after char-class opening
|
---|
93 | # sequence (e.g. '[:]' instead of '[:alpha:]' ).
|
---|
94 | cat<< \EOF >exp-chr-class2 || framework_failure_
|
---|
95 | sed: -e expression #1, char 9: unterminated `s' command
|
---|
96 | EOF
|
---|
97 | returns_ 1 sed 's/[[:]]//' </dev/null 2>err-chr-class2 || fail=1
|
---|
98 | compare_ exp-chr-class2 err-chr-class2 || fail=1
|
---|
99 |
|
---|
100 |
|
---|
101 | # EOF after backslash in a regex (compile.c:match_slash())
|
---|
102 | cat<< \EOF >exp-backslash-eof || framework_failure_
|
---|
103 | sed: -e expression #1, char 2: unterminated address regex
|
---|
104 | EOF
|
---|
105 | returns_ 1 sed '/\' </dev/null 2>err-backslash-eof || fail=1
|
---|
106 | compare_ exp-backslash-eof err-backslash-eof || fail=1
|
---|
107 |
|
---|
108 |
|
---|
109 | # Valid version requirement
|
---|
110 | sed 'v4' < /dev/null || fail=1
|
---|
111 |
|
---|
112 | # Closing braces followed by another closing braces, and '#'
|
---|
113 | echo X > in-exp || framework_failure_
|
---|
114 | sed -n '{{p}}' in-exp > out-braces-1 || fail=1
|
---|
115 | compare_ in-exp out-braces-1 || fail=1
|
---|
116 |
|
---|
117 | sed -n '{p}#foo' in-exp > out-braces-2 || fail=1
|
---|
118 | compare_ in-exp out-braces-2 || fail=1
|
---|
119 |
|
---|
120 | # 'l' followed by closing braces, and '#'
|
---|
121 | printf 'X$\n' > exp-l || framework_failure_
|
---|
122 | sed -n '{l}' in-exp > out-l-braces || fail=1
|
---|
123 | compare_ exp-l out-l-braces || fail=1
|
---|
124 | sed -n 'l#foo' in-exp > out-l-hash || fail=1
|
---|
125 | compare_ exp-l out-l-hash || fail=1
|
---|
126 |
|
---|
127 |
|
---|
128 | #
|
---|
129 | # unterminated a/c/i as last command
|
---|
130 | # (pending_text)
|
---|
131 | sed -e 'a\' in-exp > out-unterm-a1 || fail=1
|
---|
132 | compare_ in-exp out-unterm-a1 || fail=1
|
---|
133 |
|
---|
134 |
|
---|
135 | Exit $fail
|
---|