eb26d5501f4f0840cc6e6fc612d53427aa11eb21
[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 # More tests derived from a bug report concerning extended glob patterns
278 # following a *
279 builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; }
280 rm -rf *
281
282 touch ab abcdef abef abcfef
283
284 expect 'ab abef'
285 echo ab*(e|f)
286
287 expect 'abcfef abef'
288 echo ab?*(e|f)
289
290 expect abcdef
291 echo ab*d+(e|f)
292
293 expect 'ab abcdef abcfef abef'
294 echo ab**(e|f)
295
296 expect 'abcdef abcfef abef'
297 echo ab*+(e|f)
298
299 case 'abcfefg' in
300 ab**(e|f))      echo ok 37;;
301 *)              echo bad 37;;
302 esac
303
304 case 'abcfefg' in
305 ab**(e|f)g)     echo ok 38;;
306 *a)             echo bad 38;;
307 esac
308
309 case ab in
310 ab*+(e|f))      echo bad 39;;
311 *)              echo ok 39;;
312 esac
313
314 case abef in
315 ab***ef)        echo ok 40;;
316 *)              echo bad 40;;
317 esac
318
319 case abef in
320 ab**)           echo ok 41;;
321 *)              echo bad 41;;
322 esac
323
324 # bug in all versions up to and including bash-2.05b
325 case "123abc" in
326 *?(a)bc)        echo ok 42;;
327 *)              echo bad 42;;
328 esac
329
330 # clean up and do the next one
331
332 builtin cd /
333 rm -rf $TESTDIR
334
335 mkdir $TESTDIR
336 builtin cd $TESTDIR
337
338 LC_COLLATE=C # have to set this; it affects the sorting 
339 touch a.b a,b a:b a-b a\;b a\ b a_b
340
341 echo a[^[:alnum:]]b
342 echo a[-.,:\;\ _]b
343
344 echo a@([^[:alnum:]])b
345 echo a@([-.,:; _])b
346 echo a@([.])b
347 echo a@([^.])b
348 echo a@([^x])b
349 echo a+([^[:alnum:]])b
350
351 echo a@(.|[^[:alnum:]])b
352
353 builtin cd /
354 rm -rf $TESTDIR
355
356 x=abcdef
357 recho "${x#*(a|b)cd}"
358
359 TEST='a , b'
360 shopt -s globstar
361 echo ${TEST//*([[:space:]]),*([[:space:]])/,}
362 shopt -u globstar
363
364 # this is for the benefit of pure coverage, so it writes the pcv file
365 # in the right place
366 builtin cd "$MYDIR"
367
368 ${THIS_SH} ./extglob1.sub
369
370 exit 0