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