]>
Commit | Line | Data |
---|---|---|
cce855bc JA |
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 |