1 # A test suite for the POSIX.2 (BRE) pattern matching code
5 # First, test POSIX.2 character classes
8 [[:xdigit:]]) echo ok 1;;
12 [[:alpha:]123]) echo ok 2;;
16 [[:alpha:]123]) echo ok 3;;
20 [![:alpha:]]) echo ok 4;;
23 # invalid character class expressions are just characters to be matched
33 [abc[:punct:][0-9]) echo ok 7;;
36 # let's try to match the start of a valid sh identifier
38 [_[:alpha:]]*) echo ok 8;;
41 # let's try to match the first two characters of a valid sh identifier
43 [_[:alpha:]][_[:alnum:]]*) echo ok 9;;
46 # is ^C a cntrl character?
48 [[:cntrl:]]) echo ok 10;;
53 [[:cntrl:]]) echo oops -- cntrl ;;
58 [[:digit:]]) echo ok 12;;
62 [[:digit:]]) echo oops -- digit;;
67 [[:graph:]]) echo oops -- graph;;
72 [[:graph:]]) echo oops -- graph 2;;
77 [[:graph:]]) echo oops -- graph 3;;
82 [[:lower:]][[:upper:]]) echo ok 17;;
86 [[:print:]]) echo ok 18;;
87 *) echo oops -- print;;
91 [_[:alpha:]][_[:alnum:]][_[:alnum:]]*) echo ok 19;;
95 [[:alpha:][:digit:]]) echo ok 20;;
96 *) echo oops - skip brackpat ;;
100 [[:alpha:]\]) echo oops -- dangling backslash in brackpat ;;
104 # what's a newline? is it a blank? a space?
106 [[:blank:]]) echo ok -- blank ;;
107 [[:space:]]) echo ok -- space ;;
108 *) echo oops newline ;;
111 # OK, what's a tab? is it a blank? a space?
113 [[:blank:]]) echo ok -- blank ;;
114 [[:space:]]) echo ok -- space ;;
115 *) echo oops newline ;;
118 # let's check out characters in the ASCII range
120 [[:ascii:]]) echo oops -- ascii\?;;
124 [1[:alpha:]123]) echo oops 1;;
127 # however, an unterminated brace expression containing a valid char class
128 # that matches had better fail
130 [[:alpha:]) echo oops 2;;
134 [[:graph:]]) echo oops 3;;
138 [[:print:]]) echo oops 4;;
142 [[:punct:]]) echo oops 5;;
145 # Next, test POSIX.2 collating symbols
152 [[.hyphen.]-9]) echo ok 2;;
156 [[.a.]-[.z.]]) echo ok 3;;
164 [[.space.]]) echo ok 5;;
168 [[.grave-accent.]]) echo oops - grave;;
173 [[.-.]-9]) echo ok 7;;
176 # an invalid collating symbol cannot be the first part of a range
178 [[.yyz.]-[.z.]]) echo oops - yyz;;
183 [[.yyz.][.a.]-z]) echo ok 9;;
186 # but when not part of a range is not an error
188 [[.yyz.][.a.]-[.z.]]) echo ok 10 ;;
192 [[.a.]-[.Z.]]) echo oops -- bad range ;;
197 [[.a.]-[.zz.]p]) echo ok 12;;
198 *) echo oops -- bad range 2;;
202 [[.aa.]-[.z.]p]) echo ok 13;;
203 *) echo oops -- bad range 3;;
207 [[.yyz.]cde]) echo ok 14;;
211 [[.cb.]a-Za]*) echo ok 15;;
215 [[.space.][.tab.][.newline.]]) echo ok 16;;
218 # and finally, test POSIX.2 equivalence classes
221 [[:alpha:]][[=b=]][[:ascii:]]) echo ok 1;;
225 [[:alpha:]][[=B=]][[:ascii:]]) echo oops -- =B=;;
230 [[=b=]) echo oops;; # an incomplete equiv class is just a string