summaryrefslogtreecommitdiffstats
path: root/t/response-streaming-utf8.t
diff options
context:
space:
mode:
Diffstat (limited to 't/response-streaming-utf8.t')
-rw-r--r--t/response-streaming-utf8.t109
1 files changed, 109 insertions, 0 deletions
diff --git a/t/response-streaming-utf8.t b/t/response-streaming-utf8.t
new file mode 100644
index 0000000..b209434
--- /dev/null
+++ b/t/response-streaming-utf8.t
@@ -0,0 +1,109 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+
+use Web::Request;
+
+{
+ 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");
+
+ is_deeply(
+ resolve_response($psgi_res),
+ [ 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");
+
+ is_deeply(
+ resolve_response($psgi_res),
+ [ 200, [], ["caf\xc3\xa9"] ],
+ "got the right response"
+ );
+}
+
+{
+ use utf8;
+
+ my $req = Web::Request->new_from_env({});
+
+ my $res = $req->new_response(sub {
+ my $responder = shift;
+ my $writer = $responder->([200, []]);
+ $writer->write("ca");
+ $writer->write("fé");
+ $writer->close;
+ });
+ my $psgi_res = $res->finalize;
+ ok(ref($psgi_res) eq 'CODE', "got a coderef");
+
+ is_deeply(
+ resolve_response($psgi_res),
+ [ 200, [], ["ca", "f\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;
+ my $writer = $responder->([200, []]);
+ $writer->write("ca");
+ $writer->write("fé");
+ $writer->close;
+ });
+ my $psgi_res = $res->finalize;
+ ok(ref($psgi_res) eq 'CODE', "got a coderef");
+
+ is_deeply(
+ resolve_response($psgi_res),
+ [ 200, [], ["ca", "f\xc3\xa9"] ],
+ "got the right response"
+ );
+}
+
+sub resolve_response {
+ my ($psgi_res) = @_;
+
+ if (ref($psgi_res) eq 'CODE') {
+ my $body = [];
+ $psgi_res->(sub {
+ $psgi_res = shift;
+ return Plack::Util::inline_object(
+ write => sub { push @$body, $_[0] },
+ close => sub { push @$psgi_res, $body },
+ );
+ });
+ }
+
+ return $psgi_res;
+}
+
+done_testing;