github的一些开源项目
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.
 
 
 
 
 
 

624 lines
7.9 KiB

# 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