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=a95f58a807b96127fffa82d9836286c0de8ddb3d;hp=21683cf02e5c0ce803d05d25091b41a997fed2fb;hb=5757858f133f7f1e92dd996dad0f6e28b0b919ed;hpb=0d6aa1613af382e0c68056d37444eaa377edfa96 diff --git a/t/utf_incoming.t b/t/utf_incoming.t index 21683cf..a95f58a 100644 --- a/t/utf_incoming.t +++ b/t/utf_incoming.t @@ -7,9 +7,10 @@ use HTTP::Message::PSGI (); use Encode 2.21 'decode_utf8', 'encode_utf8', 'encode'; use File::Spec; use JSON::MaybeXS; +use Data::Dumper; use Scalar::Util (); -# Test cases for incoming utf8 +# Test cases for incoming utf8 { package MyApp::Controller::Root; @@ -72,7 +73,7 @@ use Scalar::Util (); # Test to make sure redirect can now take an object (sorry don't have a better place for it # but wanted test coverage. my $location = $c->res->redirect( $c->uri_for($c->controller('Root')->action_for('uri_for')) ); - Test::More::ok !ref $location; + Test::More::ok !ref $location; } sub stream_write :Local { @@ -169,7 +170,7 @@ use Scalar::Util (); # Encode JSON also encodes to a UTF-8 encoded, binary string. This is why we don't # have application/json as one of the things we match, otherwise we get double - # encoding. + # encoding. $c->response->body(JSON::MaybeXS::encode_json($post)); } @@ -223,10 +224,17 @@ use Scalar::Util (); $c->response->body($c->req->body_parameters->{arg}); } + sub echo_param :Local { + my ($self, $c) = @_; + $c->response->content_type('text/plain'); + $c->response->body($c->req->query_parameters->{arg}); + } + + package MyApp; use Catalyst; - Test::More::ok(MyApp->setup, 'setup app'); + Test::More::ok(MyApp->setup('-Log=fatal'), 'setup app'); } ok my $psgi = MyApp->psgi_app, 'build psgi app'; @@ -529,6 +537,29 @@ SKIP: { is $c->req->query_parameters->{'a'}, $shiftjs, 'got expected value'; } +{ + my $invalid = '%e2'; + # in url + { + my $req = GET "/$invalid"; + my $res = request $req; + is ($res->code, '400', "Invalid url param is 400"); + } + # in body + { + my $req = POST "/root/echo_arg", Content => "arg0=$invalid"; + my $res = request $req; + is ($res->code, '400', "Invalid post param is 400"); + } + # in query + { + # failing since 5.90080 + my $req = GET "/root/echo_param?arg=$invalid"; + my $res = request $req; + is ($res->code, '400', "Invalid get param is 400") or diag Dumper($res->decoded_content); + } +} + ## should we use binmode on filehandles to force the encoding...? ## Not sure what else to do with multipart here, if docs are enough...