Fix double-encoding of spaces in query parameter keys in ->uri_for
[catagits/Catalyst-Runtime.git] / t / body_fh.t
CommitLineData
46fff667 1use warnings;
2use strict;
3use Test::More;
4use HTTP::Request::Common;
5use HTTP::Message::PSGI;
6use Plack::Util;
7af15a33 7
8# Test case to check that we now send scalar and filehandle like
9# bodys directly to the PSGI engine, rather than call $writer->write
10# or unroll the filehandle ourselves.
46fff667 11
12{
13 package MyApp::Controller::Root;
14
15 use base 'Catalyst::Controller';
16
17 sub flat_response :Local {
18 my $response = 'Hello flat_response';
19 pop->res->body($response);
20 }
21
22 sub memory_stream :Local {
23 my $response = 'Hello memory_stream';
24 open my $fh, '<', \$response || die "$!";
25
26 pop->res->body($fh);
27 }
28
29 sub manual_write_fh :Local {
30 my ($self, $c) = @_;
31 my $response = 'Hello manual_write_fh';
32 my $writer = $c->res->write_fh;
33 $writer->write($response);
34 $writer->close;
35 }
36
37 sub manual_write :Local {
38 my ($self, $c) = @_;
39 $c->res->write('Hello');
40 $c->res->body('manual_write');
41 }
42
f6462fb0 43 $INC{'MyApp/Controller/Root.pm'} = __FILE__; # sorry...
44
46fff667 45 package MyApp;
46 use Catalyst;
47
48}
49
f6462fb0 50
46fff667 51
52ok(MyApp->setup);
53ok(my $psgi = MyApp->psgi_app);
54
55{
56 ok(my $env = req_to_psgi(GET '/root/flat_response'));
57 ok(my $psgi_response = $psgi->($env));
58
59 $psgi_response->(sub {
60 my $response_tuple = shift;
61 my ($status, $headers, $body) = @$response_tuple;
62
63 ok $status;
64 ok $headers;
65 is $body->[0], 'Hello flat_response';
66
67 });
68}
69
70{
71 ok(my $env = req_to_psgi(GET '/root/memory_stream'));
72 ok(my $psgi_response = $psgi->($env));
73
74 $psgi_response->(sub {
75 my $response_tuple = shift;
76 my ($status, $headers, $body) = @$response_tuple;
77
78 ok $status;
79 ok $headers;
80 is ref($body), 'GLOB';
81
82 });
83}
84
85{
86 ok(my $env = req_to_psgi(GET '/root/manual_write_fh'));
87 ok(my $psgi_response = $psgi->($env));
88
89 $psgi_response->(sub {
90 my $response_tuple = shift;
91 my ($status, $headers, $body) = @$response_tuple;
92
93 ok $status;
94 ok $headers;
95 ok !$body;
96
97 return Plack::Util::inline_object(
98 write => sub { is shift, 'Hello manual_write_fh' },
99 close => sub { ok 1, 'closed' },
100 );
101 });
102}
103
104{
105 ok(my $env = req_to_psgi(GET '/root/manual_write'));
106 ok(my $psgi_response = $psgi->($env));
107
108 $psgi_response->(sub {
109 my $response_tuple = shift;
110 my ($status, $headers, $body) = @$response_tuple;
111
112 ok $status;
113 ok $headers;
114 ok !$body;
115
116 my @expected = (qw/Hello manual_write/);
117 return Plack::Util::inline_object(
118 close => sub { ok 1, 'closed'; is scalar(@expected), 0; },
119 write => sub { is shift, shift(@expected) },
120 );
121 });
122}
123
124## We need to specify the number of expected tests because tests that live
125## in the callbacks might never get run (thus all ran tests pass but not all
126## required tests run).
127
128done_testing(28);