|
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");
|