# 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_basic,convert_glob_separator=/ /abc/posix ** The convert and posix modifiers are mutually exclusive # More than one glob type is an error. /abc/convert=glob_bash ** Pattern conversion error at offset 0: bad option value # Separator must be / \ or . /a*b/convert_glob_separator=% ** Invalid glob separator '%' # Can't have separator in a class "[ab/cd]" ** Pattern conversion error at offset 3: invalid syntax "[,-/]" ** Pattern conversion error at offset 3: invalid syntax /[ab/ ** Pattern conversion error at offset 3: missing terminating ] for character class # Length check /abc/convert_length=7 ** Pattern conversion error at offset 3: no more memory /abc/convert_length=8 \Aabc\z # Now some actual tests /a?b[]xy]*c/ \Aa[^/]b[]xy][^/]*c\z azb]1234c 0: azb]1234c # Tests from the gitwildmatch list, with some additions /foo/ \Afoo\z foo 0: foo /= Expect no match No match bar No match // \A\z \ 0: /???/ \A(?!\.)[^/][^/][^/]\z foo 0: foo \= Expect no match foobar No match /*/ \A[^/]*\z foo 0: foo \ 0: /f*/ \Af[^/]*\z foo 0: foo f 0: f /*f/ (?s)\A(?!\.).*(?<=f)\z oof 0: oof \= Expect no match foo No match /*foo*/ \A(?!\.)[^/]*foo[^/]*\z foo 0: foo food 0: food aprilfool 0: aprilfool /*ob*a*r*/ \A(?!\.)[^/]*ob[^/]*a[^/]*r[^/]*\z foobar 0: foobar /*ab/ (?s)\A(?!\.).*(?<=ab)\z aaaaaaabababab 0: aaaaaaabababab /foo\*/ \Afoo\*\z foo* 0: foo* /foo\*bar/ \Afoo\*bar\z \= Expect no match foobar No match /f\\oo/ \Af\\oo\z f\\oo 0: f\oo /*[al]?/ (?s)\A(?!\.).*(?<=[al][^/])\z ball 0: ball /[ten]/ \A(?!\.)[ten]\z \= Expect no match ten No match /t[a-g]n/ \At[a-g]n\z ten 0: ten /a[]]b/ \Aa[]]b\z a]b 0: a]b /a[]-]b/ \Aa[]-]b\z a-b 0: a-b a]b 0: a]b \= Expect no match aab No match /a[]a-]b/ \Aa[]a-]b\z aab 0: aab /]/ \A\]\z ] 0: ] /t[!a-g]n/ \At[^a-g]n\z ton 0: ton \= Expect no match ten No match '[[:alpha:]][[:digit:]][[:upper:]]' \A(?!\.)[[:alpha:]][[:digit:]][[:upper:]]\z a1B 0: a1B '[[:digit:][:upper:][:space:]]' \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]' \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 No match pic02.jxg 0: pic02.jxg \= Expect no match pic03.j/g No match /A[+-0]B/ \AA[+-0](?/ \A<[a-c-d]>\z 0: 0: 0: 0: <-> 0: <-> /a[[:digit:].]z/ \Aa[[:digit:].]z\z a1z 0: a1z a.z 0: a.z \= Expect no match a:z No match /a[[:digit].]z/ \Aa[[:digit]\.\]z\z a[.]z 0: a[.]z a:.]z 0: a:.]z ad.]z 0: ad.]z /<[[:a[:digit:]b]>/ \A<[[:a[:digit:]b]>\z <[> 0: <[> <:> 0: <:> 0: <9> 0: <9> 0: \= Expect no match No match /a*b/convert_glob_separator=\ \Aa[^\\]*b\z /a*b/convert_glob_separator=. \Aa[^.]*b\z /a*b/convert_glob_separator=/ \Aa[^/]*b\z #pattern convert=unset #pattern convert=posix_extended /a[[:>:]z/ a[[:>:]z Failed: error 130 at offset 4: unknown POSIX class name /<[[:a[:digit:]b]>/ <[[:a[:digit:]b]> <[> 0: <[> <:> 0: <:> 0: <9> 0: <9> 0: \= Expect no match No match /a+\1b\\c|d[ab\c]/ a+1b\\c|d[ab\\c] /a[[:<:]]b[[:>:]]/ a[[:<:]]b[[:>:]] /<[]bc]>/ <[]bc]> <]> 0: <]> 0: 0: /<[^]bc]>/ <[^]bc]> <.> 0: <.> \= Expect no match <]> No match No match /(a)\1b/ (a)1b a1b 0: a1b 1: a \= Expect no match aab No match /(ab)c)d]/ (ab)c\)d\] Xabc)d]Y 0: abc)d] 1: ab /a***b/ a*b #pattern convert=unset #pattern convert=posix_basic /a*b+c\+[def](ab)\(cd\)/ a*b\+c+[def]\(ab\)(cd) /\(a\)\1b/ (a)\1b aab 0: aab 1: a \= Expect no match a1b No match /how.to how\.to/ how.to how\.to /^how to \^how to/ ^how to \^how to /^*abc/ ^\*abc /*abc/ \*abc X*abcY 0: *abc /**abc/ \**abc XabcY 0: abc X*abcY 0: *abc X**abcY 0: **abc /^b\(c^d\)\(^e^f\)/ ^b(c\^d)(^e\^f) /a***b/ a*b #pattern convert=unset /abc/ # End of testinput24