Imported from ../bash-3.1.tar.gz.
[platform/upstream/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