X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=t%2Futf_incoming.t;h=5f12ecb57182a9a902a7061cc09e1330aac76ace;hp=c144a443b8f60aeb0d966037777a6bdffc7e723d;hb=dd6a9f23fda9c6520be5021f7fb51f4fb345c8c4;hpb=c463b49c849c28a6fa46e9eb1c07a31b51696f1d diff --git a/t/utf_incoming.t b/t/utf_incoming.t index c144a44..5f12ecb 100644 --- a/t/utf_incoming.t +++ b/t/utf_incoming.t @@ -33,7 +33,7 @@ use Scalar::Util (); sub uri_for :Path('uri_for') { my ($self, $c) = @_; $c->response->content_type('text/html'); - $c->response->body("${\$c->uri_for($c->controller('Root')->action_for('argend'), ['♥'], '♥', {'♥'=>'♥♥'})}"); + $c->response->body("${\$c->uri_for($c->controller('Root')->action_for('argend'), ['♥'], '♥#X♥X', {'♥'=>'♥♥'})}"); } sub heart_with_arg :Path('a♥') Args(1) { @@ -111,8 +111,17 @@ use Scalar::Util (); $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'; @@ -309,12 +318,12 @@ use Catalyst::Test 'MyApp'; { my ($res, $c) = ctx_request "/root/uri_for"; - my $url = $c->uri_for($c->controller('Root')->action_for('argend'), ['♥'], '♥', {'♥'=>'♥♥'}); + my $url = $c->uri_for($c->controller('Root')->action_for('argend'), ['♥'], '♥#X♥X', {'♥'=>'♥♥'}); is $res->code, 200, 'OK'; is decode_utf8($res->content), "$url", 'correct body'; #should do nothing is $res->content, "$url", 'correct body'; - is $res->content_length, 90, 'correct length'; + is $res->content_length, 104, 'correct length'; is $res->content_charset, 'UTF-8'; { @@ -365,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', @@ -465,18 +482,21 @@ SKIP: { is $c->req->body_parameters->{'arg0'}, 'helloworld', 'got helloworld value'; is $c->req->body_parameters->{'♥'}, '♥♥'; + is $c->req->body_parameters->{'arg1'}, $utf8, 'decoded utf8 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'; + +} - ok Scalar::Util::blessed($c->req->body_parameters->{'arg1'}); - ok Scalar::Util::blessed($c->req->body_parameters->{'arg2'}[0]); - ok Scalar::Util::blessed($c->req->body_parameters->{'arg2'}[1]); - ok Scalar::Util::blessed($c->req->body_parameters->{'♥♥♥'}); +{ + my $shiftjs = 'test テスト'; + my $encoded = Encode::encode('UTF-8', $shiftjs); - # Since the form post is COMPLEX you are expected to decode it yourself. - is Encode::decode('UTF-8', $c->req->body_parameters->{'arg1'}->raw_data), $utf8, 'decoded utf8 param'; - is Encode::decode('SHIFT_JIS', $c->req->body_parameters->{'arg2'}[0]->raw_data), $shiftjs, 'decoded shiftjis param'; - is Encode::decode('SHIFT_JIS', $c->req->body_parameters->{'arg2'}[1]->raw_data), $shiftjs, 'decoded shiftjis param'; - is Encode::decode('SHIFT_JIS', $c->req->body_parameters->{'♥♥♥'}->raw_data), $shiftjs, 'decoded shiftjis param'; + 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...?