xref: /openbsd-src/gnu/usr.bin/perl/ext/PerlIO-encoding/t/fallback.t (revision b46d8ef224b95de1dddcd1f01c1ab482f0ab3778)
143003dfeSmillert#!./perl
243003dfeSmillert
343003dfeSmillertBEGIN {
4b8851fccSafresh1    unless (find PerlIO::Layer 'perlio') {
5b8851fccSafresh1	print "1..0 # No perlio\n";
6b8851fccSafresh1	exit 0;
7b8851fccSafresh1    }
843003dfeSmillert    if (ord("A") == 193) {
943003dfeSmillert	print "1..0 # Skip: EBCDIC\n";
1043003dfeSmillert	exit 0;
1143003dfeSmillert    }
1243003dfeSmillert    unless ( eval { require Encode } ) {
1343003dfeSmillert	print "1..0 # Skip: No Encode\n";
1443003dfeSmillert	exit 0;
1543003dfeSmillert    }
1643003dfeSmillert    import Encode qw(:fallback_all);
1743003dfeSmillert}
1843003dfeSmillert
199f11ffb7Safresh1use Test::More tests => 10;
20b8851fccSafresh1
2143003dfeSmillert# $PerlIO::encoding = 0; # WARN_ON_ERR|PERLQQ;
2243003dfeSmillert
2343003dfeSmillertmy $file = "fallback$$.txt";
2443003dfeSmillert
2543003dfeSmillert{
26*b46d8ef2Safresh1    use warnings;
2743003dfeSmillert    my $message = '';
2843003dfeSmillert    local $SIG{__WARN__} = sub { $message = $_[0] };
2943003dfeSmillert    $PerlIO::encoding::fallback = Encode::PERLQQ;
3043003dfeSmillert    ok(open(my $fh,">encoding(iso-8859-1)",$file),"opened iso-8859-1 file");
3143003dfeSmillert    my $str = "\x{20AC}";
3243003dfeSmillert    print $fh $str,"0.02\n";
3343003dfeSmillert    close($fh);
3443003dfeSmillert    like($message, qr/does not map to iso-8859-1/o, "FB_WARN message");
3543003dfeSmillert}
3643003dfeSmillert
379f11ffb7Safresh1open($fh,'<',$file) || die "File cannot be re-opened";
3843003dfeSmillertmy $line = <$fh>;
3943003dfeSmillertis($line,"\\x{20ac}0.02\n","perlqq escapes");
4043003dfeSmillertclose($fh);
4143003dfeSmillert
4243003dfeSmillert$PerlIO::encoding::fallback = Encode::HTMLCREF;
4343003dfeSmillert
4443003dfeSmillertok(open(my $fh,">encoding(iso-8859-1)",$file),"opened iso-8859-1 file");
4543003dfeSmillertmy $str = "\x{20AC}";
4643003dfeSmillertprint $fh $str,"0.02\n";
4743003dfeSmillertclose($fh);
4843003dfeSmillert
499f11ffb7Safresh1open($fh,'<',$file) || die "File cannot be re-opened";
5043003dfeSmillertmy $line = <$fh>;
5143003dfeSmillertis($line,"&#8364;0.02\n","HTML escapes");
5243003dfeSmillertclose($fh);
5343003dfeSmillert
5443003dfeSmillert{
5543003dfeSmillert    no utf8;
569f11ffb7Safresh1    open($fh,'>',$file) || die "File cannot be re-opened";
5743003dfeSmillert    binmode($fh);
5843003dfeSmillert    print $fh "\xA30.02\n";
5943003dfeSmillert    close($fh);
6043003dfeSmillert}
6143003dfeSmillert
6243003dfeSmillertok(open($fh,"<encoding(US-ASCII)",$file),"Opened as ASCII");
6343003dfeSmillertmy $line = <$fh>;
6443003dfeSmillertprintf "# %x\n",ord($line);
6543003dfeSmillertis($line,"\\xA30.02\n","Escaped non-mapped char");
6643003dfeSmillertclose($fh);
6743003dfeSmillert
689f11ffb7Safresh1{
699f11ffb7Safresh1    my $message = '';
709f11ffb7Safresh1    local $SIG{__WARN__} = sub { $message = $_[0] };
719f11ffb7Safresh1
729f11ffb7Safresh1    $PerlIO::encoding::fallback = Encode::WARN_ON_ERR;
7343003dfeSmillert
7443003dfeSmillert    ok(open($fh,"<encoding(US-ASCII)",$file),"Opened as ASCII");
7543003dfeSmillert    my $line = <$fh>;
7643003dfeSmillert    printf "# %x\n",ord($line);
7743003dfeSmillert    is($line,"\x{FFFD}0.02\n","Unicode replacement char");
7843003dfeSmillert    close($fh);
7943003dfeSmillert
809f11ffb7Safresh1    like($message, qr/does not map to Unicode/o, "FB_WARN message");
819f11ffb7Safresh1}
829f11ffb7Safresh1
8343003dfeSmillertEND {
8443003dfeSmillert    1 while unlink($file);
8543003dfeSmillert}
86