Blame t/utf8strict.t

Packit d0f5c2
#!../perl
Packit d0f5c2
our $DEBUG = @ARGV;
Packit d0f5c2
our (%ORD, %SEQ, $NTESTS);
Packit d0f5c2
BEGIN {
Packit d0f5c2
     if ($ENV{'PERL_CORE'}){
Packit d0f5c2
         chdir 't';
Packit d0f5c2
         unshift @INC, '../lib';
Packit d0f5c2
     }
Packit d0f5c2
     require Config; import Config;
Packit d0f5c2
     if ($Config{'extensions'} !~ /\bEncode\b/) {
Packit d0f5c2
         print "1..0 # Skip: Encode was not built\n";
Packit d0f5c2
     exit 0;
Packit d0f5c2
     }
Packit d0f5c2
     if ($] <= 5.008 and !$Config{perl_patchlevel}){
Packit d0f5c2
     print "1..0 # Skip: Perl 5.8.1 or later required\n";
Packit d0f5c2
     exit 0;
Packit d0f5c2
     }
Packit d0f5c2
     # http://smontagu.damowmow.com/utf8test.html
Packit d0f5c2
     # The numbers below, like 2.1.2 are test numbers on this web page
Packit d0f5c2
     %ORD = (
Packit d0f5c2
         0x00000080 => 0, # 2.1.2
Packit d0f5c2
         0x00000800 => 0, # 2.1.3
Packit d0f5c2
         0x00010000 => 0, # 2.1.4
Packit d0f5c2
         0x00200000 => 1, # 2.1.5
Packit d0f5c2
         0x00400000 => 1, # 2.1.6
Packit d0f5c2
         0x0000007F => 0, # 2.2.1 -- unmapped okay
Packit d0f5c2
         0x000007FF => 0, # 2.2.2
Packit d0f5c2
         0x0000FFFF => 1, # 2.2.3
Packit d0f5c2
         0x001FFFFF => 1, # 2.2.4
Packit d0f5c2
         0x03FFFFFF => 1, # 2.2.5
Packit d0f5c2
         0x7FFFFFFF => 1, # 2.2.6
Packit d0f5c2
         0x0000D800 => 1, # 5.1.1
Packit d0f5c2
         0x0000DB7F => 1, # 5.1.2
Packit d0f5c2
         0x0000D880 => 1, # 5.1.3
Packit d0f5c2
         0x0000DBFF => 1, # 5.1.4
Packit d0f5c2
         0x0000DC00 => 1, # 5.1.5
Packit d0f5c2
         0x0000DF80 => 1, # 5.1.6
Packit d0f5c2
         0x0000DFFF => 1, # 5.1.7
Packit d0f5c2
         # 5.2 "Paird UTF-16 surrogates skipped
Packit d0f5c2
         # because utf-8-strict raises exception at the first one
Packit d0f5c2
         0x0000FFFF => 1, # 5.3.1
Packit d0f5c2
        );
Packit d0f5c2
     $NTESTS +=  scalar keys %ORD;
Packit d0f5c2
     if (ord('A') == 193) {
Packit d0f5c2
	 %SEQ = (
Packit d0f5c2
		 qq/dd 64 73 73/    => 0, # 2.3.1
Packit d0f5c2
		 qq/dd 67 41 41/    => 0, # 2.3.2
Packit d0f5c2
		 qq/ee 42 73 73 71/ => 0, # 2.3.3
Packit d0f5c2
		 qq/f4 90 80 80/ => 1, # 2.3.4 -- out of range so NG
Packit d0f5c2
		 # EBCDIC TODO: "3 Malformed sequences"
Packit d0f5c2
		 # EBCDIC TODO: "4 Overlong sequences"
Packit d0f5c2
		 );
Packit d0f5c2
     } else {
Packit d0f5c2
	 %SEQ = (
Packit d0f5c2
		 qq/ed 9f bf/    => 0, # 2.3.1
Packit d0f5c2
		 qq/ee 80 80/    => 0, # 2.3.2
Packit d0f5c2
		 qq/f4 8f bf bd/ => 0, # 2.3.3
Packit d0f5c2
		 qq/f4 90 80 80/ => 1, # 2.3.4 -- out of range so NG
Packit d0f5c2
		 qq/80/          => 1,             # 3.1.1
Packit d0f5c2
		 qq/bf/          => 1,             # 3.1.2
Packit d0f5c2
		 qq/80 bf/       => 1,             # 3.1.3
Packit d0f5c2
		 qq/80 bf 80/    => 1,             # 3.1.4
Packit d0f5c2
		 qq/80 bf 80 bf/ => 1,             # 3.1.5
Packit d0f5c2
		 qq/80 bf 80 bf 80/ => 1,          # 3.1.6
Packit d0f5c2
		 qq/80 bf 80 bf 80 bf/ => 1,       # 3.1.7
Packit d0f5c2
		 qq/80 bf 80 bf 80 bf 80/ => 1,    # 3.1.8
Packit d0f5c2
		 qq/80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf/ => 1, # 3.1.9
Packit d0f5c2
		 qq/c0 20 c1 20 c2 20 c3 20 c4 20 c5 20 c6 20 c7 20 c8 20 c9 20 ca 20 cb 20 cc 20 cd 20 ce 20 cf 20 d0 20 d1 20 d2 20 d3 20 d4 20 d5 20 d6 20 d7 20 d8 20 d9 20 da 20 db 20 dc 20 dd 20 de 20 df 20/ => 1, # 3.2.1
Packit d0f5c2
		 qq/e0 20 e1 20 e2 20 e3 20 e4 20 e5 20 e6 20 e7 20 e8 20 e9 20 ea 20 eb 20 ec 20 ed 20 ee 20 ef 20/ => 1, # 3.2.2
Packit d0f5c2
		 qq/f0 20 f1 20 f2 20 f3 20 f4 20 f5 20 f6 20 f7 20/ => 1, # 3.2.3
Packit d0f5c2
		 qq/f8 20 f9 20 fa 20 fb 20/ => 1, # 3.2.4
Packit d0f5c2
		 qq/fc 20 fd 20/ => 1,             # 3.2.5
Packit d0f5c2
		 qq/c0/ => 1,                      # 3.3.1
Packit d0f5c2
		 qq/e0 80/ => 1,                   # 3.3.2
Packit d0f5c2
		 qq/f0 80 80/ => 1,                # 3.3.3
Packit d0f5c2
		 qq/f8 80 80 80/ => 1,             # 3.3.4
Packit d0f5c2
		 qq/fc 80 80 80 80/ => 1,          # 3.3.5
Packit d0f5c2
		 qq/df/ => 1,                      # 3.3.6
Packit d0f5c2
		 qq/ef bf/ => 1,                   # 3.3.7
Packit d0f5c2
		 qq/f7 bf bf/ => 1,                # 3.3.8
Packit d0f5c2
		 qq/fb bf bf bf/ => 1,             # 3.3.9
Packit d0f5c2
		 qq/fd bf bf bf bf/ => 1,          # 3.3.10
Packit d0f5c2
		 qq/c0 e0 80 f0 80 80 f8 80 80 80 fc 80 80 80 80 df ef bf f7 bf bf fb bf bf bf fd bf bf bf bf/ => 1, # 3.4.1
Packit d0f5c2
		 qq/fe/ => 1,                      # 3.5.1
Packit d0f5c2
		 qq/ff/ => 1,                      # 3.5.2
Packit d0f5c2
		 qq/fe fe ff ff/ => 1,             # 3.5.3
Packit d0f5c2
		 qq/c0 af/ => 1,                   # 4.1.1
Packit d0f5c2
		 qq/e0 80 af/ => 1,                # 4.1.2
Packit d0f5c2
		 qq/f0 80 80 af/ => 1,             # 4.1.3
Packit d0f5c2
		 qq/f8 80 80 80 af/ => 1,          # 4.1.4
Packit d0f5c2
		 qq/fc 80 80 80 80 af/ => 1,       # 4.1.5
Packit d0f5c2
		 qq/c1 bf/ => 1,                   # 4.2.1
Packit d0f5c2
		 qq/e0 9f bf/ => 1,                # 4.2.2
Packit d0f5c2
		 qq/f0 8f bf bf/ => 1,             # 4.2.3
Packit d0f5c2
		 qq/f8 87 bf bf bf/ => 1,          # 4.2.4
Packit d0f5c2
		 qq/fc 83 bf bf bf bf/ => 1,       # 4.2.5
Packit d0f5c2
		 qq/c0 80/ => 1,                   # 4.3.1
Packit d0f5c2
		 qq/e0 80 80/ => 1,                # 4.3.2
Packit d0f5c2
		 qq/f0 80 80 80/ => 1,             # 4.3.3
Packit d0f5c2
		 qq/f8 80 80 80 80/ => 1,          # 4.3.4
Packit d0f5c2
		 qq/fc 80 80 80 80 80/ => 1,       # 4.3.5
Packit d0f5c2
		 );
Packit d0f5c2
     }
Packit d0f5c2
     $NTESTS +=  scalar keys %SEQ;
Packit d0f5c2
}
Packit d0f5c2
use strict;
Packit d0f5c2
use Encode;
Packit d0f5c2
use utf8;
Packit d0f5c2
use Test::More tests => $NTESTS;
Packit d0f5c2
Packit d0f5c2
local($SIG{__WARN__}) = sub { $DEBUG and $@ and print STDERR $@ };
Packit d0f5c2
Packit d0f5c2
my $d = find_encoding("utf-8-strict");
Packit d0f5c2
for my $u (sort keys %ORD){
Packit d0f5c2
    my $c = chr($u);
Packit d0f5c2
    eval { $d->encode($c,1) };
Packit d0f5c2
    $DEBUG and $@ and warn $@;
Packit d0f5c2
    my $t = $@ ? 1 : 0;
Packit d0f5c2
    is($t, $ORD{$u}, sprintf "U+%04X", $u);
Packit d0f5c2
}
Packit d0f5c2
for my $s (sort keys %SEQ){
Packit d0f5c2
    my $o = pack "C*" => map {hex} split /\s+/, $s;
Packit d0f5c2
    eval { $d->decode($o,1) };
Packit d0f5c2
    $DEBUG and $@ and warn $@;
Packit d0f5c2
    my $t = $@ ? 1 : 0;
Packit d0f5c2
    is($t, $SEQ{$s}, "sequence: $s");
Packit d0f5c2
}
Packit d0f5c2
Packit d0f5c2
__END__
Packit d0f5c2
Packit d0f5c2