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 | ||
|  | 
 |