Move t/lib/warnings/regcomp to t/re/reg_mesg.t
authorKarl Williamson <public@khwilliamson.com>
Tue, 22 Jan 2013 18:40:54 +0000 (11:40 -0700)
committerKarl Williamson <public@khwilliamson.com>
Thu, 24 Jan 2013 02:35:33 +0000 (19:35 -0700)
reg_mesg.t has better infrastructure to more easily add and maintain
these warnings.

t/lib/warnings/regcomp
t/re/reg_mesg.t

index 340a366..19b6b06 100644 (file)
@@ -1,281 +1,3 @@
-  XXX Note that t/re/reg_mesg.t might be a better place for these
-
-  regcomp.c    AOK
-
-  Quantifier unexpected on zero-length expression [S_study_chunk] 
-
-  Useless (%s%c) - %suse /%c modifier [S_reg] 
-  Useless (%sc) - %suse /gc modifier [S_reg] 
-
-
-
-  Strange *+?{} on zero-length expression      [S_study_chunk]
-       /(?=a)?/
-
-  %.*s matches null string many times          [S_regpiece]
-       $a = "ABC123" ; $a =~ /(?=a)*/'
-
-  /%.127s/: Unrecognized escape \\%c passed through    [S_regatom] 
-       $x = '\m' ; /$x/
-
-  POSIX syntax [%c %c] belongs inside character classes        [S_regclass] 
-
-
-  Character class [:%.*s:] unknown     [S_regpposixcc]
-
-  Character class syntax [%c %c] belongs inside character classes [S_regclass] 
-  
-  /%.127s/: false [] range \"%*.*s\" in regexp [S_regclass]
-
-  /%.127s/: false [] range \"%*.*s\" in regexp [S_regclassutf8]
-
-  /%.127s/: Unrecognized escape \\%c in character class passed through"        [S_regclass] 
-
-  /%.127s/: Unrecognized escape \\%c in character class passed through"        [S_regclassutf8] 
-
-  False [] range \"%*.*s\" [S_regclass]
+  regcomp.c    These tests have been moved to t/re/reg_mesg.t
 
 __END__
-# regcomp.c [S_regpiece]
-use warnings 'regexp' ;
-my $a = "ABC123" ; 
-$a =~ /(?=a)*/ ;
-no warnings 'regexp' ;
-$a =~ /(?=a)*/ ;
-EXPECT
-(?=a)* matches null string many times in regex; marked by <-- HERE in m/(?=a)* <-- HERE / at - line 4.
-########
-# regcomp.c [S_regatom]
-$x = '\m' ;
-use warnings 'regexp' ;
-$a =~ /a$x/ ;
-no warnings 'regexp' ;
-$a =~ /a$x/ ;
-EXPECT
-Unrecognized escape \m passed through in regex; marked by <-- HERE in m/a\m <-- HERE / at - line 4.
-########
-# regcomp.c [S_regatom]
-# The \q should warn, the \_ should NOT warn.
-use warnings qw(regexp deprecated);
-"foo" =~ /\q/;
-"foo" =~ /\q{/;
-"foo" =~ /a\b{cde/;
-"foo" =~ /a\B{cde/;
-"bar" =~ /\_/;
-no warnings qw(regexp deprecated);
-"foo" =~ /\q/;
-"foo" =~ /\q{/;
-"foo" =~ /a\b{cde/;
-"foo" =~ /a\B{cde/;
-"bar" =~ /\_/;
-EXPECT
-Unrecognized escape \q passed through in regex; marked by <-- HERE in m/\q <-- HERE / at - line 4.
-Unrecognized escape \q{ passed through in regex; marked by <-- HERE in m/\q{ <-- HERE / at - line 5.
-"\b{" is deprecated; use "\b\{" instead in regex; marked by <-- HERE in m/a\ <-- HERE b{cde/ at - line 6.
-"\B{" is deprecated; use "\B\{" instead in regex; marked by <-- HERE in m/a\ <-- HERE B{cde/ at - line 7.
-########
-# regcomp.c [S_regpposixcc S_regclass]
-#
-use warnings 'regexp' ;
-$_ = "" ;
-/[:alpha:]/;
-/[:zog:]/;
-no warnings 'regexp' ;
-/[:alpha:]/;
-/[:zog:]/;
-EXPECT
-POSIX syntax [: :] belongs inside character classes in regex; marked by <-- HERE in m/[:alpha:] <-- HERE / at - line 5.
-POSIX syntax [: :] belongs inside character classes in regex; marked by <-- HERE in m/[:zog:] <-- HERE / at - line 6.
-########
-# regcomp.c [S_regclass]
-#
-use warnings 'regexp' ;
-$_ = "" ;
-/[.zog.]/;
-no warnings 'regexp' ;
-/[.zog.]/;
-EXPECT
-POSIX syntax [. .] belongs inside character classes in regex; marked by <-- HERE in m/[.zog.] <-- HERE / at - line 5.
-########
-# regcomp.c [S_regclass]
-$_ = "";
-use warnings 'regexp' ;
-/[a-b]/;
-/[a-\d]/;
-/[\d-b]/;
-/[\s-\d]/;
-/[\d-\s]/;
-/[a-[:digit:]]/;
-/[[:digit:]-b]/;
-/[[:alpha:]-[:digit:]]/;
-/[[:digit:]-[:alpha:]]/;
-no warnings 'regexp' ;
-/[a-b]/;
-/[a-\d]/;
-/[\d-b]/;
-/[\s-\d]/;
-/[\d-\s]/;
-/[a-[:digit:]]/;
-/[[:digit:]-b]/;
-/[[:alpha:]-[:digit:]]/;
-/[[:digit:]-[:alpha:]]/;
-EXPECT
-False [] range "a-\d" in regex; marked by <-- HERE in m/[a-\d <-- HERE ]/ at - line 5.
-False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE b]/ at - line 6.
-False [] range "\s-" in regex; marked by <-- HERE in m/[\s- <-- HERE \d]/ at - line 7.
-False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE \s]/ at - line 8.
-False [] range "a-[:digit:]" in regex; marked by <-- HERE in m/[a-[:digit:] <-- HERE ]/ at - line 9.
-False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE b]/ at - line 10.
-False [] range "[:alpha:]-" in regex; marked by <-- HERE in m/[[:alpha:]- <-- HERE [:digit:]]/ at - line 11.
-False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE [:alpha:]]/ at - line 12.
-########
-# regcomp.c [S_regclassutf8]
-BEGIN {
-    if (ord("\t") == 5) {
-        print "SKIPPED\n# ebcdic regular expression ranges differ.";
-        exit 0;
-    }
-}
-use utf8;
-$_ = "";
-use warnings 'regexp' ;
-/[a-b]/;
-/[a-\d]/;
-/[\d-b]/;
-/[\s-\d]/;
-/[\d-\s]/;
-/[a-[:digit:]]/;
-/[[:digit:]-b]/;
-/[[:alpha:]-[:digit:]]/;
-/[[:digit:]-[:alpha:]]/;
-no warnings 'regexp' ;
-/[a-b]/;
-/[a-\d]/;
-/[\d-b]/;
-/[\s-\d]/;
-/[\d-\s]/;
-/[a-[:digit:]]/;
-/[[:digit:]-b]/;
-/[[:alpha:]-[:digit:]]/;
-/[[:digit:]-[:alpha:]]/;
-EXPECT
-False [] range "a-\d" in regex; marked by <-- HERE in m/[a-\d <-- HERE ]/ at - line 12.
-False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE b]/ at - line 13.
-False [] range "\s-" in regex; marked by <-- HERE in m/[\s- <-- HERE \d]/ at - line 14.
-False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE \s]/ at - line 15.
-False [] range "a-[:digit:]" in regex; marked by <-- HERE in m/[a-[:digit:] <-- HERE ]/ at - line 16.
-False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE b]/ at - line 17.
-False [] range "[:alpha:]-" in regex; marked by <-- HERE in m/[[:alpha:]- <-- HERE [:digit:]]/ at - line 18.
-False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE [:alpha:]]/ at - line 19.
-########
-# regcomp.c [S_regclass S_regclassutf8]
-use warnings 'regexp' ;
-$a =~ /[a\zb]/ ;
-no warnings 'regexp' ;
-$a =~ /[a\zb]/ ;
-EXPECT
-Unrecognized escape \z in character class passed through in regex; marked by <-- HERE in m/[a\z <-- HERE b]/ at - line 3.
-
-########
-# regcomp.c [S_reg]
-use warnings 'regexp' ;
-$a = qr/(?c)/;
-$a = qr/(?-c)/;
-$a = qr/(?g)/;
-$a = qr/(?-g)/;
-$a = qr/(?o)/;
-$a = qr/(?-o)/;
-$a = qr/(?g-o)/;
-$a = qr/(?g-c)/;
-$a = qr/(?o-cg)/;  # (?c) means (?g) error won't be thrown
-$a = qr/(?ogc)/;
-no warnings 'regexp' ;
-$a = qr/(?c)/;
-$a = qr/(?-c)/;
-$a = qr/(?g)/;
-$a = qr/(?-g)/;
-$a = qr/(?o)/;
-$a = qr/(?-o)/;
-$a = qr/(?g-o)/;
-$a = qr/(?g-c)/;
-$a = qr/(?o-cg)/;  # (?c) means (?g) error won't be thrown
-$a = qr/(?ogc)/;
-#EXPECT
-EXPECT
-Useless (?c) - use /gc modifier in regex; marked by <-- HERE in m/(?c <-- HERE )/ at - line 3.
-Useless (?-c) - don't use /gc modifier in regex; marked by <-- HERE in m/(?-c <-- HERE )/ at - line 4.
-Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?g <-- HERE )/ at - line 5.
-Useless (?-g) - don't use /g modifier in regex; marked by <-- HERE in m/(?-g <-- HERE )/ at - line 6.
-Useless (?o) - use /o modifier in regex; marked by <-- HERE in m/(?o <-- HERE )/ at - line 7.
-Useless (?-o) - don't use /o modifier in regex; marked by <-- HERE in m/(?-o <-- HERE )/ at - line 8.
-Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?g <-- HERE -o)/ at - line 9.
-Useless (?-o) - don't use /o modifier in regex; marked by <-- HERE in m/(?g-o <-- HERE )/ at - line 9.
-Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?g <-- HERE -c)/ at - line 10.
-Useless (?-c) - don't use /gc modifier in regex; marked by <-- HERE in m/(?g-c <-- HERE )/ at - line 10.
-Useless (?o) - use /o modifier in regex; marked by <-- HERE in m/(?o <-- HERE -cg)/ at - line 11.
-Useless (?-c) - don't use /gc modifier in regex; marked by <-- HERE in m/(?o-c <-- HERE g)/ at - line 11.
-Useless (?o) - use /o modifier in regex; marked by <-- HERE in m/(?o <-- HERE gc)/ at - line 12.
-Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?og <-- HERE c)/ at - line 12.
-Useless (?c) - use /gc modifier in regex; marked by <-- HERE in m/(?ogc <-- HERE )/ at - line 12.
-########
-# regcomp.c [S_regatom]
-$a = qr/\o{/;
-EXPECT
-Missing right brace on \o{ in regex; marked by <-- HERE in m/\o{ <-- HERE / at - line 2.
-########
-# regcomp.c [S_regatom]
-$a = qr/\o/;
-EXPECT
-Missing braces on \o{} in regex; marked by <-- HERE in m/\o <-- HERE / at - line 2.
-########
-# regcomp.c [S_regatom]
-$a = qr/\o{}/;
-EXPECT
-Number with no digits in regex; marked by <-- HERE in m/\o{} <-- HERE / at - line 2.
-########
-# regcomp.c [S_regclass]
-$a = qr/[\o{]/;
-EXPECT
-Missing right brace on \o{ in regex; marked by <-- HERE in m/[\o{ <-- HERE ]/ at - line 2.
-########
-# regcomp.c [S_regclass]
-$a = qr/[\o]/;
-EXPECT
-Missing braces on \o{} in regex; marked by <-- HERE in m/[\o <-- HERE ]/ at - line 2.
-########
-# regcomp.c [S_regclass]
-$a = qr/[\o{}]/;
-EXPECT
-Number with no digits in regex; marked by <-- HERE in m/[\o{} <-- HERE ]/ at - line 2.
-########
-# regcomp.c [S_regclass]
-use warnings 'regexp' ;
-$a = qr/[\8\9]/;
-$a = qr/[\_\0]/; # Should have no warnings on this and the remainder of this test
-$a = qr/[\07]/;
-$a = qr/[\006]/;
-$a = qr/[\0005]/;
-no warnings 'regexp' ;
-$a = qr/[\8\9]/;
-EXPECT
-Unrecognized escape \8 in character class passed through in regex; marked by <-- HERE in m/[\8 <-- HERE \9]/ at - line 3.
-Unrecognized escape \9 in character class passed through in regex; marked by <-- HERE in m/[\8\9 <-- HERE ]/ at - line 3.
-########
-# regcomp.c [Perl_re_compile]
-$a = qr/(?^-i:foo)/;
-EXPECT
-Sequence (?^-...) not recognized in regex; marked by <-- HERE in m/(?^- <-- HERE i:foo)/ at - line 2.
-########
-# regcomp.c [S_regatom]
-use warnings 'regexp' ;
-$a = qr/\87/;
-$a = qr/a\87/;
-$a = qr/a\97/;
-no warnings 'regexp' ;
-$a = qr/\87/;
-$a = qr/a\87/;
-$a = qr/a\97/;
-EXPECT
-Unrecognized escape \8 passed through in regex; marked by <-- HERE in m/\8 <-- HERE 7/ at - line 3.
-Unrecognized escape \8 passed through in regex; marked by <-- HERE in m/a\8 <-- HERE 7/ at - line 4.
-Unrecognized escape \9 passed through in regex; marked by <-- HERE in m/a\9 <-- HERE 7/ at - line 5.
index 6139758..536c175 100644 (file)
@@ -165,6 +165,13 @@ my @death =
  '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/(?[[\N{LATIN CAPITAL LETTER A WITH MACRON AND GRAVE}]])/' => '\N{} in character class restricted to one character in regex; marked by {#} in m/(?[[\N{U+100.300{#}}]])/',
+ 'm/\o{/' => 'Missing right brace on \o{ in regex; marked by {#} in m/\o{{#}/',
+ 'm/\o/' => 'Missing braces on \o{} in regex; marked by {#} in m/\o{#}/',
+ 'm/\o{}/' => 'Number with no digits in regex; marked by {#} in m/\o{}{#}/',
+ 'm/[\o{]/' => 'Missing right brace on \o{ in regex; marked by {#} in m/[\o{{#}]/',
+ 'm/[\o]/' => 'Missing braces on \o{} in regex; marked by {#} in m/[\o{#}]/',
+ 'm/[\o{}]/' => 'Number with no digits in regex; marked by {#} in m/[\o{}{#}]/',
+ 'm/(?^-i:foo)/' => 'Sequence (?^-...) not recognized in regex; marked by {#} in m/(?^-{#}i:foo)/',
 );
 # Tests involving a user-defined charnames translator are in pat_advanced.t
 
@@ -191,12 +198,66 @@ my @warning = (
     '/\018/' => '\'\018\' resolved to \'\o{1}8\' in regex; marked by {#} in m/\018{#}/',
     '/[\08]/' => '\'\08\' resolved to \'\o{0}8\' in regex; marked by {#} in m/[\08{#}]/',
     '/[\018]/' => '\'\018\' resolved to \'\o{1}8\' in regex; marked by {#} in m/[\018{#}]/',
+    '/\87/' => 'Unrecognized escape \8 passed through in regex; marked by {#} in m/\8{#}7/',
+    '/a\87/' => 'Unrecognized escape \8 passed through in regex; marked by {#} in m/a\8{#}7/',
+    '/a\97/' => 'Unrecognized escape \9 passed through in regex; marked by {#} in m/a\9{#}7/',
+    '/(?=a)*/' => '(?=a)* matches null string many times in regex; marked by {#} in m/(?=a)*{#}/',
+    'my $x = \'\m\'; qr/a$x/' => 'Unrecognized escape \m passed through in regex; marked by {#} in m/a\m{#}/',
+    '/\q/' => 'Unrecognized escape \q passed through in regex; marked by {#} in m/\q{#}/',
+    '/\q{/' => 'Unrecognized escape \q{ passed through in regex; marked by {#} in m/\q{{#}/',
+    '/(?=a){1,3}/' => 'Quantifier unexpected on zero-length expression in regex; marked by {#} in m/(?=a){1,3}{#}/',
+    '/\_/' => "",
+    '/[\_\0]/' => "",
+    '/[\07]/' => "",
+    '/[\006]/' => "",
+    '/[\0005]/' => "",
+    '/[\8\9]/' => ['Unrecognized escape \8 in character class passed through in regex; marked by {#} in m/[\8{#}\9]/',
+                   'Unrecognized escape \9 in character class passed through in regex; marked by {#} in m/[\8\9{#}]/',
+                  ],
+    '/[:alpha:]/' => 'POSIX syntax [: :] belongs inside character classes in regex; marked by {#} in m/[:alpha:]{#}/',
+    '/[:zog:]/' => 'POSIX syntax [: :] belongs inside character classes in regex; marked by {#} in m/[:zog:]{#}/',
+    '/[.zog.]/' => 'POSIX syntax [. .] belongs inside character classes in regex; marked by {#} in m/[.zog.]{#}/',
+    '/[a-b]/' => "",
+    '/[a-\d]/' => 'False [] range "a-\d" in regex; marked by {#} in m/[a-\d{#}]/',
+    '/[\d-b]/' => 'False [] range "\d-" in regex; marked by {#} in m/[\d-{#}b]/',
+    '/[\s-\d]/' => 'False [] range "\s-" in regex; marked by {#} in m/[\s-{#}\d]/',
+    '/[\d-\s]/' => 'False [] range "\d-" in regex; marked by {#} in m/[\d-{#}\s]/',
+    '/[a-[:digit:]]/' => 'False [] range "a-[:digit:]" in regex; marked by {#} in m/[a-[:digit:]{#}]/',
+    '/[[:digit:]-b]/' => 'False [] range "[:digit:]-" in regex; marked by {#} in m/[[:digit:]-{#}b]/',
+    '/[[:alpha:]-[:digit:]]/' => 'False [] range "[:alpha:]-" in regex; marked by {#} in m/[[:alpha:]-{#}[:digit:]]/',
+    '/[[:digit:]-[:alpha:]]/' => 'False [] range "[:digit:]-" in regex; marked by {#} in m/[[:digit:]-{#}[:alpha:]]/',
+    '/[a\zb]/' => 'Unrecognized escape \z in character class passed through in regex; marked by {#} in m/[a\z{#}b]/',
+    '/(?c)/' => 'Useless (?c) - use /gc modifier in regex; marked by {#} in m/(?c{#})/',
+    '/(?-c)/' => 'Useless (?-c) - don\'t use /gc modifier in regex; marked by {#} in m/(?-c{#})/',
+    '/(?g)/' => 'Useless (?g) - use /g modifier in regex; marked by {#} in m/(?g{#})/',
+    '/(?-g)/' => 'Useless (?-g) - don\'t use /g modifier in regex; marked by {#} in m/(?-g{#})/',
+    '/(?o)/' => 'Useless (?o) - use /o modifier in regex; marked by {#} in m/(?o{#})/',
+    '/(?-o)/' => 'Useless (?-o) - don\'t use /o modifier in regex; marked by {#} in m/(?-o{#})/',
+    '/(?g-o)/' => [ 'Useless (?g) - use /g modifier in regex; marked by {#} in m/(?g{#}-o)/',
+                    'Useless (?-o) - don\'t use /o modifier in regex; marked by {#} in m/(?g-o{#})/',
+                  ],
+    '/(?g-c)/' => [ 'Useless (?g) - use /g modifier in regex; marked by {#} in m/(?g{#}-c)/',
+                    'Useless (?-c) - don\'t use /gc modifier in regex; marked by {#} in m/(?g-c{#})/',
+                  ],
+      # (?c) means (?g) error won't be thrown
+     '/(?o-cg)/' => [ 'Useless (?o) - use /o modifier in regex; marked by {#} in m/(?o{#}-cg)/',
+                      'Useless (?-c) - don\'t use /gc modifier in regex; marked by {#} in m/(?o-c{#}g)/',
+                    ],
+    '/(?ogc)/' => [ 'Useless (?o) - use /o modifier in regex; marked by {#} in m/(?o{#}gc)/',
+                    'Useless (?g) - use /g modifier in regex; marked by {#} in m/(?og{#}c)/',
+                    'Useless (?c) - use /gc modifier in regex; marked by {#} in m/(?ogc{#})/',
+                  ],
 );
 
 my @experimental_regex_sets = (
     '/(?[ \t ])/' => 'The regex_sets feature is experimental in regex; marked by {#} in m/(?[{#} \t ])/',
 );
 
+my @deprecated = (
+    '/a\b{cde/' => '"\b{" is deprecated; use "\b\{" instead in regex; marked by {#} in m/a\{#}b{cde/',
+    '/a\B{cde/' => '"\B{" is deprecated; use "\B\{" instead in regex; marked by {#} in m/a\{#}B{cde/',
+);
+
 while (my ($regex, $expect) = splice @death, 0, 2) {
     my $expect = fixup_expect($expect);
     no warnings 'experimental::regex_sets';
@@ -210,10 +271,12 @@ while (my ($regex, $expect) = splice @death, 0, 2) {
               }, undef, "... and died without any other warnings");
 }
 
-foreach my $ref (\@warning, \@experimental_regex_sets) {
+foreach my $ref (\@warning, \@experimental_regex_sets, \@deprecated) {
     my $warning_type = ($ref == \@warning)
                        ? 'regexp'
-                       : 'experimental::regex_sets';
+                       : ($ref == \@deprecated)
+                         ? 'deprecated'
+                         : 'experimental::regex_sets';
     while (my ($regex, $expect) = splice @$ref, 0, 2) {
         my @expect = fixup_expect($expect);
         {