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