625 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			625 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| # This file tests the auxiliary pattern conversion features of the PCRE2
 | |
| # library, in non-UTF mode.
 | |
| 
 | |
| #forbid_utf
 | |
| #newline_default lf any anycrlf
 | |
| 
 | |
| # -------- Tests of glob conversion --------
 | |
| 
 | |
| # Set the glob separator explicitly so that different OS defaults are not a
 | |
| # problem. Then test various errors.
 | |
| 
 | |
| #pattern convert=glob,convert_glob_escape=\,convert_glob_separator=/
 | |
| 
 | |
| /abc/posix
 | |
| ** The convert and posix modifiers are mutually exclusive
 | |
| 
 | |
| # Separator must be / \ or .
 | |
| 
 | |
| /a*b/convert_glob_separator=%
 | |
| ** Invalid glob separator '%'
 | |
| 
 | |
| # Can't have separator in a class
 | |
| 
 | |
| "[ab/cd]"
 | |
| (?s)\A[ab/cd](?<!/)\z
 | |
| 
 | |
| "[,-/]"
 | |
| (?s)\A[,-/](?<!/)\z
 | |
| 
 | |
| /[ab/
 | |
| ** Pattern conversion error at offset 3: missing terminating ] for character class
 | |
| 
 | |
| # Length check
 | |
| 
 | |
| /abc/convert_length=11
 | |
| ** Pattern conversion error at offset 3: no more memory
 | |
| 
 | |
| /abc/convert_length=12
 | |
| (?s)\Aabc\z
 | |
| 
 | |
| # Now some actual tests
 | |
| 
 | |
| /a?b[]xy]*c/
 | |
| (?s)\Aa[^/]b[\]xy](*COMMIT)[^/]*?c\z
 | |
|     azb]1234c
 | |
|  0: azb]1234c
 | |
| 
 | |
| # Tests from the gitwildmatch list, with some additions
 | |
| 
 | |
| /foo/
 | |
| (?s)\Afoo\z
 | |
|     foo
 | |
|  0: foo
 | |
| /= Expect no match
 | |
| No match
 | |
|     bar
 | |
| No match
 | |
| 
 | |
| //
 | |
| (?s)\A\z
 | |
|     \
 | |
|  0: 
 | |
| 
 | |
| /???/
 | |
| (?s)\A[^/][^/][^/]\z
 | |
|     foo
 | |
|  0: foo
 | |
| \= Expect no match
 | |
|     foobar
 | |
| No match
 | |
| 
 | |
| /*/
 | |
| (?s)\A[^/]*+\z
 | |
|     foo
 | |
|  0: foo
 | |
|     \
 | |
|  0: 
 | |
| 
 | |
| /f*/
 | |
| (?s)\Af(*COMMIT)[^/]*+\z
 | |
|     foo
 | |
|  0: foo
 | |
|     f
 | |
|  0: f
 | |
| 
 | |
| /*f/
 | |
| (?s)\A[^/]*?f\z
 | |
|     oof
 | |
|  0: oof
 | |
| \= Expect no match
 | |
|     foo
 | |
| No match
 | |
| 
 | |
| /*foo*/
 | |
| (?s)\A[^/]*?foo(*COMMIT)[^/]*+\z
 | |
|     foo
 | |
|  0: foo
 | |
|     food
 | |
|  0: food
 | |
|     aprilfool
 | |
|  0: aprilfool
 | |
| 
 | |
| /*ob*a*r*/
 | |
| (?s)\A[^/]*?ob(*COMMIT)[^/]*?a(*COMMIT)[^/]*?r(*COMMIT)[^/]*+\z
 | |
|     foobar
 | |
|  0: foobar
 | |
| 
 | |
| /*ab/
 | |
| (?s)\A[^/]*?ab\z
 | |
|     aaaaaaabababab
 | |
|  0: aaaaaaabababab
 | |
| 
 | |
| /foo\*/
 | |
| (?s)\Afoo\*\z
 | |
|     foo*
 | |
|  0: foo*
 | |
| 
 | |
| /foo\*bar/
 | |
| (?s)\Afoo\*bar\z
 | |
| \= Expect no match
 | |
|     foobar
 | |
| No match
 | |
| 
 | |
| /f\\oo/
 | |
| (?s)\Af\\oo\z
 | |
|     f\\oo
 | |
|  0: f\oo
 | |
| 
 | |
| /*[al]?/
 | |
| (?s)\A[^/]*?[al][^/]\z
 | |
|     ball
 | |
|  0: ball
 | |
| 
 | |
| /[ten]/
 | |
| (?s)\A[ten]\z
 | |
| \= Expect no match
 | |
|     ten
 | |
| No match
 | |
| 
 | |
| /t[a-g]n/
 | |
| (?s)\At[a-g]n\z
 | |
|     ten
 | |
|  0: ten
 | |
| 
 | |
| /a[]]b/
 | |
| (?s)\Aa[\]]b\z
 | |
|     a]b
 | |
|  0: a]b
 | |
| 
 | |
| /a[]a-]b/
 | |
| (?s)\Aa[\]a\-]b\z
 | |
| 
 | |
| /a[]-]b/
 | |
| (?s)\Aa[\]\-]b\z
 | |
|     a-b
 | |
|  0: a-b
 | |
|     a]b
 | |
|  0: a]b
 | |
| \= Expect no match
 | |
|     aab
 | |
| No match
 | |
| 
 | |
| /a[]a-z]b/
 | |
| (?s)\Aa[\]a-z]b\z
 | |
|     aab
 | |
|  0: aab
 | |
| 
 | |
| /]/
 | |
| (?s)\A\]\z
 | |
|     ]
 | |
|  0: ]
 | |
| 
 | |
| /t[!a-g]n/
 | |
| (?s)\At[^/a-g]n\z
 | |
|     ton
 | |
|  0: ton
 | |
| \= Expect no match
 | |
|     ten
 | |
| No match
 | |
| 
 | |
| '[[:alpha:]][[:digit:]][[:upper:]]'
 | |
| (?s)\A[[:alpha:]][[:digit:]][[:upper:]]\z
 | |
|     a1B
 | |
|  0: a1B
 | |
| 
 | |
| '[[:digit:][:upper:][:space:]]'
 | |
| (?s)\A[[:digit:][:upper:][:space:]]\z
 | |
|     A
 | |
|  0: A
 | |
|     1
 | |
|  0: 1
 | |
|     \ \=
 | |
|  0:  
 | |
| \= Expect no match
 | |
|     a
 | |
| No match
 | |
|     .
 | |
| No match
 | |
| 
 | |
| '[a-c[:digit:]x-z]'
 | |
| (?s)\A[a-c[:digit:]x-z]\z
 | |
|     5
 | |
|  0: 5
 | |
|     b
 | |
|  0: b
 | |
|     y
 | |
|  0: y
 | |
| \= Expect no match
 | |
|     q
 | |
| No match
 | |
| 
 | |
| # End of gitwildmatch tests
 | |
| 
 | |
| /*.j?g/
 | |
| (?s)\A[^/]*?\.j[^/]g\z
 | |
|     pic01.jpg
 | |
|  0: pic01.jpg
 | |
|     .jpg
 | |
|  0: .jpg
 | |
|     pic02.jxg
 | |
|  0: pic02.jxg
 | |
| \= Expect no match
 | |
|     pic03.j/g
 | |
| No match
 | |
| 
 | |
| /A[+-0]B/
 | |
| (?s)\AA[+-0](?<!/)B\z
 | |
|     A+B
 | |
|  0: A+B
 | |
|     A.B
 | |
|  0: A.B
 | |
|     A0B
 | |
|  0: A0B
 | |
| \= Expect no match
 | |
|     A/B
 | |
| No match
 | |
| 
 | |
| /*x?z/
 | |
| (?s)\A[^/]*?x[^/]z\z
 | |
|     abc.xyz
 | |
|  0: abc.xyz
 | |
| \= Expect no match
 | |
|     .xyz
 | |
|  0: .xyz
 | |
| 
 | |
| /?x?z/
 | |
| (?s)\A[^/]x[^/]z\z
 | |
|     axyz
 | |
|  0: axyz
 | |
| \= Expect no match
 | |
|     .xyz
 | |
|  0: .xyz
 | |
| 
 | |
| "[,-0]x?z"
 | |
| (?s)\A[,-0](?<!/)x[^/]z\z
 | |
|     ,xyz
 | |
|  0: ,xyz
 | |
| \= Expect no match
 | |
|     /xyz
 | |
| No match
 | |
|     .xyz
 | |
|  0: .xyz
 | |
| 
 | |
| ".x*"
 | |
| (?s)\A\.x(*COMMIT)[^/]*+\z
 | |
|     .xabc
 | |
|  0: .xabc
 | |
| 
 | |
| /a[--0]z/
 | |
| (?s)\Aa[\--0](?<!/)z\z
 | |
|     a-z
 | |
|  0: a-z
 | |
|     a.z
 | |
|  0: a.z
 | |
|     a0z
 | |
|  0: a0z
 | |
| \= Expect no match
 | |
|     a/z
 | |
| No match
 | |
|     a1z
 | |
| No match
 | |
| 
 | |
| /<[a-c-d]>/
 | |
| (?s)\A<[a-c\-d]>\z
 | |
|     <a>
 | |
|  0: <a>
 | |
|     <b>
 | |
|  0: <b>
 | |
|     <c>
 | |
|  0: <c>
 | |
|     <d>
 | |
|  0: <d>
 | |
|     <->
 | |
|  0: <->
 | |
| 
 | |
| /a[[:digit:].]z/
 | |
| (?s)\Aa[[:digit:].]z\z
 | |
|     a1z
 | |
|  0: a1z
 | |
|     a.z
 | |
|  0: a.z
 | |
| \= Expect no match
 | |
|     a:z
 | |
| No match
 | |
| 
 | |
| /a[[:digit].]z/
 | |
| (?s)\Aa[\[:digit]\.\]z\z
 | |
|     a[.]z
 | |
|  0: a[.]z
 | |
|     a:.]z
 | |
|  0: a:.]z
 | |
|     ad.]z
 | |
|  0: ad.]z
 | |
| 
 | |
| /<[[:a[:digit:]b]>/
 | |
| (?s)\A<[\[:a[:digit:]b]>\z
 | |
|     <[>
 | |
|  0: <[>
 | |
|     <:>
 | |
|  0: <:>
 | |
|     <a>
 | |
|  0: <a>
 | |
|     <9>
 | |
|  0: <9>
 | |
|     <b>
 | |
|  0: <b>
 | |
| \= Expect no match
 | |
|     <d>
 | |
| No match
 | |
| 
 | |
| /a*b/convert_glob_separator=\
 | |
| (?s)\Aa(*COMMIT)[^\\]*?b\z
 | |
| 
 | |
| /a*b/convert_glob_separator=.
 | |
| (?s)\Aa(*COMMIT)[^\.]*?b\z
 | |
| 
 | |
| /a*b/convert_glob_separator=/
 | |
| (?s)\Aa(*COMMIT)[^/]*?b\z
 | |
| 
 | |
| # Non control character checking
 | |
| 
 | |
| /A\B\\C\D/
 | |
| (?s)\AAB\\CD\z
 | |
| 
 | |
| /\\{}\?\*+\[\]()|.^$/
 | |
| (?s)\A\\\{\}\?\*\+\[\]\(\)\|\.\^\$\z
 | |
| 
 | |
| /*a*\/*b*/
 | |
| (?s)\A[^/]*?a(*COMMIT)[^/]*?/(*COMMIT)[^/]*?b(*COMMIT)[^/]*+\z
 | |
| 
 | |
| /?a?\/?b?/
 | |
| (?s)\A[^/]a[^/]/[^/]b[^/]\z
 | |
| 
 | |
| /[a\\b\c][]][-][\]\-]/
 | |
| (?s)\A[a\\bc][\]][\-][\]\-]\z
 | |
| 
 | |
| /[^a\\b\c][!]][!-][^\]\-]/
 | |
| (?s)\A[^/a\\bc][^/\]][^/\-][^/\]\-]\z
 | |
| 
 | |
| /[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:word:][:xdigit:]]/
 | |
| (?s)\A[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:word:][:xdigit:]](?<!/)\z
 | |
| 
 | |
| "[/-/]"
 | |
| (?s)\A[/-/](?<!/)\z
 | |
| 
 | |
| /[-----]/
 | |
| (?s)\A[\--\-\-\-]\z
 | |
| 
 | |
| /[------]/
 | |
| (?s)\A[\--\-\--\-]\z
 | |
| 
 | |
| /[!------]/
 | |
| (?s)\A[^/\--\-\--\-]\z
 | |
| 
 | |
| /[[:alpha:]-a]/
 | |
| (?s)\A[[:alpha:]\-a]\z
 | |
| 
 | |
| /[[:alpha:]][[:punct:]][[:ascii:]]/
 | |
| (?s)\A[[:alpha:]][[:punct:]](?<!/)[[:ascii:]](?<!/)\z
 | |
| 
 | |
| /[a-[:alpha:]]/
 | |
| ** Pattern conversion error at offset 4: invalid syntax
 | |
| 
 | |
| /[[:alpha:/
 | |
| ** Pattern conversion error at offset 9: missing terminating ] for character class
 | |
| 
 | |
| /[[:alpha:]/
 | |
| ** Pattern conversion error at offset 10: missing terminating ] for character class
 | |
| 
 | |
| /[[:alphaa:]]/
 | |
| (?s)\A[\[:alphaa:]\]\z
 | |
| 
 | |
| /[[:xdigi:]]/
 | |
| (?s)\A[\[:xdigi:]\]\z
 | |
| 
 | |
| /[[:xdigit::]]/
 | |
| (?s)\A[\[:xdigit::]\]\z
 | |
| 
 | |
| /****/
 | |
| (?s)
 | |
| 
 | |
| /**\/abc/
 | |
| (?s)(?:\A|/)abc\z
 | |
|   abc
 | |
|  0: abc
 | |
|   x/abc
 | |
|  0: /abc
 | |
|   xabc
 | |
| No match
 | |
| 
 | |
| /abc\/**/
 | |
| (?s)\Aabc/
 | |
| 
 | |
| /abc\/**\/abc/
 | |
| (?s)\Aabc/(*COMMIT)(?:.*?/)??abc\z
 | |
| 
 | |
| /**\/*a*b*g*n*t/
 | |
| (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?b)(?>[^/]*?g)(?>[^/]*?n)(?>[^/]*?t\z)
 | |
|   abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt
 | |
|  0: /abcdefghijklmnop.txt
 | |
| 
 | |
| /**\/*a*\/**/
 | |
| (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?/)
 | |
|   xx/xx/xx/xax/xx/xb
 | |
|  0: /xax/
 | |
| 
 | |
| /**\/*a*/
 | |
| (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*+\z)
 | |
|   xx/xx/xx/xax
 | |
|  0: /xax
 | |
|   xx/xx/xx/xax/xx
 | |
| No match
 | |
| 
 | |
| /**\/*a*\/**\/*b*/
 | |
| (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?/)(*COMMIT)(?:.*?/)??(?>[^/]*?b)(?>[^/]*+\z)
 | |
|   xx/xx/xx/xax/xx/xb
 | |
|  0: /xax/xx/xb
 | |
|   xx/xx/xx/xax/xx/x
 | |
| No match
 | |
| 
 | |
| "**a"convert=glob
 | |
| (?s)a\z
 | |
|   a
 | |
|  0: a
 | |
|   c/b/a
 | |
|  0: a
 | |
|   c/b/aaa
 | |
|  0: a
 | |
| 
 | |
| "a**/b"convert=glob
 | |
| (?s)\Aa(*COMMIT).*?/b\z
 | |
|   a/b
 | |
|  0: a/b
 | |
|   ab
 | |
| No match
 | |
| 
 | |
| "a/**b"convert=glob
 | |
| (?s)\Aa/(*COMMIT).*?b\z
 | |
|   a/b
 | |
|  0: a/b
 | |
|   ab
 | |
| No match
 | |
| 
 | |
| #pattern convert=glob:glob_no_starstar
 | |
| 
 | |
| /***/
 | |
| (?s)\A[^/]*+\z
 | |
| 
 | |
| /**a**/
 | |
| (?s)\A[^/]*?a(*COMMIT)[^/]*+\z
 | |
| 
 | |
| #pattern convert=unset
 | |
| #pattern convert=glob:glob_no_wild_separator
 | |
| 
 | |
| /*/
 | |
| (?s)
 | |
| 
 | |
| /*a*/
 | |
| (?s)a
 | |
| 
 | |
| /**a**/
 | |
| (?s)a
 | |
| 
 | |
| /a*b/
 | |
| (?s)\Aa(*COMMIT).*?b\z
 | |
| 
 | |
| /*a*b*/
 | |
| (?s)a(*COMMIT).*?b
 | |
| 
 | |
| /??a??/
 | |
| (?s)\A..a..\z
 | |
| 
 | |
| #pattern convert=unset
 | |
| #pattern convert=glob,convert_glob_escape=0
 | |
| 
 | |
| /a\b\cd/
 | |
| (?s)\Aa\\b\\cd\z
 | |
| 
 | |
| /**\/a/
 | |
| (?s)\\/a\z
 | |
| 
 | |
| /a`*b/convert_glob_escape=`
 | |
| (?s)\Aa\*b\z
 | |
| 
 | |
| /a`*b/convert_glob_escape=0
 | |
| (?s)\Aa`(*COMMIT)[^/]*?b\z
 | |
| 
 | |
| /a`*b/convert_glob_escape=x
 | |
| ** Invalid glob escape 'x'
 | |
| 
 | |
| # -------- Tests of extended POSIX conversion --------
 | |
| 
 | |
| #pattern convert=unset:posix_extended
 | |
| 
 | |
| /<[[:a[:digit:]b]>/
 | |
| (*NUL)<[[:a[:digit:]b]>
 | |
|     <[>
 | |
|  0: <[>
 | |
|     <:>
 | |
|  0: <:>
 | |
|     <a>
 | |
|  0: <a>
 | |
|     <9>
 | |
|  0: <9>
 | |
|     <b>
 | |
|  0: <b>
 | |
| \= Expect no match
 | |
|     <d>
 | |
| No match
 | |
| 
 | |
| /a+\1b\\c|d[ab\c]/
 | |
| (*NUL)a+1b\\c|d[ab\\c]
 | |
| 
 | |
| /<[]bc]>/
 | |
| (*NUL)<[]bc]>
 | |
|     <]>
 | |
|  0: <]>
 | |
|     <b>
 | |
|  0: <b>
 | |
|     <c>
 | |
|  0: <c>
 | |
| 
 | |
| /<[^]bc]>/
 | |
| (*NUL)<[^]bc]>
 | |
|     <.>
 | |
|  0: <.>
 | |
| \= Expect no match
 | |
|     <]>
 | |
| No match
 | |
|     <b>
 | |
| No match
 | |
| 
 | |
| /(a)\1b/
 | |
| (*NUL)(a)1b
 | |
|     a1b
 | |
|  0: a1b
 | |
|  1: a
 | |
| \= Expect no match
 | |
|     aab
 | |
| No match
 | |
| 
 | |
| /(ab)c)d]/
 | |
| (*NUL)(ab)c\)d\]
 | |
|     Xabc)d]Y
 | |
|  0: abc)d]
 | |
|  1: ab
 | |
| 
 | |
| /a***b/
 | |
| (*NUL)a*b
 | |
| 
 | |
| # -------- Tests of basic POSIX conversion --------
 | |
| 
 | |
| #pattern convert=unset:posix_basic
 | |
| 
 | |
| /a*b+c\+[def](ab)\(cd\)/
 | |
| (*NUL)a*b\+c\+[def]\(ab\)(cd)
 | |
| 
 | |
| /\(a\)\1b/
 | |
| (*NUL)(a)\1b
 | |
|     aab
 | |
|  0: aab
 | |
|  1: a
 | |
| \= Expect no match
 | |
|     a1b
 | |
| No match
 | |
| 
 | |
| /how.to how\.to/
 | |
| (*NUL)how.to how\.to
 | |
|     how\nto how.to
 | |
|  0: how\x0ato how.to
 | |
| \= Expect no match     
 | |
|     how\x{0}to how.to
 | |
| No match
 | |
| 
 | |
| /^how to \^how to/
 | |
| (*NUL)^how to \^how to
 | |
| 
 | |
| /^*abc/
 | |
| (*NUL)^\*abc
 | |
| 
 | |
| /*abc/
 | |
| (*NUL)\*abc
 | |
|     X*abcY
 | |
|  0: *abc
 | |
| 
 | |
| /**abc/
 | |
| (*NUL)\**abc
 | |
|     XabcY
 | |
|  0: abc
 | |
|     X*abcY
 | |
|  0: *abc
 | |
|     X**abcY
 | |
|  0: **abc
 | |
|     
 | |
| /*ab\(*cd\)/ 
 | |
| (*NUL)\*ab(\*cd)
 | |
| 
 | |
| /^b\(c^d\)\(^e^f\)/
 | |
| (*NUL)^b(c\^d)(^e\^f)
 | |
| 
 | |
| /a***b/
 | |
| (*NUL)a*b
 | |
| 
 | |
| # End of testinput24
 |