X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FTest.pm;h=88800fa6a6c33c503d99df09934fd1b58a015898;hb=06e1b6164a2c9d7b463f358b0d1934ef83a82845;hp=fb6f26e271fdbd01ebd1dca37c560f087ce8d70e;hpb=6dc87a0f8301391acfe25ee5bcaad0fe48dad559;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/Test.pm b/lib/Catalyst/Engine/Test.pm index fb6f26e..88800fa 100644 --- a/lib/Catalyst/Engine/Test.pm +++ b/lib/Catalyst/Engine/Test.pm @@ -7,7 +7,7 @@ use Class::Struct (); use HTTP::Headers::Util 'split_header_words'; use HTTP::Request; use HTTP::Response; -use IO::File; +use File::Temp; use URI; __PACKAGE__->mk_accessors(qw/http/); @@ -49,6 +49,15 @@ This class overloads some methods from C. =over 4 +=item $c->finalize_body + +=cut + +sub finalize_body { + my $c = shift; + $c->http->response->content( $c->response->output ); +} + =item $c->finalize_headers =cut @@ -63,13 +72,13 @@ sub finalize_headers { } } -=item $c->finalize_output +=item $c->prepare_body =cut -sub finalize_output { +sub prepare_body { my $c = shift; - $c->http->response->content_ref( \$c->response->{output} ); + $c->request->input( $c->http->request->content ); } =item $c->prepare_connection @@ -99,7 +108,8 @@ sub prepare_headers { sub prepare_parameters { my $c = shift; - my @params = (); + my ( @params, @uploads ); + my $request = $c->http->request; push( @params, $request->uri->query_form ); @@ -119,17 +129,21 @@ sub prepare_parameters { if ( $parameters{filename} ) { - my $fh = IO::File->new_tmpfile; + my $fh = File::Temp->new( UNLINK => 0 ); $fh->write( $part->content ) or die $!; - $fh->seek( SEEK_SET, 0 ) or die $!; + $fh->flush or die $!; - $c->req->uploads->{ $parameters{filename} } = { - fh => $fh, - size => ( stat $fh )[7], - type => $part->content_type - }; + my $upload = Catalyst::Request::Upload->new( + filename => $parameters{filename}, + size => ( $fh->stat )[7], + tempname => $fh->filename, + type => $part->content_type + ); - push( @params, $parameters{filename}, $fh ); + $fh->close; + + push( @uploads, $parameters{name}, $upload ); + push( @params, $parameters{name}, $parameters{filename} ); } else { push( @params, $parameters{name}, $part->content ); @@ -137,20 +151,8 @@ sub prepare_parameters { } } - my $parameters = $c->req->parameters; - - while ( my ( $name, $value ) = splice( @params, 0, 2 ) ) { - - if ( exists $parameters->{$name} ) { - for ( $parameters->{$name} ) { - $_ = [$_] unless ref($_) eq "ARRAY"; - push( @$_, $value ); - } - } - else { - $parameters->{$name} = $value; - } - } + $c->req->_assign_values( $c->req->parameters, \@params ); + $c->req->_assign_values( $c->req->uploads, \@uploads ); } =item $c->prepare_path @@ -209,7 +211,8 @@ sub run { unless ( ref $request ) { - my $uri = ( $request =~ m/http/i ) + my $uri = + ( $request =~ m/http/i ) ? URI->new($request) : URI->new( 'http://localhost' . $request );