# 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]"

"[,-/]"

/[ab/

# Length check

/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

/A[+-0]B/
    A+B
    A.B
    A0B
\= Expect no match
    A/B

/*x?z/
    abc.xyz
\= Expect no match
    .xyz

/?x?z/
    axyz
\= Expect no match
    .xyz

"[,-0]x?z"
    ,xyz
\= Expect no match
    /xyz
    .xyz

".x*"
    .xabc

/a[--0]z/
    a-z
    a.z
    a0z
\= Expect no match
    a/z
    a1z

/<[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 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 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/

# End of testinput24
