Integrate perlio:
[p5sagit/p5-mst-13.2.git] / ext / Encode / t / fallback.t
CommitLineData
85982a32 1BEGIN {
2 if ($ENV{'PERL_CORE'}){
3 chdir 't';
4 unshift @INC, '../lib';
5 }
6 require Config; import Config;
7 if ($Config{'extensions'} !~ /\bEncode\b/) {
8 print "1..0 # Skip: Encode was not built\n";
9 exit 0;
10 }
11 $| = 1;
12}
13
14use strict;
15#use Test::More qw(no_plan);
af1f55d9 16use Test::More tests => 19;
85982a32 17use Encode q(:all);
18
19
20my $original = '';
21my $nofallback = '';
af1f55d9 22my ($fallenback, $quiet, $perlqq, $htmlcref, $xmlcref);
85982a32 23for my $i (0x20..0x7e){
24 $original .= chr($i);
25}
af1f55d9 26$fallenback = $quiet =
27$perlqq = $htmlcref = $xmlcref = $nofallback = $original;
85982a32 28
29my $residue = '';
30for my $i (0x80..0xff){
31 $original .= chr($i);
32 $residue .= chr($i);
33 $fallenback .= '?';
34 $perlqq .= sprintf("\\x{%04x}", $i);
af1f55d9 35 $htmlcref .= sprintf("&#%d;", $i);
36 $xmlcref .= sprintf("&#x%x;", $i);
85982a32 37}
38utf8::upgrade($original);
39my $meth = find_encoding('ascii');
40
41my $src = $original;
42my $dst = $meth->encode($src, FB_DEFAULT);
43is($dst, $fallenback, "FB_DEFAULT");
44is($src, $original, "FB_DEFAULT residue");
45
46$src = $original;
47eval{ $dst = $meth->encode($src, FB_CROAK) };
48like($@, qr/does not map to ascii/o, "FB_CROAK");
49is($src, $original, "FB_CROAK residue");
50
51$src = $original;
52eval{ $dst = $meth->encode($src, FB_CROAK) };
53like($@, qr/does not map to ascii/o, "FB_CROAK");
54is($src, $original, "FB_CROAK residue");
55
56
57$src = $nofallback;
58eval{ $dst = $meth->encode($src, FB_CROAK) };
59is($@, '', "FB_CROAK on success");
60is($src, '', "FB_CROAK on success residue");
61
62$src = $original;
63$dst = $meth->encode($src, FB_QUIET);
64is($dst, $quiet, "FB_QUIET");
65is($src, $residue, "FB_QUIET residue");
66
67{
68 my $message;
69 local $SIG{__WARN__} = sub { $message = $_[0] };
70 $src = $original;
71 $dst = $meth->encode($src, FB_WARN);
72 is($dst, $quiet, "FB_WARN");
73 is($src, $residue, "FB_WARN residue");
74 like($message, qr/does not map to ascii/o, "FB_WARN message");
75}
76
77$src = $original;
78$dst = $meth->encode($src, FB_PERLQQ);
79is($dst, $perlqq, "FB_PERLQQ");
80is($src, '', "FB_PERLQQ residue");
af1f55d9 81
82$src = $original;
83$dst = $meth->encode($src, FB_HTMLCREF);
84is($dst, $htmlcref, "FB_HTMLCREF");
85is($src, '', "FB_HTMLCREF residue");
86
87$src = $original;
88$dst = $meth->encode($src, FB_XMLCREF);
89is($dst, $xmlcref, "FB_XMLCREF");
90is($src, '', "FB_XMLCREF residue");