blob: 48d7aa2cc1519dc742c7cfffe8572007fcaa76e4 [file] [log] [blame]
# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
package TestModperl::post_utf8;
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::TestTrace;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use APR::Table ();
use TestCommon::Utils ();
use Apache2::Const -compile => 'OK';
my $expected_ascii = "I love you, (why lying?), but I belong to another";
my $expected_utf8 = "\x{042F} \x{0432}\x{0430}\x{0441} \x{043B}\x{044E}" .
"\x{0431}\x{043B}\x{044E} (\x{043A} \x{0447}\x{0435}\x{043C}\x{0443} " .
"\x{043B}\x{0443}\x{043A}\x{0430}\x{0432}\x{0438}\x{0442}\x{044C}?),\n" .
"\x{041D}\x{043E} \x{044F} \x{0434}\x{0440}\x{0443}\x{0433}\x{043E}" .
"\x{043C}\x{0443} \x{043E}\x{0442}\x{0434}\x{0430}\x{043D}\x{0430};";
sub handler {
my $r = shift;
# # visual debug, e.g. in lynx/mozilla
# $r->content_type("text/plain; charset=utf-8");
# $r->print("expected: $expected_utf8\n");
my $received = TestCommon::Utils::read_post($r) || "";
# utf encode/decode was added only in 5.8.0
# XXX: currently binmode is only available with perlio (used on the
# server side on the tied/perlio STDOUT)
plan $r, tests => 2,
need need_min_perl_version(5.008), need_perl('perlio');
# workaround for perl-5.8.0, which doesn't decode correctly a
# tainted variable
require ModPerl::Util;
ModPerl::Util::untaint($received) if $] == 5.008;
# assume that we know that it's utf8
require Encode; # since 5.8.0
$received = Encode::decode('utf8', $received);
# utf8::decode() doesn't work under -T
my ($received_ascii, $received_utf8) = split /=/, $received;
ok t_cmp($received_ascii, $expected_ascii, "ascii");
ok $expected_utf8 eq $received_utf8;
# if you want to see the utf8 data run with:
# t/TEST -trace=debug -v modperl/post_utf8
# and look for this data in t/logs/error_log
# needed for sending utf-8 to STDERR for debug
binmode(STDERR, ':utf8');
debug "expected: $expected_utf8";
debug "received: $received_utf8";
Apache2::Const::OK;
}
1;
__END__
SetHandler perl-script