| # 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 | |
| # Separator must be / \ or . | |
| /a*b/convert_glob_separator=% | |
| # Can't have separator in a class | |
| "[ab/cd]" | |
| #if !ebcdic | |
| "[,-/]" | |
| #endif | |
| /[ab/ | |
| # Length check | |
| /abc/convert_length=0 | |
| /abc/convert_length=1 | |
| /abc/convert_length=11 | |
| /abc/convert_length=12 | |
| # Now some actual tests | |
| /a?b[]xy]*c/ | |
| azb]1234c | |
| # Tests from the gitwildmatch list, with some additions | |
| /foo/ | |
| foo | |
| /= Expect no match | |
| bar | |
| // | |
| \ | |
| /???/ | |
| foo | |
| \= Expect no match | |
| foobar | |
| /*/ | |
| foo | |
| \ | |
| /f*/ | |
| foo | |
| f | |
| /*f/ | |
| oof | |
| \= Expect no match | |
| foo | |
| /*foo*/ | |
| foo | |
| food | |
| aprilfool | |
| /*ob*a*r*/ | |
| foobar | |
| /*ab/ | |
| aaaaaaabababab | |
| /foo\*/ | |
| foo* | |
| /foo\*bar/ | |
| \= Expect no match | |
| foobar | |
| /f\\oo/ | |
| f\\oo | |
| /*[al]?/ | |
| ball | |
| /[ten]/ | |
| \= Expect no match | |
| ten | |
| /t[a-g]n/ | |
| ten | |
| /a[]]b/ | |
| a]b | |
| /a[]a-]b/ | |
| /a[]-]b/ | |
| a-b | |
| a]b | |
| \= Expect no match | |
| aab | |
| /a[]a-z]b/ | |
| aab | |
| /]/ | |
| ] | |
| /t[!a-g]n/ | |
| ton | |
| \= Expect no match | |
| ten | |
| '[[:alpha:]][[:digit:]][[:upper:]]' | |
| a1B | |
| '[[:digit:][:upper:][:space:]]' | |
| A | |
| 1 | |
| \ \= | |
| \= Expect no match | |
| a | |
| . | |
| '[a-c[:digit:]x-z]' | |
| 5 | |
| b | |
| y | |
| \= Expect no match | |
| q | |
| # End of gitwildmatch tests | |
| /*.j?g/ | |
| pic01.jpg | |
| .jpg | |
| pic02.jxg | |
| \= Expect no match | |
| pic03.j/g | |
| #if !ebcdic | |
| /A[+-0]B/ | |
| A+B | |
| A.B | |
| A0B | |
| \= Expect no match | |
| A/B | |
| #endif | |
| /*x?z/ | |
| abc.xyz | |
| \= Expect no match | |
| .xyz | |
| /?x?z/ | |
| axyz | |
| \= Expect no match | |
| .xyz | |
| #if !ebcdic | |
| "[,-0]x?z" | |
| ,xyz | |
| \= Expect no match | |
| /xyz | |
| .xyz | |
| #endif | |
| ".x*" | |
| .xabc | |
| #if !ebcdic | |
| /a[--0]z/ | |
| a-z | |
| a.z | |
| a0z | |
| \= Expect no match | |
| a/z | |
| a1z | |
| #endif | |
| /<[a-c-d]>/ | |
| <a> | |
| <b> | |
| <c> | |
| <d> | |
| <-> | |
| /a[[:digit:].]z/ | |
| a1z | |
| a.z | |
| \= Expect no match | |
| a:z | |
| /a[[:digit].]z/ | |
| a[.]z | |
| a:.]z | |
| ad.]z | |
| /<[[:a[:digit:]b]>/ | |
| <[> | |
| <:> | |
| <a> | |
| <9> | |
| <b> | |
| \= Expect no match | |
| <d> | |
| /a*b/convert_glob_separator=\ | |
| /a*b/convert_glob_separator=. | |
| /a*b/convert_glob_separator=/ | |
| # Non control character checking | |
| /A\B\\C\D/ | |
| /\\{}\?\*+\[\]()|.^$/ | |
| /*a*\/*b*/ | |
| /?a?\/?b?/ | |
| /[a\\b\c][]][-][\]\-]/ | |
| /[^a\\b\c][!]][!-][^\]\-]/ | |
| /[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:word:][:xdigit:]]/ | |
| "[/-/]" | |
| /[-----]/ | |
| /[------]/ | |
| /[!------]/ | |
| /[[:alpha:]-a]/ | |
| /[[:alpha:]][[:punct:]][[:ascii:]]/ | |
| /[a-[:alpha:]]/ | |
| /[[:alpha:/ | |
| /[[:alpha:]/ | |
| /[[:alphaa:]]/ | |
| /[[:xdigi:]]/ | |
| /[[:xdigit::]]/ | |
| /****/ | |
| /**\/abc/ | |
| abc | |
| x/abc | |
| xabc | |
| /abc\/**/ | |
| /abc\/**\/abc/ | |
| /**\/*a*b*g*n*t/ | |
| abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt | |
| /**\/*a*\/**/ | |
| xx/xx/xx/xax/xx/xb | |
| /**\/*a*/ | |
| xx/xx/xx/xax | |
| xx/xx/xx/xax/xx | |
| /**\/*a*\/**\/*b*/ | |
| xx/xx/xx/xax/xx/xb | |
| xx/xx/xx/xax/xx/x | |
| "**a"convert=glob | |
| a | |
| c/b/a | |
| c/b/aaa | |
| "a**/b"convert=glob | |
| a/b | |
| ab | |
| "a/**b"convert=glob | |
| a/b | |
| ab | |
| #pattern convert=glob:glob_no_starstar | |
| /***/ | |
| /**a**/ | |
| #pattern convert=unset | |
| #pattern convert=glob:glob_no_wild_separator | |
| /*/ | |
| /*a*/ | |
| /**a**/ | |
| /a*b/ | |
| /*a*b*/ | |
| /??a??/ | |
| #pattern convert=unset | |
| #pattern convert=glob,convert_glob_escape=0 | |
| /a\b\cd/ | |
| /**\/a/ | |
| /a`*b/convert_glob_escape=` | |
| /a`*b/convert_glob_escape=0 | |
| /a`*b/convert_glob_escape=x | |
| # Tests of null and empty inputs | |
| /a*b/use_length | |
| //use_length | |
| # Error | |
| /a*b/null_pattern | |
| # Error | |
| //null_pattern | |
| # Error | |
| /a*b/use_length,null_pattern | |
| # Kind-of error... pattern conversion succeeds, but it converts to a non-empty | |
| # pattern, and null_pattern applies to the regex parse afterwards too, which | |
| # fails. | |
| //use_length,null_pattern | |
| # -------- Tests of extended POSIX conversion -------- | |
| #pattern convert=unset:posix_extended | |
| /<[[:a[:digit:]b]>/ | |
| <[> | |
| <:> | |
| <a> | |
| <9> | |
| <b> | |
| \= Expect no match | |
| <d> | |
| /a+\1b\\c|d[ab\c]/ | |
| /<[]bc]>/ | |
| <]> | |
| <b> | |
| <c> | |
| /<[^]bc]>/ | |
| <.> | |
| \= Expect no match | |
| <]> | |
| <b> | |
| /(a)\1b/ | |
| a1b | |
| \= Expect no match | |
| aab | |
| /(ab)c)d]/ | |
| Xabc)d]Y | |
| /a***b/ | |
| # Tests of empty inputs | |
| /a*b/use_length | |
| //use_length | |
| # -------- Tests of basic POSIX conversion -------- | |
| #pattern convert=unset:posix_basic | |
| /a*b+c\+[def](ab)\(cd\)/ | |
| /\(a\)\1b/ | |
| aab | |
| \= Expect no match | |
| a1b | |
| /how.to how\.to/ | |
| how\nto how.to | |
| \= Expect no match | |
| how\x{0}to how.to | |
| /^how to \^how to/ | |
| /^*abc/ | |
| /*abc/ | |
| X*abcY | |
| /**abc/ | |
| XabcY | |
| X*abcY | |
| X**abcY | |
| /*ab\(*cd\)/ | |
| /^b\(c^d\)\(^e^f\)/ | |
| /a***b/ | |
| # Tests of empty inputs | |
| /a*b/use_length | |
| //use_length | |
| # End of testinput24 | |