Blame t/message-charset.t

Packit a09cf7
use strict;
Packit a09cf7
use warnings;
Packit a09cf7
Packit a09cf7
use Test::More;
Packit a09cf7
plan tests => 43;
Packit a09cf7
Packit a09cf7
use HTTP::Response;
Packit a09cf7
my $r = HTTP::Response->new(200, "OK");
Packit a09cf7
is($r->content_charset, undef);
Packit a09cf7
is($r->content_type_charset, undef);
Packit a09cf7
Packit a09cf7
$r->content_type("text/plain");
Packit a09cf7
is($r->content_charset, undef);
Packit a09cf7
Packit a09cf7
$r->content("abc");
Packit a09cf7
is($r->content_charset, "US-ASCII");
Packit a09cf7
Packit a09cf7
$r->content("f\xE5rep\xF8lse\n");
Packit a09cf7
is($r->content_charset, "ISO-8859-1");
Packit a09cf7
Packit a09cf7
$r->content("f\xC3\xA5rep\xC3\xB8lse\n");
Packit a09cf7
is($r->content_charset, "UTF-8");
Packit a09cf7
Packit a09cf7
$r->content_type("text/html");
Packit a09cf7
$r->content(<<'EOT');
Packit a09cf7
<meta charset="UTF-8">
Packit a09cf7
EOT
Packit a09cf7
is($r->content_charset, "UTF-8");
Packit a09cf7
Packit a09cf7
$r->content(<<'EOT');
Packit a09cf7
<body>
Packit a09cf7
<META CharSet="Utf-16-LE">
Packit a09cf7
<meta charset="ISO-8859-1">
Packit a09cf7
EOT
Packit a09cf7
is($r->content_charset, "UTF-8");
Packit a09cf7
Packit a09cf7
$r->content(<<'EOT');
Packit a09cf7
Packit a09cf7
EOT
Packit a09cf7
is($r->content_charset, "US-ASCII");
Packit a09cf7
Packit a09cf7
$r->content(<<'EOT');
Packit a09cf7
<meta content="text/plain; charset=UTF-8">
Packit a09cf7
EOT
Packit a09cf7
is($r->content_charset, "UTF-8");
Packit a09cf7
Packit a09cf7
$r->content_type('text/plain; charset="iso-8859-1"');
Packit a09cf7
is($r->content_charset, "ISO-8859-1");
Packit a09cf7
is($r->content_type_charset, "ISO-8859-1");
Packit a09cf7
Packit a09cf7
$r->content_type("application/xml");
Packit a09cf7
$r->content("<foo>..</foo>");
Packit a09cf7
is($r->content_charset, "UTF-8");
Packit a09cf7
Packit a09cf7
require Encode;
Packit a09cf7
for my $enc ("UTF-16BE", "UTF-16LE", "UTF-32BE", "UTF-32LE") {
Packit a09cf7
    $r->content(Encode::encode($enc, "<foo>..</foo>"));
Packit a09cf7
    is($r->content_charset, $enc);
Packit a09cf7
}
Packit a09cf7
Packit a09cf7
$r->content(<<'EOT');
Packit a09cf7
Packit a09cf7
EOT
Packit a09cf7
is($r->content_charset, "utf8");
Packit a09cf7
Packit a09cf7
$r->content(<<'EOT');
Packit a09cf7
Packit a09cf7
EOT
Packit a09cf7
is($r->content_charset, "UTF-8");
Packit a09cf7
Packit a09cf7
$r->content(<<'EOT');
Packit a09cf7
Packit a09cf7
EOT
Packit a09cf7
is($r->content_charset, "ISO-8859-1");
Packit a09cf7
Packit a09cf7
$r->content(<<'EOT');
Packit a09cf7
Packit a09cf7
encoding="US-ASCII" ?>
Packit a09cf7
EOT
Packit a09cf7
is($r->content_charset, "US-ASCII");
Packit a09cf7
Packit a09cf7
$r->content_type("application/json");
Packit a09cf7
for my $enc ("UTF-8", "UTF-16BE", "UTF-16LE", "UTF-32BE", "UTF-32LE") {
Packit a09cf7
    $r->content(Encode::encode($enc, "{}"));
Packit a09cf7
    is($r->content_charset, $enc);
Packit a09cf7
}
Packit a09cf7
Packit a09cf7
{
Packit a09cf7
 sub TIESCALAR{bless[]}
Packit a09cf7
 tie $_, "";
Packit a09cf7
 my $fail = 0;
Packit a09cf7
 sub STORE{ ++$fail }
Packit a09cf7
 sub FETCH{}
Packit a09cf7
 $r->content_charset;
Packit a09cf7
 is($fail, 0, 'content_charset leaves $_ alone');
Packit a09cf7
}
Packit a09cf7
Packit a09cf7
$r->remove_content_headers;
Packit a09cf7
$r->content_type("text/plain; charset=UTF-8");
Packit a09cf7
$r->content("abc");
Packit a09cf7
is($r->decoded_content, "abc");
Packit a09cf7
Packit a09cf7
$r->content("\xc3\xa5");
Packit a09cf7
is($r->decoded_content, chr(0xE5));
Packit a09cf7
is($r->decoded_content(charset => "none"), "\xC3\xA5");
Packit a09cf7
is($r->decoded_content(alt_charset => "UTF-8"), chr(0xE5));
Packit a09cf7
is($r->decoded_content(alt_charset => "none"), chr(0xE5));
Packit a09cf7
Packit a09cf7
$r->content_type("text/plain; charset=UTF");
Packit a09cf7
is($r->decoded_content, undef);
Packit a09cf7
is($r->decoded_content(charset => "UTF-8"), chr(0xE5));
Packit a09cf7
is($r->decoded_content(charset => "none"), "\xC3\xA5");
Packit a09cf7
is($r->decoded_content(alt_charset => "UTF-8"), chr(0xE5));
Packit a09cf7
is($r->decoded_content(alt_charset => "none"), "\xC3\xA5");
Packit a09cf7
Packit a09cf7
# char semantics for latin-1?
Packit a09cf7
is($r->decoded_content(charset => "iso-8859-1"), "\xC3\xA5");
Packit a09cf7
is(lc($r->decoded_content(charset => "iso-8859-1")), "\xE3\xA5");
Packit a09cf7
Packit a09cf7
$r->content_type("text/plain");
Packit a09cf7
is($r->decoded_content, chr(0xE5));
Packit a09cf7
is($r->decoded_content(charset => "none"), "\xC3\xA5");
Packit a09cf7
is($r->decoded_content(default_charset => "ISO-8859-1"), "\xC3\xA5");
Packit a09cf7
is($r->decoded_content(default_charset => "latin1"), "\xC3\xA5");