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