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=9b2b68efbfe2f91efb3e44c644c7da6933def196;hp=21683cf02e5c0ce803d05d25091b41a997fed2fb;hb=88e5a8b0c4d28e46b8ba6b6b9567063e57af9063;hpb=0d6aa1613af382e0c68056d37444eaa377edfa96 diff --git a/t/utf_incoming.t b/t/utf_incoming.t index 21683cf..9b2b68e 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,6 +224,13 @@ 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; @@ -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...