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