Commit | Line | Data |
55046410 |
1 | use strict; |
2 | use warnings; |
3 | use Test::More tests => 5 * 5; |
4 | use utf8; |
5 | |
6 | # setup library path |
7 | use FindBin qw($Bin); |
8 | use lib "$Bin/lib"; |
9 | |
10 | use Catalyst::Test 'TestAppUnicode'; |
11 | use Encode; |
12 | use HTTP::Request::Common; |
13 | use URI::Escape qw/uri_escape_utf8/; |
14 | use HTTP::Status 'is_server_error'; |
15 | |
16 | my $encode_str = "\x{e3}\x{81}\x{82}"; # e38182 is japanese 'あ' |
17 | my $decode_str = Encode::decode('utf-8' => $encode_str); |
18 | my $escape_str = uri_escape_utf8($decode_str); |
19 | |
20 | check_parameter(GET "/?foo=$escape_str"); |
21 | check_parameter(POST '/', ['foo' => $encode_str]); |
22 | check_parameter(POST '/', |
23 | Content_Type => 'form-data', |
24 | Content => [ |
25 | 'foo' => [ |
26 | "$Bin/unicode_plugin_request_decode.t", |
27 | $encode_str, |
28 | ] |
29 | ], |
30 | ); |
31 | |
32 | check_argument(GET "/$escape_str"); |
33 | check_capture(GET "/capture/$escape_str"); |
34 | |
35 | # sending non-utf8 data |
36 | my $non_utf8_data = "%C3%E6%CB%AA"; |
37 | check_fallback(GET "/?q=${non_utf8_data}"); |
38 | check_fallback(GET "/${non_utf8_data}"); |
39 | check_fallback(GET "/capture/${non_utf8_data}"); |
40 | check_fallback(POST '/', ['foo' => $non_utf8_data]); |
41 | |
42 | sub check_parameter { |
43 | my ( undef, $c ) = ctx_request(shift); |
44 | is $c->res->output => '<h1>It works</h1>'; |
45 | |
46 | my $foo = $c->req->param('foo'); |
47 | ok utf8::is_utf8($foo); |
48 | is $foo => $decode_str; |
49 | |
50 | my $other_foo = $c->req->method eq 'POST' |
51 | ? $c->req->upload('foo') |
52 | ? $c->req->upload('foo')->filename |
53 | : $c->req->body_parameters->{foo} |
54 | : $c->req->query_parameters->{foo}; |
55 | ok utf8::is_utf8($other_foo); |
56 | is $other_foo => $decode_str; |
57 | } |
58 | |
59 | sub check_argument { |
60 | my ( undef, $c ) = ctx_request(shift); |
61 | is $c->res->output => '<h1>It works</h1>'; |
62 | |
63 | my $foo = $c->req->args->[0]; |
64 | ok utf8::is_utf8($foo); |
65 | is $foo => $decode_str; |
66 | } |
67 | |
68 | sub check_capture { |
69 | my ( undef, $c ) = ctx_request(shift); |
70 | is $c->res->output => '<h1>It works</h1>'; |
71 | |
72 | my $foo = $c->req->captures->[0]; |
73 | ok utf8::is_utf8($foo); |
74 | is $foo => $decode_str; |
75 | } |
76 | |
77 | sub check_fallback { |
78 | my ( $res, $c ) = ctx_request(shift); |
79 | ok(!is_server_error($res->code)) or diag('Response code is: ' . $res->code); |
80 | } |