1 # This file tests the auxiliary pattern conversion features of the PCRE2
2 # library, in non-UTF mode.
5 #newline_default lf any anycrlf
7 # -------- Tests of glob conversion --------
9 # Set the glob separator explicitly so that different OS defaults are not a
10 # problem. Then test various errors.
12 #pattern convert=glob,convert_glob_escape=\,convert_glob_separator=/
15 ** The convert and posix modifiers are mutually exclusive
17 # Separator must be / \ or .
19 /a*b/convert_glob_separator=%
20 ** Invalid glob separator '%'
22 # Can't have separator in a class
31 ** Pattern conversion error at offset 3: missing terminating ] for character class
35 /abc/convert_length=11
36 ** Pattern conversion error at offset 3: no more memory
38 /abc/convert_length=12
41 # Now some actual tests
44 (?s)\Aa[^/]b[\]xy](*COMMIT)[^/]*?c\z
48 # Tests from the gitwildmatch list, with some additions
80 (?s)\Af(*COMMIT)[^/]*+\z
95 (?s)\A[^/]*?foo(*COMMIT)[^/]*+\z
104 (?s)\A[^/]*?ob(*COMMIT)[^/]*?a(*COMMIT)[^/]*?r(*COMMIT)[^/]*+\z
130 (?s)\A[^/]*?[al][^/]\z
181 '[[:alpha:]][[:digit:]][[:upper:]]'
182 (?s)\A[[:alpha:]][[:digit:]][[:upper:]]\z
186 '[[:digit:][:upper:][:space:]]'
187 (?s)\A[[:digit:][:upper:][:space:]]\z
201 (?s)\A[a-c[:digit:]x-z]\z
212 # End of gitwildmatch tests
215 (?s)\A[^/]*?\.j[^/]g\z
227 (?s)\AA[+-0](?<!/)B\z
255 (?s)\A[,-0](?<!/)x[^/]z\z
265 (?s)\A\.x(*COMMIT)[^/]*+\z
270 (?s)\Aa[\--0](?<!/)z\z
297 (?s)\Aa[[:digit:].]z\z
307 (?s)\Aa[\[:digit]\.\]z\z
316 (?s)\A<[\[:a[:digit:]b]>\z
331 /a*b/convert_glob_separator=\
332 (?s)\Aa(*COMMIT)[^\\]*?b\z
334 /a*b/convert_glob_separator=.
335 (?s)\Aa(*COMMIT)[^\.]*?b\z
337 /a*b/convert_glob_separator=/
338 (?s)\Aa(*COMMIT)[^/]*?b\z
340 # Non control character checking
345 /\\{}\?\*+\[\]()|.^$/
346 (?s)\A\\\{\}\?\*\+\[\]\(\)\|\.\^\$\z
349 (?s)\A[^/]*?a(*COMMIT)[^/]*?/(*COMMIT)[^/]*?b(*COMMIT)[^/]*+\z
352 (?s)\A[^/]a[^/]/[^/]b[^/]\z
354 /[a\\b\c][]][-][\]\-]/
355 (?s)\A[a\\bc][\]][\-][\]\-]\z
357 /[^a\\b\c][!]][!-][^\]\-]/
358 (?s)\A[^/a\\bc][^/\]][^/\-][^/\]\-]\z
360 /[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:word:][:xdigit:]]/
361 (?s)\A[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:word:][:xdigit:]](?<!/)\z
373 (?s)\A[^/\--\-\--\-]\z
376 (?s)\A[[:alpha:]\-a]\z
378 /[[:alpha:]][[:punct:]][[:ascii:]]/
379 (?s)\A[[:alpha:]][[:punct:]](?<!/)[[:ascii:]](?<!/)\z
382 ** Pattern conversion error at offset 4: invalid syntax
385 ** Pattern conversion error at offset 9: missing terminating ] for character class
388 ** Pattern conversion error at offset 10: missing terminating ] for character class
391 (?s)\A[\[:alphaa:]\]\z
394 (?s)\A[\[:xdigi:]\]\z
397 (?s)\A[\[:xdigit::]\]\z
415 (?s)\Aabc/(*COMMIT)(?:.*?/)??abc\z
418 (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?b)(?>[^/]*?g)(?>[^/]*?n)(?>[^/]*?t\z)
419 abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt
420 0: /abcdefghijklmnop.txt
423 (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?/)
428 (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*+\z)
435 (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?/)(*COMMIT)(?:.*?/)??(?>[^/]*?b)(?>[^/]*+\z)
451 (?s)\Aa(*COMMIT).*?/b\z
458 (?s)\Aa/(*COMMIT).*?b\z
464 #pattern convert=glob:glob_no_starstar
470 (?s)\A[^/]*?a(*COMMIT)[^/]*+\z
472 #pattern convert=unset
473 #pattern convert=glob:glob_no_wild_separator
485 (?s)\Aa(*COMMIT).*?b\z
493 #pattern convert=unset
494 #pattern convert=glob,convert_glob_escape=0
502 /a`*b/convert_glob_escape=`
505 /a`*b/convert_glob_escape=0
506 (?s)\Aa`(*COMMIT)[^/]*?b\z
508 /a`*b/convert_glob_escape=x
509 ** Invalid glob escape 'x'
511 # -------- Tests of extended POSIX conversion --------
513 #pattern convert=unset:posix_extended
516 (*NUL)<[[:a[:digit:]b]>
532 (*NUL)a+1b\\c|d[ab\\c]
571 # -------- Tests of basic POSIX conversion --------
573 #pattern convert=unset:posix_basic
575 /a*b+c\+[def](ab)\(cd\)/
576 (*NUL)a*b\+c\+[def]\(ab\)(cd)
596 (*NUL)^how to \^how to
619 (*NUL)^b(c\^d)(^e\^f)