From 6d67faeafe38ddb6277e0f7115aec453acf68cec Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 28 Sep 2012 23:45:28 -0500 Subject: handle encoding --- lib/Web/Response.pm | 13 +++++++++++-- t/response-streaming.t | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/lib/Web/Response.pm b/lib/Web/Response.pm index 6516021..65fc372 100644 --- a/lib/Web/Response.pm +++ b/lib/Web/Response.pm @@ -157,10 +157,19 @@ sub finalize { sub _finalize_streaming { my $self = shift; + my $streaming = $self->streaming_response; + # XXX cookies? - # XXX encoding? - return $self->streaming_response; + return $streaming unless $self->has_encoding; + + return Plack::Util::response_cb($streaming, sub { + return sub { + my $chunk = shift; + return unless defined $chunk; + return $self->_encode($chunk); + }; + }); } sub _encode { diff --git a/t/response-streaming.t b/t/response-streaming.t index fdf54e6..b9c19de 100644 --- a/t/response-streaming.t +++ b/t/response-streaming.t @@ -3,6 +3,7 @@ use strict; use warnings; use Test::More; +use Web::Request; use Web::Response; { @@ -23,4 +24,49 @@ use Web::Response; ); } +{ + use utf8; + + my $req = Web::Request->new_from_env({}); + + my $res = $req->new_response(sub { + my $responder = shift; + $responder->([200, [], ["café"]]); + }); + my $psgi_res = $res->finalize; + ok(ref($psgi_res) eq 'CODE', "got a coderef"); + + my $complete_response; + my $responder = sub { $complete_response = $_[0] }; + $psgi_res->($responder); + is_deeply( + $complete_response, + [ 200, [], ["caf\xe9"] ], + "got the right response" + ); +} + +{ + use utf8; + + my $req = Web::Request->new_from_env({}); + $req->encoding('UTF-8'); + + my $res = $req->new_response(sub { + my $responder = shift; + $responder->([200, [], ["café"]]); + }); + my $psgi_res = $res->finalize; + ok(ref($psgi_res) eq 'CODE', "got a coderef"); + + my $complete_response; + my $responder = sub { $complete_response = $_[0] }; + $psgi_res->($responder); + is_deeply( + $complete_response, + [ 200, [], ["caf\xc3\xa9"] ], + "got the right response" + ); +} + done_testing; -- cgit v1.2.3