1 # This file tests the auxiliary pattern conversion features of the PCRE2 2 # library, in non-UTF mode. 3 4 #forbid_utf 5 #newline_default lf any anycrlf 6 7 # -------- Tests of glob conversion -------- 8 9 # Set the glob separator explicitly so that different OS defaults are not a 10 # problem. Then test various errors. 11 12 #pattern convert=glob,convert_glob_escape=\,convert_glob_separator=/ 13 14 /abc/posix 15 ** The convert and posix modifiers are mutually exclusive 16 17 # Separator must be / \ or . 18 19 /a*b/convert_glob_separator=% 20 ** Invalid glob separator '%' 21 22 # Can't have separator in a class 23 24 "[ab/cd]" 25 (?s)\A[ab/cd](?<!/)\z 26 27 "[,-/]" 28 (?s)\A[,-/](?<!/)\z 29 30 /[ab/ 31 ** Pattern conversion error at offset 3: missing terminating ] for character class 32 33 # Length check 34 35 /abc/convert_length=11 36 ** Pattern conversion error at offset 3: no more memory 37 38 /abc/convert_length=12 39 (?s)\Aabc\z 40 41 # Now some actual tests 42 43 /a?b[]xy]*c/ 44 (?s)\Aa[^/]b[\]xy](*COMMIT)[^/]*?c\z 45 azb]1234c 46 0: azb]1234c 47 48 # Tests from the gitwildmatch list, with some additions 49 50 /foo/ 51 (?s)\Afoo\z 52 foo 53 0: foo 54 /= Expect no match 55 No match 56 bar 57 No match 58 59 // 60 (?s)\A\z 61 \ 62 0: 63 64 /???/ 65 (?s)\A[^/][^/][^/]\z 66 foo 67 0: foo 68 \= Expect no match 69 foobar 70 No match 71 72 /*/ 73 (?s)\A[^/]*+\z 74 foo 75 0: foo 76 \ 77 0: 78 79 /f*/ 80 (?s)\Af(*COMMIT)[^/]*+\z 81 foo 82 0: foo 83 f 84 0: f 85 86 /*f/ 87 (?s)\A[^/]*?f\z 88 oof 89 0: oof 90 \= Expect no match 91 foo 92 No match 93 94 /*foo*/ 95 (?s)\A[^/]*?foo(*COMMIT)[^/]*+\z 96 foo 97 0: foo 98 food 99 0: food 100 aprilfool 101 0: aprilfool 102 103 /*ob*a*r*/ 104 (?s)\A[^/]*?ob(*COMMIT)[^/]*?a(*COMMIT)[^/]*?r(*COMMIT)[^/]*+\z 105 foobar 106 0: foobar 107 108 /*ab/ 109 (?s)\A[^/]*?ab\z 110 aaaaaaabababab 111 0: aaaaaaabababab 112 113 /foo\*/ 114 (?s)\Afoo\*\z 115 foo* 116 0: foo* 117 118 /foo\*bar/ 119 (?s)\Afoo\*bar\z 120 \= Expect no match 121 foobar 122 No match 123 124 /f\\oo/ 125 (?s)\Af\\oo\z 126 f\\oo 127 0: f\oo 128 129 /*[al]?/ 130 (?s)\A[^/]*?[al][^/]\z 131 ball 132 0: ball 133 134 /[ten]/ 135 (?s)\A[ten]\z 136 \= Expect no match 137 ten 138 No match 139 140 /t[a-g]n/ 141 (?s)\At[a-g]n\z 142 ten 143 0: ten 144 145 /a[]]b/ 146 (?s)\Aa[\]]b\z 147 a]b 148 0: a]b 149 150 /a[]a-]b/ 151 (?s)\Aa[\]a\-]b\z 152 153 /a[]-]b/ 154 (?s)\Aa[\]\-]b\z 155 a-b 156 0: a-b 157 a]b 158 0: a]b 159 \= Expect no match 160 aab 161 No match 162 163 /a[]a-z]b/ 164 (?s)\Aa[\]a-z]b\z 165 aab 166 0: aab 167 168 /]/ 169 (?s)\A\]\z 170 ] 171 0: ] 172 173 /t[!a-g]n/ 174 (?s)\At[^/a-g]n\z 175 ton 176 0: ton 177 \= Expect no match 178 ten 179 No match 180 181 '[[:alpha:]][[:digit:]][[:upper:]]' 182 (?s)\A[[:alpha:]][[:digit:]][[:upper:]]\z 183 a1B 184 0: a1B 185 186 '[[:digit:][:upper:][:space:]]' 187 (?s)\A[[:digit:][:upper:][:space:]]\z 188 A 189 0: A 190 1 191 0: 1 192 \ \= 193 0: 194 \= Expect no match 195 a 196 No match 197 . 198 No match 199 200 '[a-c[:digit:]x-z]' 201 (?s)\A[a-c[:digit:]x-z]\z 202 5 203 0: 5 204 b 205 0: b 206 y 207 0: y 208 \= Expect no match 209 q 210 No match 211 212 # End of gitwildmatch tests 213 214 /*.j?g/ 215 (?s)\A[^/]*?\.j[^/]g\z 216 pic01.jpg 217 0: pic01.jpg 218 .jpg 219 0: .jpg 220 pic02.jxg 221 0: pic02.jxg 222 \= Expect no match 223 pic03.j/g 224 No match 225 226 /A[+-0]B/ 227 (?s)\AA[+-0](?<!/)B\z 228 A+B 229 0: A+B 230 A.B 231 0: A.B 232 A0B 233 0: A0B 234 \= Expect no match 235 A/B 236 No match 237 238 /*x?z/ 239 (?s)\A[^/]*?x[^/]z\z 240 abc.xyz 241 0: abc.xyz 242 \= Expect no match 243 .xyz 244 0: .xyz 245 246 /?x?z/ 247 (?s)\A[^/]x[^/]z\z 248 axyz 249 0: axyz 250 \= Expect no match 251 .xyz 252 0: .xyz 253 254 "[,-0]x?z" 255 (?s)\A[,-0](?<!/)x[^/]z\z 256 ,xyz 257 0: ,xyz 258 \= Expect no match 259 /xyz 260 No match 261 .xyz 262 0: .xyz 263 264 ".x*" 265 (?s)\A\.x(*COMMIT)[^/]*+\z 266 .xabc 267 0: .xabc 268 269 /a[--0]z/ 270 (?s)\Aa[\--0](?<!/)z\z 271 a-z 272 0: a-z 273 a.z 274 0: a.z 275 a0z 276 0: a0z 277 \= Expect no match 278 a/z 279 No match 280 a1z 281 No match 282 283 /<[a-c-d]>/ 284 (?s)\A<[a-c\-d]>\z 285 <a> 286 0: <a> 287 <b> 288 0: <b> 289 <c> 290 0: <c> 291 <d> 292 0: <d> 293 <-> 294 0: <-> 295 296 /a[[:digit:].]z/ 297 (?s)\Aa[[:digit:].]z\z 298 a1z 299 0: a1z 300 a.z 301 0: a.z 302 \= Expect no match 303 a:z 304 No match 305 306 /a[[:digit].]z/ 307 (?s)\Aa[\[:digit]\.\]z\z 308 a[.]z 309 0: a[.]z 310 a:.]z 311 0: a:.]z 312 ad.]z 313 0: ad.]z 314 315 /<[[:a[:digit:]b]>/ 316 (?s)\A<[\[:a[:digit:]b]>\z 317 <[> 318 0: <[> 319 <:> 320 0: <:> 321 <a> 322 0: <a> 323 <9> 324 0: <9> 325 <b> 326 0: <b> 327 \= Expect no match 328 <d> 329 No match 330 331 /a*b/convert_glob_separator=\ 332 (?s)\Aa(*COMMIT)[^\\]*?b\z 333 334 /a*b/convert_glob_separator=. 335 (?s)\Aa(*COMMIT)[^\.]*?b\z 336 337 /a*b/convert_glob_separator=/ 338 (?s)\Aa(*COMMIT)[^/]*?b\z 339 340 # Non control character checking 341 342 /A\B\\C\D/ 343 (?s)\AAB\\CD\z 344 345 /\\{}\?\*+\[\]()|.^$/ 346 (?s)\A\\\{\}\?\*\+\[\]\(\)\|\.\^\$\z 347 348 /*a*\/*b*/ 349 (?s)\A[^/]*?a(*COMMIT)[^/]*?/(*COMMIT)[^/]*?b(*COMMIT)[^/]*+\z 350 351 /?a?\/?b?/ 352 (?s)\A[^/]a[^/]/[^/]b[^/]\z 353 354 /[a\\b\c][]][-][\]\-]/ 355 (?s)\A[a\\bc][\]][\-][\]\-]\z 356 357 /[^a\\b\c][!]][!-][^\]\-]/ 358 (?s)\A[^/a\\bc][^/\]][^/\-][^/\]\-]\z 359 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 362 363 "[/-/]" 364 (?s)\A[/-/](?<!/)\z 365 366 /[-----]/ 367 (?s)\A[\--\-\-\-]\z 368 369 /[------]/ 370 (?s)\A[\--\-\--\-]\z 371 372 /[!------]/ 373 (?s)\A[^/\--\-\--\-]\z 374 375 /[[:alpha:]-a]/ 376 (?s)\A[[:alpha:]\-a]\z 377 378 /[[:alpha:]][[:punct:]][[:ascii:]]/ 379 (?s)\A[[:alpha:]][[:punct:]](?<!/)[[:ascii:]](?<!/)\z 380 381 /[a-[:alpha:]]/ 382 ** Pattern conversion error at offset 4: invalid syntax 383 384 /[[:alpha:/ 385 ** Pattern conversion error at offset 9: missing terminating ] for character class 386 387 /[[:alpha:]/ 388 ** Pattern conversion error at offset 10: missing terminating ] for character class 389 390 /[[:alphaa:]]/ 391 (?s)\A[\[:alphaa:]\]\z 392 393 /[[:xdigi:]]/ 394 (?s)\A[\[:xdigi:]\]\z 395 396 /[[:xdigit::]]/ 397 (?s)\A[\[:xdigit::]\]\z 398 399 /****/ 400 (?s) 401 402 /**\/abc/ 403 (?s)(?:\A|/)abc\z 404 abc 405 0: abc 406 x/abc 407 0: /abc 408 xabc 409 No match 410 411 /abc\/**/ 412 (?s)\Aabc/ 413 414 /abc\/**\/abc/ 415 (?s)\Aabc/(*COMMIT)(?:.*?/)??abc\z 416 417 /**\/*a*b*g*n*t/ 418 (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?b)(?>[^/]*?g)(?>[^/]*?n)(?>[^/]*?t\z) 419 abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt 420 0: /abcdefghijklmnop.txt 421 422 /**\/*a*\/**/ 423 (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?/) 424 xx/xx/xx/xax/xx/xb 425 0: /xax/ 426 427 /**\/*a*/ 428 (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*+\z) 429 xx/xx/xx/xax 430 0: /xax 431 xx/xx/xx/xax/xx 432 No match 433 434 /**\/*a*\/**\/*b*/ 435 (?s)(?:\A|/)(?>[^/]*?a)(?>[^/]*?/)(*COMMIT)(?:.*?/)??(?>[^/]*?b)(?>[^/]*+\z) 436 xx/xx/xx/xax/xx/xb 437 0: /xax/xx/xb 438 xx/xx/xx/xax/xx/x 439 No match 440 441 "**a"convert=glob 442 (?s)a\z 443 a 444 0: a 445 c/b/a 446 0: a 447 c/b/aaa 448 0: a 449 450 "a**/b"convert=glob 451 (?s)\Aa(*COMMIT).*?/b\z 452 a/b 453 0: a/b 454 ab 455 No match 456 457 "a/**b"convert=glob 458 (?s)\Aa/(*COMMIT).*?b\z 459 a/b 460 0: a/b 461 ab 462 No match 463 464 #pattern convert=glob:glob_no_starstar 465 466 /***/ 467 (?s)\A[^/]*+\z 468 469 /**a**/ 470 (?s)\A[^/]*?a(*COMMIT)[^/]*+\z 471 472 #pattern convert=unset 473 #pattern convert=glob:glob_no_wild_separator 474 475 /*/ 476 (?s) 477 478 /*a*/ 479 (?s)a 480 481 /**a**/ 482 (?s)a 483 484 /a*b/ 485 (?s)\Aa(*COMMIT).*?b\z 486 487 /*a*b*/ 488 (?s)a(*COMMIT).*?b 489 490 /??a??/ 491 (?s)\A..a..\z 492 493 #pattern convert=unset 494 #pattern convert=glob,convert_glob_escape=0 495 496 /a\b\cd/ 497 (?s)\Aa\\b\\cd\z 498 499 /**\/a/ 500 (?s)\\/a\z 501 502 /a`*b/convert_glob_escape=` 503 (?s)\Aa\*b\z 504 505 /a`*b/convert_glob_escape=0 506 (?s)\Aa`(*COMMIT)[^/]*?b\z 507 508 /a`*b/convert_glob_escape=x 509 ** Invalid glob escape 'x' 510 511 # -------- Tests of extended POSIX conversion -------- 512 513 #pattern convert=unset:posix_extended 514 515 /<[[:a[:digit:]b]>/ 516 (*NUL)<[[:a[:digit:]b]> 517 <[> 518 0: <[> 519 <:> 520 0: <:> 521 <a> 522 0: <a> 523 <9> 524 0: <9> 525 <b> 526 0: <b> 527 \= Expect no match 528 <d> 529 No match 530 531 /a+\1b\\c|d[ab\c]/ 532 (*NUL)a+1b\\c|d[ab\\c] 533 534 /<[]bc]>/ 535 (*NUL)<[]bc]> 536 <]> 537 0: <]> 538 <b> 539 0: <b> 540 <c> 541 0: <c> 542 543 /<[^]bc]>/ 544 (*NUL)<[^]bc]> 545 <.> 546 0: <.> 547 \= Expect no match 548 <]> 549 No match 550 <b> 551 No match 552 553 /(a)\1b/ 554 (*NUL)(a)1b 555 a1b 556 0: a1b 557 1: a 558 \= Expect no match 559 aab 560 No match 561 562 /(ab)c)d]/ 563 (*NUL)(ab)c\)d\] 564 Xabc)d]Y 565 0: abc)d] 566 1: ab 567 568 /a***b/ 569 (*NUL)a*b 570 571 # -------- Tests of basic POSIX conversion -------- 572 573 #pattern convert=unset:posix_basic 574 575 /a*b+c\+[def](ab)\(cd\)/ 576 (*NUL)a*b\+c\+[def]\(ab\)(cd) 577 578 /\(a\)\1b/ 579 (*NUL)(a)\1b 580 aab 581 0: aab 582 1: a 583 \= Expect no match 584 a1b 585 No match 586 587 /how.to how\.to/ 588 (*NUL)how.to how\.to 589 how\nto how.to 590 0: how\x0ato how.to 591 \= Expect no match 592 how\x{0}to how.to 593 No match 594 595 /^how to \^how to/ 596 (*NUL)^how to \^how to 597 598 /^*abc/ 599 (*NUL)^\*abc 600 601 /*abc/ 602 (*NUL)\*abc 603 X*abcY 604 0: *abc 605 606 /**abc/ 607 (*NUL)\**abc 608 XabcY 609 0: abc 610 X*abcY 611 0: *abc 612 X**abcY 613 0: **abc 614 615 /*ab\(*cd\)/ 616 (*NUL)\*ab(\*cd) 617 618 /^b\(c^d\)\(^e^f\)/ 619 (*NUL)^b(c\^d)(^e\^f) 620 621 /a***b/ 622 (*NUL)a*b 623 624 # End of testinput24 625