233 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # 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
 | |
| 
 | 
