X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Futf_incoming.t;h=baa3f2a133442e4f113832598234a6469f6564ad;hb=83757b9ecd57e4ee54b134075fc358899c67c0d7;hp=dbed329088b40c678a13ad3f551e3c080346328c;hpb=ddc88fbd6b6db4088181ad8f59b4f74fea58a9ef;p=catagits%2FCatalyst-Runtime.git diff --git a/t/utf_incoming.t b/t/utf_incoming.t index dbed329..baa3f2a 100644 --- a/t/utf_incoming.t +++ b/t/utf_incoming.t @@ -7,6 +7,7 @@ use HTTP::Message::PSGI (); use Encode 2.21 'decode_utf8', 'encode_utf8', 'encode'; use File::Spec; use JSON::MaybeXS; +use Scalar::Util (); # Test cases for incoming utf8 @@ -110,8 +111,17 @@ use JSON::MaybeXS; $c->response->body($contents); } + sub write_then_body :Local { + my ($self, $c) = @_; + + $c->res->content_type('text/html'); + $c->res->write("

This is early_write action ♥

"); + $c->res->body("

This is body_write action ♥

"); + } + sub file_upload :POST Consumes(Multipart) Local { my ($self, $c) = @_; + Test::More::is $c->req->body_parameters->{'♥'}, '♥♥'; Test::More::ok my $upload = $c->req->uploads->{file}; Test::More::is $upload->charset, 'UTF-8'; @@ -364,6 +374,14 @@ use Catalyst::Test 'MyApp'; } { + my $res = request "/root/write_then_body"; + + is $res->code, 200, 'OK'; + is decode_utf8($res->content), "

This is early_write action ♥

This is body_write action ♥

"; + is $res->content_charset, 'UTF-8'; +} + +{ ok my $path = File::Spec->catfile('t', 'utf8.txt'); ok my $req = POST '/root/file_upload', Content_Type => 'form-data', @@ -441,6 +459,11 @@ SKIP: { Content_Type => 'form-data', Content => [ arg0 => 'helloworld', + Encode::encode('UTF-8','♥') => Encode::encode('UTF-8','♥♥'), # Long form POST simple does not auto encode... + Encode::encode('UTF-8','♥♥♥') => [ + undef, '', + 'Content-Type' =>'text/plain; charset=SHIFT_JIS', + 'Content' => Encode::encode('SHIFT_JIS', $shiftjs)], arg1 => [ undef, '', 'Content-Type' =>'text/plain; charset=UTF-8', @@ -458,11 +481,22 @@ SKIP: { my ($res, $c) = ctx_request $req; is $c->req->body_parameters->{'arg0'}, 'helloworld', 'got helloworld value'; - - # We expect catalyst to have decoded this + is $c->req->body_parameters->{'♥'}, '♥♥'; is $c->req->body_parameters->{'arg1'}, $utf8, 'decoded utf8 param'; - is $c->req->body_parameters->{'arg2'}[0], $shiftjs, 'decoded shiftjis param'; + is $c->req->body_parameters->{'arg2'}[0], $shiftjs, 'decoded shiftjs param'; + is $c->req->body_parameters->{'arg2'}[1], $shiftjs, 'decoded shiftjs param'; + is $c->req->body_parameters->{'♥♥♥'}, $shiftjs, 'decoded shiftjs param'; + +} + +{ + my $shiftjs = 'test テスト'; + my $encoded = Encode::encode('UTF-8', $shiftjs); + + ok my $req = GET "/root/echo_arg?a=$encoded"; + my ($res, $c) = ctx_request $req; + is $c->req->query_parameters->{'a'}, $shiftjs, 'got expected value'; } ## should we use binmode on filehandles to force the encoding...?