]> git.ipfire.org Git - thirdparty/bash.git/blame - tests/posixpat.tests
Bash-4.3 patch 7
[thirdparty/bash.git] / tests / posixpat.tests
CommitLineData
cce855bc
JA
1# A test suite for the POSIX.2 (BRE) pattern matching code
2LC_ALL=C
3LANG=C
4
5# First, test POSIX.2 character classes
6
7case e in
8[[:xdigit:]]) echo ok 1;;
9esac
10
11case a in
12[[:alpha:]123]) echo ok 2;;
13esac
14
15case 1 in
16[[:alpha:]123]) echo ok 3;;
17esac
18
19case 9 in
20[![:alpha:]]) echo ok 4;;
21esac
22
23# invalid character class expressions are just characters to be matched
24case a in
25[:al:]) echo ok 5;;
26esac
27
28case a in
29[[:al:]) echo ok 6;;
30esac
31
32case '!' in
33[abc[:punct:][0-9]) echo ok 7;;
34esac
35
36# let's try to match the start of a valid sh identifier
37case 'PATH' in
38[_[:alpha:]]*) echo ok 8;;
39esac
40
41# let's try to match the first two characters of a valid sh identifier
42case PATH in
43[_[:alpha:]][_[:alnum:]]*) echo ok 9;;
44esac
45
46# is ^C a cntrl character?
47case $'\003' in
48[[:cntrl:]]) echo ok 10;;
49esac
50
51# how about A?
52case A in
53[[:cntrl:]]) echo oops -- cntrl ;;
54*) echo ok 11;;
55esac
56
57case 9 in
58[[:digit:]]) echo ok 12;;
59esac
60
61case X in
62[[:digit:]]) echo oops -- digit;;
63*) echo ok 13;;
64esac
65
66case $'\033' in
67[[:graph:]]) echo oops -- graph;;
68*) echo ok 14;;
69esac
70
71case $'\040' in
72[[:graph:]]) echo oops -- graph 2;;
73*) echo ok 15;;
74esac
75
76case ' ' in
77[[:graph:]]) echo oops -- graph 3;;
78*) echo ok 16;;
79esac
80
81case 'aB' in
82[[:lower:]][[:upper:]]) echo ok 17;;
83esac
84
85case $'\040' in
86[[:print:]]) echo ok 18;;
87*) echo oops -- print;;
88esac
89
90case PS3 in
91[_[:alpha:]][_[:alnum:]][_[:alnum:]]*) echo ok 19;;
92esac
93
94case a in
95[[:alpha:][:digit:]]) echo ok 20;;
96*) echo oops - skip brackpat ;;
97esac
98
99case a in
100[[:alpha:]\]) echo oops -- dangling backslash in brackpat ;;
101*) echo ok 21 ;;
102esac
103
104# what's a newline? is it a blank? a space?
105case $'\n' in
106[[:blank:]]) echo ok -- blank ;;
107[[:space:]]) echo ok -- space ;;
108*) echo oops newline ;;
109esac
110
111# OK, what's a tab? is it a blank? a space?
112case $'\t' in
113[[:blank:]]) echo ok -- blank ;;
114[[:space:]]) echo ok -- space ;;
115*) echo oops newline ;;
116esac
117
118# let's check out characters in the ASCII range
119case $'\377' in
120[[:ascii:]]) echo oops -- ascii\?;;
121esac
122
123case 9 in
124[1[:alpha:]123]) echo oops 1;;
125esac
126
127# however, an unterminated brace expression containing a valid char class
128# that matches had better fail
129case a in
130[[:alpha:]) echo oops 2;;
131esac
132
133case $'\b' in
134[[:graph:]]) echo oops 3;;
135esac
136
137case $'\b' in
138[[:print:]]) echo oops 4;;
139esac
140
141case $' ' in
142[[:punct:]]) echo oops 5;;
143esac
144
145# Next, test POSIX.2 collating symbols
146
147case 'a' in
148[[.a.]]) echo ok 1;;
149esac
150
151case '-' in
152[[.hyphen.]-9]) echo ok 2;;
153esac
154
155case 'p' in
156[[.a.]-[.z.]]) echo ok 3;;
157esac
158
159case '-' in
160[[.-.]]) echo ok 4;;
161esac
162
163case ' ' in
164[[.space.]]) echo ok 5;;
165esac
166
167case ' ' in
168[[.grave-accent.]]) echo oops - grave;;
169*) echo ok 6;;
170esac
171
172case '4' in
173[[.-.]-9]) echo ok 7;;
174esac
175
176# an invalid collating symbol cannot be the first part of a range
177case 'c' in
178[[.yyz.]-[.z.]]) echo oops - yyz;;
179*) echo ok 8;;
180esac
181
182case 'c' in
183[[.yyz.][.a.]-z]) echo ok 9;;
184esac
185
186# but when not part of a range is not an error
187case 'c' in
188[[.yyz.][.a.]-[.z.]]) echo ok 10 ;;
189esac
190
191case 'p' in
192[[.a.]-[.Z.]]) echo oops -- bad range ;;
193*) echo ok 11;;
194esac
195
196case p in
197[[.a.]-[.zz.]p]) echo ok 12;;
198*) echo oops -- bad range 2;;
199esac
200
201case p in
202[[.aa.]-[.z.]p]) echo ok 13;;
203*) echo oops -- bad range 3;;
204esac
205
206case c in
207[[.yyz.]cde]) echo ok 14;;
208esac
209
210case abc in
211[[.cb.]a-Za]*) echo ok 15;;
212esac
213
214case $'\t' in
215[[.space.][.tab.][.newline.]]) echo ok 16;;
216esac
217
218# and finally, test POSIX.2 equivalence classes
219
220case "abc" in
221[[:alpha:]][[=b=]][[:ascii:]]) echo ok 1;;
222esac
223
224case "abc" in
225[[:alpha:]][[=B=]][[:ascii:]]) echo oops -- =B=;;
226*) echo ok 2 ;;
227esac
228
229case a in
230[[=b=]) echo oops;; # an incomplete equiv class is just a string
231*) echo ok 3;;
232esac
233