From: John Napiorkowski Date: Wed, 16 Jan 2019 14:37:15 +0000 (-0600) Subject: Merge branch 'bokutin-bugs/from_psgi_response' X-Git-Tag: v5.90124~10 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=53779e13d3ae3e52c7c739aa17b97092cde4a4d7;hp=fddc541da120ac66bc0eb75c9845eafbe0ff0707 Merge branch 'bokutin-bugs/from_psgi_response' --- diff --git a/lib/Catalyst/Response.pm b/lib/Catalyst/Response.pm index 2399ae5..b0f04a3 100644 --- a/lib/Catalyst/Response.pm +++ b/lib/Catalyst/Response.pm @@ -196,6 +196,8 @@ sub from_psgi_response { die "You can't set a Catalyst response from that, expect a valid PSGI response"; } + return unless $self->_context->has_encoding; + # Encoding compatibilty. If the response set a charset, well... we need # to assume its properly encoded and NOT encode for this response. Otherwise # We risk double encoding. diff --git a/t/psgi_utils.t b/t/psgi_utils.t index 6508886..923defb 100644 --- a/t/psgi_utils.t +++ b/t/psgi_utils.t @@ -55,6 +55,28 @@ my $psgi_app = sub { $c->res->from_psgi_response([200, ['Content-Type'=>'text/html'], ["hello","world"]]); } + sub streaming_body :Local { + my ($self, $c) = @_; + my $psgi_app = sub { + my $respond = shift; + my $writer = $respond->([200,["Content-Type" => "text/plain"]]); + $writer->write("body"); + $writer->close; + }; + $c->res->from_psgi_response($psgi_app); + } + sub streaming_body_with_charset :Local { + my ($self, $c) = @_; + my $psgi_app = sub { + my $respond = shift; + my $writer = $respond->([200,["Content-Type" => "text/plain; charset=utf-8"]]); + $writer->write("body"); + $writer->close; + }; + $c->clear_encoding; + $c->res->from_psgi_response($psgi_app); + } + package MyApp::Controller::User; $INC{'MyApp/Controller/User.pm'} = __FILE__; @@ -407,4 +429,13 @@ use Catalyst::Test 'MyApp'; is $res->content, "helloworld"; } +{ + my ($res, $c) = ctx_request('/docs/streaming_body'); + is $res->content, "body"; +} +{ + my ($res, $c) = ctx_request('/docs/streaming_body_with_charset'); + is $res->content, "body"; +} + done_testing();