From fe96b02a26a13b9f3172faa474f0c791036722e0 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 22 Jul 2012 14:51:51 -0500 Subject: test that we handle encodings properly --- t/encoding.t | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 t/encoding.t (limited to 't') diff --git a/t/encoding.t b/t/encoding.t new file mode 100644 index 0000000..9c1d39d --- /dev/null +++ b/t/encoding.t @@ -0,0 +1,122 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use utf8; +use Test::More; +use Plack::Test; + +use HTTP::Request::Common; +use Web::Request; + +{ + my $app = sub { + my ($env) = @_; + my $req = Web::Request->new_from_env($env); + is($req->content, "caf\x{c3}\x{a9}"); + $req->encoding('UTF-8'); + is($req->content, "café"); + $req->encoding('iso8859-1'); + is($req->content, "caf\x{c3}\x{a9}"); + return $req->new_response(status => 200)->finalize; + }; + + test_psgi + app => $app, + client => sub { + my ($cb) = @_; + my $res = $cb->(POST '/', Content => "caf\x{c3}\x{a9}"); + ok($res->is_success) || diag($res->content); + }; +} + +{ + my $app = sub { + my ($env) = @_; + my $req = Web::Request->new_from_env($env); + + my $params; + + $params = $req->query_parameters; + is_deeply([keys %$params], ["\x{cf}\x{84}"]); + is_deeply([values %$params], ["2\x{cf}\x{80}"]); + $req->encoding('UTF-8'); + $params = $req->query_parameters; + is_deeply([keys %$params], ["τ"]); + is_deeply([values %$params], ["2π"]); + $req->encoding('iso8859-1'); + $params = $req->query_parameters; + is_deeply([keys %$params], ["\x{cf}\x{84}"]); + is_deeply([values %$params], ["2\x{cf}\x{80}"]); + + $params = $req->all_query_parameters; + is_deeply([keys %$params], ["\x{cf}\x{84}"]); + is_deeply([values %$params], [["2\x{cf}\x{80}"]]); + $req->encoding('UTF-8'); + $params = $req->all_query_parameters; + is_deeply([keys %$params], ["τ"]); + is_deeply([values %$params], [["2π"]]); + $req->encoding('iso8859-1'); + $params = $req->all_query_parameters; + is_deeply([keys %$params], ["\x{cf}\x{84}"]); + is_deeply([values %$params], [["2\x{cf}\x{80}"]]); + + return $req->new_response(status => 200)->finalize; + }; + + test_psgi + app => $app, + client => sub { + my ($cb) = @_; + my $res = $cb->(GET '/?%CF%84=2%CF%80'); + ok($res->is_success) || diag($res->content); + }; +} + +{ + my $app = sub { + my ($env) = @_; + my $req = Web::Request->new_from_env($env); + + my $params; + + $params = $req->body_parameters; + is_deeply([keys %$params], ["\x{cf}\x{84}"]); + is_deeply([values %$params], ["2\x{cf}\x{80}"]); + $req->encoding('UTF-8'); + $params = $req->body_parameters; + is_deeply([keys %$params], ["τ"]); + is_deeply([values %$params], ["2π"]); + $req->encoding('iso8859-1'); + $params = $req->body_parameters; + is_deeply([keys %$params], ["\x{cf}\x{84}"]); + is_deeply([values %$params], ["2\x{cf}\x{80}"]); + + $params = $req->all_body_parameters; + is_deeply([keys %$params], ["\x{cf}\x{84}"]); + is_deeply([values %$params], [["2\x{cf}\x{80}"]]); + $req->encoding('UTF-8'); + $params = $req->all_body_parameters; + is_deeply([keys %$params], ["τ"]); + is_deeply([values %$params], [["2π"]]); + $req->encoding('iso8859-1'); + $params = $req->all_body_parameters; + is_deeply([keys %$params], ["\x{cf}\x{84}"]); + is_deeply([values %$params], [["2\x{cf}\x{80}"]]); + + return $req->new_response(status => 200)->finalize; + }; + + test_psgi + app => $app, + client => sub { + my ($cb) = @_; + my $res = $cb->( + POST '/', + 'Content-Type' => 'application/x-www-form-urlencoded', + 'Content' => '%CF%84=2%CF%80', + ); + ok($res->is_success) || diag($res->content); + }; +} + +done_testing; -- cgit v1.2.3-54-g00ecf