X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fop%2Fregmesg.t;h=1b613ed351976e07c9777cdf5222d7038e080e3b;hb=0dd3f902b059d48560ea071c6510375fd9426efb;hp=fa22c0649bfbd254ba400af2151626afce934567;hpb=b45f050a81173020b0089d3ff02fa0276958461a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/op/regmesg.t b/t/op/regmesg.t index fa22c06..1b613ed 100644 --- a/t/op/regmesg.t +++ b/t/op/regmesg.t @@ -2,7 +2,7 @@ BEGIN { chdir 't' if -d 't'; - unshift @INC, '../lib'; + @INC = '../lib'; } my $debug = 1; @@ -13,123 +13,131 @@ my $debug = 1; ## arrays below. The {#} is a meta-marker -- it marks where the marker should ## go. -my $marker1 = " 'POSIX syntax [= =] is reserved for future extensions at {#} mark in regex m/[[=foo=]{#}]/', - - '/(?<= .*)/' => 'Variable length lookbehind not implemented at {#} mark in regex m/(?<= .*){#}/', + '/[[=foo=]]/' => 'POSIX syntax [= =] is reserved for future extensions in regex; marked by {#} in m/[[=foo=]{#}]/', - '/(?<= x{10000})/' => 'Lookbehind longer than 255 not implemented at {#} mark in regex m/(?<= x{10000}){#}/', + '/(?<= .*)/' => 'Variable length lookbehind not implemented in regex; marked by {#} in m/(?<= .*){#}/', - '/(?@)/' => 'Sequence (?@...) not implemented at {#} mark in regex m/(?@{#})/', + '/(?<= x{1000})/' => 'Lookbehind longer than 255 not implemented in regex; marked by {#} in m/(?<= x{1000}){#}/', - '/(?{ 1/' => 'Sequence (?{...}) not terminated or not {}-balanced at {#} mark in regex m/(?{{#} 1/', + '/(?@)/' => 'Sequence (?@...) not implemented in regex; marked by {#} in m/(?@{#})/', - '/(?(1x))/' => 'Switch condition not recognized at {#} mark in regex m/(?(1x{#}))/', + '/(?{ 1/' => 'Sequence (?{...}) not terminated or not {}-balanced in regex; marked by {#} in m/(?{{#} 1/', - '/(?(1)x|y|z)/' => 'Switch (?(condition)... contains too many branches at {#} mark in regex m/(?(1)x|y|{#}z)/', + '/(?(1x))/' => 'Switch condition not recognized in regex; marked by {#} in m/(?(1x{#}))/', - '/(?(x)y|x)/' => 'Unknown switch condition (?(x) at {#} mark in regex m/(?({#}x)y|x)/', + '/(?(1)x|y|z)/' => 'Switch (?(condition)... contains too many branches in regex; marked by {#} in m/(?(1)x|y|{#}z)/', - '/(?/' => 'Sequence (? incomplete at {#} mark in regex m/(?{#}/', + '/(?(x)y|x)/' => 'Unknown switch condition (?(x) in regex; marked by {#} in m/(?({#}x)y|x)/', - '/(?;x/' => 'Sequence (?;...) not recognized at {#} mark in regex m/(?;{#}x/', - '/(?<;x/' => 'Sequence (?<;...) not recognized at {#} mark in regex m/(?<;{#}x/', + '/(?/' => 'Sequence (? incomplete in regex; marked by {#} in m/(?{#}/', - '/((x)/' => 'Unmatched ( at {#} mark in regex m/({#}(x)/', + '/(?;x/' => 'Sequence (?;...) not recognized in regex; marked by {#} in m/(?;{#}x/', + '/(?<;x/' => 'Sequence (?<;...) not recognized in regex; marked by {#} in m/(?<;{#}x/', - '/x{99999}/' => 'Quantifier in {,} bigger than 32766 at {#} mark in regex m/x{{#}99999}/', + '/((x)/' => 'Unmatched ( in regex; marked by {#} in m/({#}(x)/', - '/x{3,1}/' => 'Can\'t do {n,m} with n > m at {#} mark in regex m/x{3,1}{#}/', + "/x{$inf_p1}/" => "Quantifier in {,} bigger than $inf_m1 in regex; marked by {#} in m/x{{#}$inf_p1}/", - '/x**/' => 'Nested quantifiers at {#} mark in regex m/x**{#}/', + '/x{3,1}/' => 'Can\'t do {n,m} with n > m in regex; marked by {#} in m/x{3,1}{#}/', - '/x[/' => 'Unmatched [ at {#} mark in regex m/x[{#}/', + '/x**/' => 'Nested quantifiers in regex; marked by {#} in m/x**{#}/', - '/*/', => 'Quantifier follows nothing at {#} mark in regex m/*{#}/', + '/x[/' => 'Unmatched [ in regex; marked by {#} in m/x[{#}/', - '/\p{x/' => 'Missing right brace on \p{} at {#} mark in regex m/\p{{#}x/', + '/*/', => 'Quantifier follows nothing in regex; marked by {#} in m/*{#}/', - 'use utf8; /[\p{x]/' => 'Missing right brace on \p{} at {#} mark in regex m/[\p{{#}x]/', + '/\p{x/' => 'Missing right brace on \p{} in regex; marked by {#} in m/\p{{#}x/', - '/(x)\2/' => 'Reference to nonexistent group at {#} mark in regex m/(x)\2{#}/', + '/[\p{x]/' => 'Missing right brace on \p{} in regex; marked by {#} in m/[\p{{#}x]/', - 'my $m = chr(92); $m =~ $m', => 'Trailing \ in regex m/\/', + '/(x)\2/' => 'Reference to nonexistent group in regex; marked by {#} in m/(x)\2{#}/', - '/\x{1/' => 'Missing right brace on \x{} at {#} mark in regex m/\x{{#}1/', + 'my $m = "\\\"; $m =~ $m', => 'Trailing \ in regex m/\/', - 'use utf8; /[\x{X]/' => 'Missing right brace on \x{} at {#} mark in regex m/[\x{{#}X]/', + '/\x{1/' => 'Missing right brace on \x{} in regex; marked by {#} in m/\x{{#}1/', - '/\x{x}/' => 'Can\'t use \x{} without \'use utf8\' declaration at {#} mark in regex m/\x{x}{#}/', + '/[\x{X]/' => 'Missing right brace on \x{} in regex; marked by {#} in m/[\x{{#}X]/', - '/[[:barf:]]/' => 'POSIX class [:barf:] unknown at {#} mark in regex m/[[:barf:]{#}]/', + '/[[:barf:]]/' => 'POSIX class [:barf:] unknown in regex; marked by {#} in m/[[:barf:]{#}]/', - '/[[=barf=]]/' => 'POSIX syntax [= =] is reserved for future extensions at {#} mark in regex m/[[=barf=]{#}]/', + '/[[=barf=]]/' => 'POSIX syntax [= =] is reserved for future extensions in regex; marked by {#} in m/[[=barf=]{#}]/', - '/[[.barf.]]/' => 'POSIX syntax [. .] is reserved for future extensions at {#} mark in regex m/[[.barf.]{#}]/', + '/[[.barf.]]/' => 'POSIX syntax [. .] is reserved for future extensions in regex; marked by {#} in m/[[.barf.]{#}]/', - '/[z-a]/' => 'Invalid [] range "z-a" at {#} mark in regex m/[z-a{#}]/', + '/[z-a]/' => 'Invalid [] range "z-a" in regex; marked by {#} in m/[z-a{#}]/', + + '/\p/' => 'Empty \p{} in regex; marked by {#} in m/\p{#}/', + + '/\P{}/' => 'Empty \P{} in regex; marked by {#} in m/\P{{#}}/', ); ## ## Key-value pairs of code/error of code that should have non-fatal warnings. ## @warning = ( - "m/(?p{ 'a' })/" => "(?p{}) is deprecated - use (??{}) at {#} mark in regex m/(?p{#}{ 'a' })/", + "m/(?p{ 'a' })/" => "(?p{}) is deprecated - use (??{}) in regex; marked by {#} in m/(?p{#}{ 'a' })/", - 'm/\b*/' => '\b* matches null string many times at {#} mark in regex m/\b*{#}/', + 'm/\b*/' => '\b* matches null string many times in regex; marked by {#} in m/\b*{#}/', - 'm/[:blank:]/' => 'POSIX syntax [: :] belongs inside character classes at {#} mark in regex m/[:blank:]{#}/', + 'm/[:blank:]/' => 'POSIX syntax [: :] belongs inside character classes in regex; marked by {#} in m/[:blank:]{#}/', - "m'[\\y]'" => 'Unrecognized escape \y in character class passed through at {#} mark in regex m/[\y{#}]/', + "m'[\\y]'" => 'Unrecognized escape \y in character class passed through in regex; marked by {#} in m/[\y{#}]/', - 'm/[a-\d]/' => 'False [] range "a-\d" at {#} mark in regex m/[a-\d{#}]/', - 'm/[\w-x]/' => 'False [] range "\w-" at {#} mark in regex m/[\w-{#}x]/', - "m'\\y'" => 'Unrecognized escape \y passed through at {#} mark in regex m/\y{#}/', + 'm/[a-\d]/' => 'False [] range "a-\d" in regex; marked by {#} in m/[a-\d{#}]/', + 'm/[\w-x]/' => 'False [] range "\w-" in regex; marked by {#} in m/[\w-{#}x]/', + 'm/[a-\pM]/' => 'False [] range "a-\pM" in regex; marked by {#} in m/[a-\pM{#}]/', + 'm/[\pM-x]/' => 'False [] range "\pM-" in regex; marked by {#} in m/[\pM-{#}x]/', + "m'\\y'" => 'Unrecognized escape \y passed through in regex; marked by {#} in m/\y{#}/', ); my $total = (@death + @warning)/2; +# utf8 is a noop on EBCDIC platforms, it is not fatal +my $Is_EBCDIC = (ord('A') == 193); +if ($Is_EBCDIC) { + my @utf8_death = grep(/utf8/, @death); + $total = $total - @utf8_death; +} + print "1..$total\n"; my $count = 0; while (@death) { - $count++; my $regex = shift @death; my $result = shift @death; + # skip the utf8 test on EBCDIC since they do not die + next if ($Is_EBCDIC && $regex =~ /utf8/); + $count++; - undef $@; $_ = "x"; eval $regex; if (not $@) { - if ($debug) { - print "oops, $regex didn't die\n" - } else { - print "not ok $count\n"; - } + print "# oops, $regex didn't die\nnot ok $count\n"; next; } chomp $@; - $@ =~ s/ at \(.*?\) line \d+\.$//; $result =~ s/{\#}/$marker1/; $result =~ s/{\#}/$marker2/; - if ($@ ne $result) { - if ($debug) { - print "For $regex, expected:\n $result\nGot:\n $@\n\n"; - } else { - print "not ok $count\n"; - } - next; + $result .= " at "; + if ($@ !~ /^\Q$result/) { + print "# For $regex, expected:\n# $result\n# Got:\n# $@\n#\nnot "; } - print "ok $count\n"; + print "ok $count - $regex\n"; } @@ -148,37 +156,31 @@ while (@warning) if ($@) { - if ($debug) { - print "oops, $regex died with:\n\t$@\n"; - } else { - print "not ok $count\n"; - } + print "# oops, $regex died with:\n#\t$@#\nnot ok $count\n"; next; } if (not $warning) { - if ($debug) { - print "oops, $regex didn't generate a warning\n"; - } else { - print "not ok $count\n"; - } + print "# oops, $regex didn't generate a warning\nnot ok $count\n"; next; } - chomp $warning; - $warning =~ s/ at \(.*?\) line \d+\.$//; $result =~ s/{\#}/$marker1/; $result =~ s/{\#}/$marker2/; - if ($warning ne $result) + $result .= " at "; + if ($warning !~ /^\Q$result/) { - if ($debug) { - print "For $regex, expected:\n $result\nGot:\n $warning\n\n"; - } else { - print "not ok $count\n"; - } + print <<"EOM"; +# For $regex, expected: +# $result +# Got: +# $warning +# +not ok $count +EOM next; } - print "ok $count\n"; + print "ok $count - $regex\n"; }