APItest/t/utf8_warn_base.pl: Make hash element optional
authorKarl Williamson <khw@cpan.org>
Fri, 30 Jun 2017 17:55:18 +0000 (11:55 -0600)
committerKarl Williamson <khw@cpan.org>
Thu, 13 Jul 2017 03:14:24 +0000 (21:14 -0600)
This element of the hash gives how many bytes are needed in an
incomplete sequence in order to classify the full sequence.  In some
cases every code point in the category has this be the same number, and
it can be cleaner to not manually specify the number.

ext/XS-APItest/t/utf8_warn_base.pl

index d469038..a657231 100644 (file)
@@ -50,19 +50,16 @@ my @tests = (
         (isASCII) ? "\xed\xa0\x80" : I8_to_native("\xf1\xb6\xa0\xa0"),
         $::UTF8_DISALLOW_SURROGATE,
         'surrogate', 0xD800,
-        2,
     ],
     [ "a middle surrogate",
         (isASCII) ? "\xed\xa4\x8d" : I8_to_native("\xf1\xb6\xa8\xad"),
         $::UTF8_DISALLOW_SURROGATE,
         'surrogate', 0xD90D,
-        2,
     ],
     [ "highest surrogate",
         (isASCII) ? "\xed\xbf\xbf" : I8_to_native("\xf1\xb7\xbf\xbf"),
         $::UTF8_DISALLOW_SURROGATE,
         'surrogate', 0xDFFF,
-        2,
     ],
     [ "first non_unicode",
         (isASCII) ? "\xf4\x90\x80\x80" : I8_to_native("\xf9\xa2\xa0\xa0\xa0"),
@@ -81,223 +78,186 @@ my @tests = (
         (isASCII) ? "\xef\xb7\x90" : I8_to_native("\xf1\xbf\xae\xb0"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xFDD0,
-        (isASCII) ? 3 : 4,
     ],
     [ "a mid non-character code point of the 32 consecutive ones",
         (isASCII) ? "\xef\xb7\xa0" : I8_to_native("\xf1\xbf\xaf\xa0"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xFDE0,
-        (isASCII) ? 3 : 4,
     ],
     [ "final of 32 consecutive non-character code points",
         (isASCII) ? "\xef\xb7\xaf" : I8_to_native("\xf1\xbf\xaf\xaf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xFDEF,
-        (isASCII) ? 3 : 4,
     ],
     [ "non-character code point U+FFFE",
         (isASCII) ? "\xef\xbf\xbe" : I8_to_native("\xf1\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xFFFE,
-        (isASCII) ? 3 : 4,
     ],
     [ "non-character code point U+FFFF",
         (isASCII) ? "\xef\xbf\xbf" : I8_to_native("\xf1\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xFFFF,
-        (isASCII) ? 3 : 4,
     ],
     [ "non-character code point U+1FFFE",
         (isASCII) ? "\xf0\x9f\xbf\xbe" : I8_to_native("\xf3\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x1FFFE,
-        4,
     ],
     [ "non-character code point U+1FFFF",
         (isASCII) ? "\xf0\x9f\xbf\xbf" : I8_to_native("\xf3\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x1FFFF,
-        4,
     ],
     [ "non-character code point U+2FFFE",
         (isASCII) ? "\xf0\xaf\xbf\xbe" : I8_to_native("\xf5\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x2FFFE,
-        4,
     ],
     [ "non-character code point U+2FFFF",
         (isASCII) ? "\xf0\xaf\xbf\xbf" : I8_to_native("\xf5\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x2FFFF,
-        4,
     ],
     [ "non-character code point U+3FFFE",
         (isASCII) ? "\xf0\xbf\xbf\xbe" : I8_to_native("\xf7\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x3FFFE,
-        4,
     ],
     [ "non-character code point U+3FFFF",
         (isASCII) ? "\xf0\xbf\xbf\xbf" : I8_to_native("\xf7\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x3FFFF,
-        4,
     ],
     [ "non-character code point U+4FFFE",
         (isASCII) ? "\xf1\x8f\xbf\xbe" : I8_to_native("\xf8\xa9\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x4FFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+4FFFF",
         (isASCII) ? "\xf1\x8f\xbf\xbf" : I8_to_native("\xf8\xa9\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x4FFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+5FFFE",
         (isASCII) ? "\xf1\x9f\xbf\xbe" : I8_to_native("\xf8\xab\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x5FFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+5FFFF",
         (isASCII) ? "\xf1\x9f\xbf\xbf" : I8_to_native("\xf8\xab\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x5FFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+6FFFE",
         (isASCII) ? "\xf1\xaf\xbf\xbe" : I8_to_native("\xf8\xad\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x6FFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+6FFFF",
         (isASCII) ? "\xf1\xaf\xbf\xbf" : I8_to_native("\xf8\xad\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x6FFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+7FFFE",
         (isASCII) ? "\xf1\xbf\xbf\xbe" : I8_to_native("\xf8\xaf\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x7FFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+7FFFF",
         (isASCII) ? "\xf1\xbf\xbf\xbf" : I8_to_native("\xf8\xaf\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x7FFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+8FFFE",
         (isASCII) ? "\xf2\x8f\xbf\xbe" : I8_to_native("\xf8\xb1\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x8FFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+8FFFF",
         (isASCII) ? "\xf2\x8f\xbf\xbf" : I8_to_native("\xf8\xb1\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x8FFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+9FFFE",
         (isASCII) ? "\xf2\x9f\xbf\xbe" : I8_to_native("\xf8\xb3\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x9FFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+9FFFF",
         (isASCII) ? "\xf2\x9f\xbf\xbf" : I8_to_native("\xf8\xb3\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x9FFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+AFFFE",
         (isASCII) ? "\xf2\xaf\xbf\xbe" : I8_to_native("\xf8\xb5\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xAFFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+AFFFF",
         (isASCII) ? "\xf2\xaf\xbf\xbf" : I8_to_native("\xf8\xb5\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xAFFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+BFFFE",
         (isASCII) ? "\xf2\xbf\xbf\xbe" : I8_to_native("\xf8\xb7\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xBFFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+BFFFF",
         (isASCII) ? "\xf2\xbf\xbf\xbf" : I8_to_native("\xf8\xb7\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xBFFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+CFFFE",
         (isASCII) ? "\xf3\x8f\xbf\xbe" : I8_to_native("\xf8\xb9\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xCFFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+CFFFF",
         (isASCII) ? "\xf3\x8f\xbf\xbf" : I8_to_native("\xf8\xb9\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xCFFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+DFFFE",
         (isASCII) ? "\xf3\x9f\xbf\xbe" : I8_to_native("\xf8\xbb\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xDFFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+DFFFF",
         (isASCII) ? "\xf3\x9f\xbf\xbf" : I8_to_native("\xf8\xbb\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xDFFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+EFFFE",
         (isASCII) ? "\xf3\xaf\xbf\xbe" : I8_to_native("\xf8\xbd\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xEFFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+EFFFF",
         (isASCII) ? "\xf3\xaf\xbf\xbf" : I8_to_native("\xf8\xbd\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xEFFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+FFFFE",
         (isASCII) ? "\xf3\xbf\xbf\xbe" : I8_to_native("\xf8\xbf\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xFFFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+FFFFF",
         (isASCII) ? "\xf3\xbf\xbf\xbf" : I8_to_native("\xf8\xbf\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0xFFFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+10FFFE",
         (isASCII) ? "\xf4\x8f\xbf\xbe" : I8_to_native("\xf9\xa1\xbf\xbf\xbe"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x10FFFE,
-        (isASCII) ? 4 : 5,
     ],
     [ "non-character code point U+10FFFF",
         (isASCII) ? "\xf4\x8f\xbf\xbf" : I8_to_native("\xf9\xa1\xbf\xbf\xbf"),
         $::UTF8_DISALLOW_NONCHAR,
         'nonchar', 0x10FFFF,
-        (isASCII) ? 4 : 5,
     ],
     [ "requires at least 32 bits",
         (isASCII)
@@ -457,11 +417,13 @@ foreach my $test (@tests) {
     }
     elsif ($allowed_uv >= 0xD800 && $allowed_uv <= 0xDFFF) {
         $message = qr/surrogate/;
+        $needed_to_discern_len = 2 unless defined $needed_to_discern_len;
     }
     elsif (   ($allowed_uv >= 0xFDD0 && $allowed_uv <= 0xFDEF)
            || ($allowed_uv & 0xFFFE) == 0xFFFE)
     {
         $message = qr/Unicode non-character.*is not recommended for open interchange/;
+        $needed_to_discern_len = $length unless defined $needed_to_discern_len;
     }
     elsif ($will_overflow) {
         $message = qr/overflows/;
@@ -470,6 +432,9 @@ foreach my $test (@tests) {
         die "Can't figure out what type of warning to test for $testname"
     }
 
+    die 'Didn\'t set $needed_to_discern_len for ' . $testname
+                                        unless defined $needed_to_discern_len;
+
     {
         use warnings;
         undef @warnings;