Elliott Hughes | 9bc971b | 2018-07-27 13:23:14 -0700 | [diff] [blame] | 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 |