4747eb5cb263f7a98de5aa4e1c866330fca3e27e
[platform/upstream/bash.git] / tests / extglob.tests
1 # test the ksh-like extended globbing features: [!@*?+](patlist)
2
3 shopt -s extglob
4
5 expect()
6 {
7         echo expect "$@"
8 }
9
10 case "/dev/udp/129.22.8.102/45" in
11 /dev/@(tcp|udp)/*/*)    echo ok 1;;
12 *)              echo bad 1;;
13 esac
14
15 # valid numbers
16 case 12 in
17 0|[1-9]*([0-9]))        echo ok 2;;
18 *)                      echo bad 2;;
19 esac
20
21 case 12abc in
22 0|[1-9]*([0-9]))        echo bad 3;;
23 *)                      echo ok 3;;
24 esac
25
26 case 1 in
27 0|[1-9]*([0-9]))        echo ok 4;;
28 *)                      echo bad 4;;
29 esac
30
31 # octal numbers
32 case 07 in
33 +([0-7]))               echo ok 5;;
34 *)                      echo bad 5;;
35 esac
36
37 case 0377 in
38 +([0-7]))               echo ok 6;;
39 *)                      echo bad 6;;
40 esac
41
42 case 09 in
43 +([0-7]))               echo bad 7;;
44 *)                      echo ok 7;;
45 esac
46
47 # stuff from korn's book
48 case paragraph in
49 para@(chute|graph))     echo ok 8;;
50 *)                      echo bad 8;;
51 esac
52
53 case paramour in
54 para@(chute|graph))     echo bad 9;;
55 *)                      echo ok 9;;
56 esac
57
58 case para991 in
59 para?([345]|99)1)       echo ok 10;;
60 *)                      echo bad 10;;
61 esac
62
63 case para381 in
64 para?([345]|99)1)       echo bad 11;;
65 *)                      echo ok 11;;
66 esac
67
68 case paragraph in
69 para*([0-9]))           echo bad 12;;
70 *)                      echo ok 12;;
71 esac
72
73 case para in
74 para*([0-9]))           echo ok 13;;
75 *)                      echo bad 13;;
76 esac
77
78 case para13829383746592 in
79 para*([0-9]))           echo ok 14;;
80 *)                      echo bad 14;;
81 esac
82
83 case paragraph in
84 para*([0-9]))           echo bad 15;;
85 *)                      echo ok 15;;
86 esac
87
88 case para in
89 para+([0-9]))           echo bad 16;;
90 *)                      echo ok 16;;
91 esac
92
93 case para987346523 in
94 para+([0-9]))           echo ok 17;;
95 *)                      echo bad 17;;
96 esac
97
98 case paragraph in
99 para!(*.[0-9]))         echo ok 18;;
100 *)                      echo bad 18;;
101 esac
102
103 case para.38 in
104 para!(*.[0-9]))         echo ok 19;;
105 *)                      echo bad 19;;
106 esac
107
108 case para.graph in
109 para!(*.[0-9]))         echo ok 20;;
110 *)                      echo bad 20;;
111 esac
112
113 case para39 in
114 para!(*.[0-9]))         echo ok 21;;
115 *)                      echo bad 21;;
116 esac
117
118 # tests derived from those in rosenblatt's korn shell book
119
120 case "" in
121 *(0|1|3|5|7|9))         echo ok 22;;
122 *)                      echo bad 22;
123 esac
124
125 case 137577991 in
126 *(0|1|3|5|7|9))         echo ok 23;;
127 *)                      echo bad 23;
128 esac
129
130 case 2468 in
131 *(0|1|3|5|7|9))         echo bad 24;;
132 *)                      echo ok 24;
133 esac
134
135 case file.c in
136 *.c?(c))                echo ok 25;;
137 *)                      echo bad 25;;
138 esac
139
140 case file.C in
141 *.c?(c))                echo bad 26;;
142 *)                      echo ok 26;;
143 esac
144
145 case file.cc in
146 *.c?(c))                echo ok 27;;
147 *)                      echo bad 27;;
148 esac
149
150 case file.ccc in
151 *.c?(c))                echo bad 28;;
152 *)                      echo ok 28;;
153 esac
154
155 case parse.y in
156 !(*.c|*.h|Makefile.in|config*|README))  echo ok 29;;
157 *)                      echo bad 29;;
158 esac
159
160 case shell.c in
161 !(*.c|*.h|Makefile.in|config*|README))  echo bad 30;;
162 *)                      echo ok 30;;
163 esac
164
165 case Makefile in
166 !(*.c|*.h|Makefile.in|config*|README))  echo ok 31;;
167 *)                      echo bad 31;;
168 esac
169
170 case "VMS.FILE;1" in
171 *\;[1-9]*([0-9]))       echo ok 32;;
172 *)                      echo bad 32;;
173 esac
174
175 case "VMS.FILE;0" in
176 *\;[1-9]*([0-9]))       echo bad 33;;
177 *)                      echo ok 33;;
178 esac
179 case "VMS.FILE;" in
180 *\;[1-9]*([0-9]))       echo bad 34;;
181 *)                      echo ok 34;;
182 esac
183 case "VMS.FILE;139" in
184 *\;[1-9]*([0-9]))       echo ok 35;;
185 *)                      echo bad 35;;
186 esac
187 case "VMS.FILE;1N" in
188 *\;[1-9]*([0-9]))       echo bad 36;;
189 *)                      echo ok 36;;
190 esac
191
192 # tests derived from the pd-ksh test suite
193
194 MYDIR=$PWD      # save where we are
195
196 TESTDIR=/tmp/eglob-test
197 mkdir $TESTDIR
198 builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; }
199 rm -rf *
200
201 touch abcx abcz bbc
202 expect '!([*)*'
203 echo !([*)*
204
205 expect '+(a|b[)*'
206 echo +(a|b[)*
207
208 expect '[a*(]*z'
209 echo [a*(]*)z
210
211 rm -f abcx abcz bbc
212
213 touch abc
214
215 expect '+()c'
216 echo +()c
217 expect '+()x'
218 echo +()x
219 expect abc
220 echo +(*)c
221 expect '+(*)x'
222 echo +(*)x
223
224 # extended globbing should not be performed on the output of substitutions
225 x='@(*)'
226 expect '@(*)'
227 echo $x
228
229 expect 'no-file+(a|b)stuff'
230 echo no-file+(a|b)stuff
231 expect 'no-file+(a*(c)|b)stuff'
232 echo no-file+(a*(c)|b)stuff
233
234 touch abd acd
235
236 expect 'abd acd'
237 echo a+(b|c)d
238
239 expect 'acd'
240 echo a!(@(b|B))d
241
242 expect 'abd'
243 echo a[b*(foo|bar)]d
244
245 # simple kleene star tests
246 expect no
247 case foo in *(a|b[)) echo yes;; *) echo no;; esac
248
249 expect yes
250 case foo in *(a|b[)|f*) echo yes;; *) echo no;; esac
251
252 # this doesn't work right yet; it is an incorrectly formed pattern
253 expect yes
254 case '*(a|b[)' in *(a|b[)) echo yes;; *) echo no;; esac
255
256 # check extended globbing in pattern removal -- these don't work right yet
257 x=abcdef
258
259 expect '1: bcdef'
260 echo 1: ${x#+(a|abc)}
261 expect '2: def'
262 echo 2: ${x##+(a|abc)}
263 expect '3: abcde'
264 echo 3: ${x%+(def|f)}
265 expect '4: abc'
266 echo 4: ${x%%+(f|def)}
267
268 # these work ok
269
270 expect '5: ef'
271 echo 5: ${x#*(a|b)cd}
272 expect '6: ef'
273 echo 6: "${x#*(a|b)cd}"
274 expect '7: abcdef'
275 echo 7: ${x#"*(a|b)cd"}
276
277 # clean up and exit
278
279 builtin cd /
280 rm -rf $TESTDIR
281
282 # this is for the benefit of pure coverage, so it writes the pcv file
283 # in the right place
284 builtin cd $MYDIR
285
286 exit 0