summaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-07-22 14:51:51 -0500
committerJesse Luehrs <doy@tozt.net>2012-07-22 14:51:51 -0500
commitfe96b02a26a13b9f3172faa474f0c791036722e0 (patch)
treefe8c98fb1308eb3832515721dd061fd25262e2f2 /t
parent7b97f1dbd765eb7e2bdcac3dd9db623273e6f45d (diff)
downloadweb-request-fe96b02a26a13b9f3172faa474f0c791036722e0.tar.gz
web-request-fe96b02a26a13b9f3172faa474f0c791036722e0.zip
test that we handle encodings properly
Diffstat (limited to 't')
-rw-r--r--t/encoding.t122
1 files changed, 122 insertions, 0 deletions
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;