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