You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
# 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
|