posixpat.tests 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. # A test suite for the POSIX.2 (BRE) pattern matching code
  2. LC_ALL=C
  3. LANG=C
  4. # First, test POSIX.2 character classes
  5. case e in
  6. [[:xdigit:]]) echo ok 1;;
  7. esac
  8. case a in
  9. [[:alpha:]123]) echo ok 2;;
  10. esac
  11. case 1 in
  12. [[:alpha:]123]) echo ok 3;;
  13. esac
  14. case 9 in
  15. [![:alpha:]]) echo ok 4;;
  16. esac
  17. # invalid character class expressions are just characters to be matched
  18. case a in
  19. [:al:]) echo ok 5;;
  20. esac
  21. case a in
  22. [[:al:]) echo ok 6;;
  23. esac
  24. case '!' in
  25. [abc[:punct:][0-9]) echo ok 7;;
  26. esac
  27. # let's try to match the start of a valid sh identifier
  28. case 'PATH' in
  29. [_[:alpha:]]*) echo ok 8;;
  30. esac
  31. # let's try to match the first two characters of a valid sh identifier
  32. case PATH in
  33. [_[:alpha:]][_[:alnum:]]*) echo ok 9;;
  34. esac
  35. # is ^C a cntrl character?
  36. case $'\003' in
  37. [[:cntrl:]]) echo ok 10;;
  38. esac
  39. # how about A?
  40. case A in
  41. [[:cntrl:]]) echo oops -- cntrl ;;
  42. *) echo ok 11;;
  43. esac
  44. case 9 in
  45. [[:digit:]]) echo ok 12;;
  46. esac
  47. case X in
  48. [[:digit:]]) echo oops -- digit;;
  49. *) echo ok 13;;
  50. esac
  51. case $'\033' in
  52. [[:graph:]]) echo oops -- graph;;
  53. *) echo ok 14;;
  54. esac
  55. case $'\040' in
  56. [[:graph:]]) echo oops -- graph 2;;
  57. *) echo ok 15;;
  58. esac
  59. case ' ' in
  60. [[:graph:]]) echo oops -- graph 3;;
  61. *) echo ok 16;;
  62. esac
  63. case 'aB' in
  64. [[:lower:]][[:upper:]]) echo ok 17;;
  65. esac
  66. case $'\040' in
  67. [[:print:]]) echo ok 18;;
  68. *) echo oops -- print;;
  69. esac
  70. case PS3 in
  71. [_[:alpha:]][_[:alnum:]][_[:alnum:]]*) echo ok 19;;
  72. esac
  73. case a in
  74. [[:alpha:][:digit:]]) echo ok 20;;
  75. *) echo oops - skip brackpat ;;
  76. esac
  77. case a in
  78. [[:alpha:]\]) echo oops -- dangling backslash in brackpat ;;
  79. *) echo ok 21 ;;
  80. esac
  81. # what's a newline? is it a blank? a space?
  82. case $'\n' in
  83. [[:blank:]]) echo ok -- blank ;;
  84. [[:space:]]) echo ok -- space ;;
  85. *) echo oops newline ;;
  86. esac
  87. # OK, what's a tab? is it a blank? a space?
  88. case $'\t' in
  89. [[:blank:]]) echo ok -- blank ;;
  90. [[:space:]]) echo ok -- space ;;
  91. *) echo oops newline ;;
  92. esac
  93. # let's check out characters in the ASCII range
  94. case $'\377' in
  95. [[:ascii:]]) echo oops -- ascii\?;;
  96. esac
  97. case 9 in
  98. [1[:alpha:]123]) echo oops 1;;
  99. esac
  100. # however, an unterminated brace expression containing a valid char class
  101. # that matches had better fail
  102. case a in
  103. [[:alpha:]) echo oops 2;;
  104. esac
  105. case $'\b' in
  106. [[:graph:]]) echo oops 3;;
  107. esac
  108. case $'\b' in
  109. [[:print:]]) echo oops 4;;
  110. esac
  111. case $' ' in
  112. [[:punct:]]) echo oops 5;;
  113. esac
  114. # Next, test POSIX.2 collating symbols
  115. case 'a' in
  116. [[.a.]]) echo ok 1;;
  117. esac
  118. case '-' in
  119. [[.hyphen.]-9]) echo ok 2;;
  120. esac
  121. case 'p' in
  122. [[.a.]-[.z.]]) echo ok 3;;
  123. esac
  124. case '-' in
  125. [[.-.]]) echo ok 4;;
  126. esac
  127. case ' ' in
  128. [[.space.]]) echo ok 5;;
  129. esac
  130. case ' ' in
  131. [[.grave-accent.]]) echo oops - grave;;
  132. *) echo ok 6;;
  133. esac
  134. case '4' in
  135. [[.-.]-9]) echo ok 7;;
  136. esac
  137. # an invalid collating symbol cannot be the first part of a range
  138. case 'c' in
  139. [[.yyz.]-[.z.]]) echo oops - yyz;;
  140. *) echo ok 8;;
  141. esac
  142. case 'c' in
  143. [[.yyz.][.a.]-z]) echo ok 9;;
  144. esac
  145. # but when not part of a range is not an error
  146. case 'c' in
  147. [[.yyz.][.a.]-[.z.]]) echo ok 10 ;;
  148. esac
  149. case 'p' in
  150. [[.a.]-[.Z.]]) echo oops -- bad range ;;
  151. *) echo ok 11;;
  152. esac
  153. case p in
  154. [[.a.]-[.zz.]p]) echo ok 12;;
  155. *) echo oops -- bad range 2;;
  156. esac
  157. case p in
  158. [[.aa.]-[.z.]p]) echo ok 13;;
  159. *) echo oops -- bad range 3;;
  160. esac
  161. case c in
  162. [[.yyz.]cde]) echo ok 14;;
  163. esac
  164. case abc in
  165. [[.cb.]a-Za]*) echo ok 15;;
  166. esac
  167. case $'\t' in
  168. [[.space.][.tab.][.newline.]]) echo ok 16;;
  169. esac
  170. # and finally, test POSIX.2 equivalence classes
  171. case "abc" in
  172. [[:alpha:]][[=b=]][[:ascii:]]) echo ok 1;;
  173. esac
  174. case "abc" in
  175. [[:alpha:]][[=B=]][[:ascii:]]) echo oops -- =B=;;
  176. *) echo ok 2 ;;
  177. esac
  178. case a in
  179. [[=b=]) echo oops;; # an incomplete equiv class is just a string
  180. *) echo ok 3;;
  181. esac