blob: 91fac3b871d99a26f5f5db5ba4addd468c4ee563 [file] [log] [blame]
# A test suite for the POSIX.2 (BRE) pattern matching code
LC_ALL=C
LANG=C
# First, test POSIX.2 character classes
case e in
[[:xdigit:]]) echo ok 1;;
esac
case a in
[[:alpha:]123]) echo ok 2;;
esac
case 1 in
[[:alpha:]123]) echo ok 3;;
esac
case 9 in
[![:alpha:]]) echo ok 4;;
esac
# invalid character class expressions are just characters to be matched
case a in
[:al:]) echo ok 5;;
esac
case a in
[[:al:]) echo ok 6;;
esac
case '!' in
[abc[:punct:][0-9]) echo ok 7;;
esac
# let's try to match the start of a valid sh identifier
case 'PATH' in
[_[:alpha:]]*) echo ok 8;;
esac
# let's try to match the first two characters of a valid sh identifier
case PATH in
[_[:alpha:]][_[:alnum:]]*) echo ok 9;;
esac
# is ^C a cntrl character?
case $'\003' in
[[:cntrl:]]) echo ok 10;;
esac
# how about A?
case A in
[[:cntrl:]]) echo oops -- cntrl ;;
*) echo ok 11;;
esac
case 9 in
[[:digit:]]) echo ok 12;;
esac
case X in
[[:digit:]]) echo oops -- digit;;
*) echo ok 13;;
esac
case $'\033' in
[[:graph:]]) echo oops -- graph;;
*) echo ok 14;;
esac
case $'\040' in
[[:graph:]]) echo oops -- graph 2;;
*) echo ok 15;;
esac
case ' ' in
[[:graph:]]) echo oops -- graph 3;;
*) echo ok 16;;
esac
case 'aB' in
[[:lower:]][[:upper:]]) echo ok 17;;
esac
case $'\040' in
[[:print:]]) echo ok 18;;
*) echo oops -- print;;
esac
case PS3 in
[_[:alpha:]][_[:alnum:]][_[:alnum:]]*) echo ok 19;;
esac
case a in
[[:alpha:][:digit:]]) echo ok 20;;
*) echo oops - skip brackpat ;;
esac
case a in
[[:alpha:]\]) echo oops -- dangling backslash in brackpat ;;
*) echo ok 21 ;;
esac
# what's a newline? is it a blank? a space?
case $'\n' in
[[:blank:]]) echo ok -- blank ;;
[[:space:]]) echo ok -- space ;;
*) echo oops newline ;;
esac
# OK, what's a tab? is it a blank? a space?
case $'\t' in
[[:blank:]]) echo ok -- blank ;;
[[:space:]]) echo ok -- space ;;
*) echo oops newline ;;
esac
# let's check out characters in the ASCII range
case $'\377' in
[[:ascii:]]) echo oops -- ascii\?;;
esac
case 9 in
[1[:alpha:]123]) echo oops 1;;
esac
# however, an unterminated brace expression containing a valid char class
# that matches had better fail
case a in
[[:alpha:]) echo oops 2;;
esac
case $'\b' in
[[:graph:]]) echo oops 3;;
esac
case $'\b' in
[[:print:]]) echo oops 4;;
esac
case $' ' in
[[:punct:]]) echo oops 5;;
esac
# Next, test POSIX.2 collating symbols
case 'a' in
[[.a.]]) echo ok 1;;
esac
case '-' in
[[.hyphen.]-9]) echo ok 2;;
esac
case 'p' in
[[.a.]-[.z.]]) echo ok 3;;
esac
case '-' in
[[.-.]]) echo ok 4;;
esac
case ' ' in
[[.space.]]) echo ok 5;;
esac
case ' ' in
[[.grave-accent.]]) echo oops - grave;;
*) echo ok 6;;
esac
case '4' in
[[.-.]-9]) echo ok 7;;
esac
# an invalid collating symbol cannot be the first part of a range
case 'c' in
[[.yyz.]-[.z.]]) echo oops - yyz;;
*) echo ok 8;;
esac
case 'c' in
[[.yyz.][.a.]-z]) echo ok 9;;
esac
# but when not part of a range is not an error
case 'c' in
[[.yyz.][.a.]-[.z.]]) echo ok 10 ;;
esac
case 'p' in
[[.a.]-[.Z.]]) echo oops -- bad range ;;
*) echo ok 11;;
esac
case p in
[[.a.]-[.zz.]p]) echo ok 12;;
*) echo oops -- bad range 2;;
esac
case p in
[[.aa.]-[.z.]p]) echo ok 13;;
*) echo oops -- bad range 3;;
esac
case c in
[[.yyz.]cde]) echo ok 14;;
esac
case abc in
[[.cb.]a-Za]*) echo ok 15;;
esac
case $'\t' in
[[.space.][.tab.][.newline.]]) echo ok 16;;
esac
# and finally, test POSIX.2 equivalence classes
case "abc" in
[[:alpha:]][[=b=]][[:ascii:]]) echo ok 1;;
esac
case "abc" in
[[:alpha:]][[=B=]][[:ascii:]]) echo oops -- =B=;;
*) echo ok 2 ;;
esac
case a in
[[=b=]) echo oops;; # an incomplete equiv class is just a string
*) echo ok 3;;
esac