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;
# 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 {
# 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));
}
$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';
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...