X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FTest.pm;h=f7afec33ac4e89a7a3b981de3f181942cd55ebe1;hb=8fbcd90cdb30aed53d22d1cdbad95880f1c11693;hp=9127e71a145f47cadab4203048ea5ccc96374093;hpb=1a80619d839bc8dd6321648d8140a795bf85025e;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/Test.pm b/lib/Catalyst/Engine/Test.pm index 9127e71..f7afec3 100644 --- a/lib/Catalyst/Engine/Test.pm +++ b/lib/Catalyst/Engine/Test.pm @@ -3,17 +3,16 @@ package Catalyst::Engine::Test; use strict; use base 'Catalyst::Engine'; -use CGI::Cookie; 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/lwp/); +__PACKAGE__->mk_accessors(qw/http/); -Class::Struct::struct 'Catalyst::Engine::Test::LWP' => { +Class::Struct::struct 'Catalyst::Engine::Test::HTTP' => { request => 'HTTP::Request', response => 'HTTP::Response', hostname => '$', @@ -50,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_ref( $c->response->body_ref ); +} + =item $c->finalize_headers =cut @@ -57,33 +65,20 @@ This class overloads some methods from C. sub finalize_headers { my $c = shift; - $c->lwp->response->code( $c->response->status || 200 ); + $c->http->response->code( $c->response->status ); for my $name ( $c->response->headers->header_field_names ) { - $c->lwp->response->header( $name => $c->response->header($name) ); - } - - while ( my ( $name, $cookie ) = each %{ $c->response->cookies } ) { - my $cookie = CGI::Cookie->new( - -name => $name, - -value => $cookie->{value}, - -expires => $cookie->{expires}, - -domain => $cookie->{domain}, - -path => $cookie->{path}, - -secure => $cookie->{secure} || 0 - ); - - $c->lwp->response->header( 'Set-Cookie' => $cookie->as_string ); + $c->http->response->push_header( $name => [ $c->response->header($name) ] ); } } -=item $c->finalize_output +=item $c->prepare_body =cut -sub finalize_output { +sub prepare_body { my $c = shift; - $c->lwp->response->content_ref( \$c->response->{output} ); + $c->request->body( $c->http->request->content ); } =item $c->prepare_connection @@ -92,20 +87,8 @@ sub finalize_output { sub prepare_connection { my $c = shift; - $c->req->hostname( $c->lwp->hostname ); - $c->req->address( $c->lwp->address ); -} - -=item $c->prepare_cookies - -=cut - -sub prepare_cookies { - my $c = shift; - - if ( my $header = $c->request->header('Cookie') ) { - $c->req->cookies( { CGI::Cookie->parse($header) } ); - } + $c->req->hostname( $c->http->hostname ); + $c->req->address( $c->http->address ); } =item $c->prepare_headers @@ -114,8 +97,8 @@ sub prepare_cookies { sub prepare_headers { my $c = shift; - $c->req->method( $c->lwp->request->method ); - $c->req->headers( $c->lwp->request->headers ); + $c->req->method( $c->http->request->method ); + $c->req->headers( $c->http->request->headers ); } =item $c->prepare_parameters @@ -125,8 +108,9 @@ sub prepare_headers { sub prepare_parameters { my $c = shift; - my @params = (); - my $request = $c->lwp->request; + my ( @params, @uploads ); + + my $request = $c->http->request; push( @params, $request->uri->query_form ); @@ -145,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 ); @@ -163,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->request->param(\@params); + $c->request->upload(\@uploads); } =item $c->prepare_path @@ -188,9 +164,9 @@ sub prepare_path { my $base; { - my $scheme = $c->lwp->request->uri->scheme; - my $host = $c->lwp->request->uri->host; - my $port = $c->lwp->request->uri->port; + my $scheme = $c->http->request->uri->scheme; + my $host = $c->http->request->uri->host; + my $port = $c->http->request->uri->port; $base = URI->new; $base->scheme($scheme); @@ -200,7 +176,8 @@ sub prepare_path { $base = $base->canonical->as_string; } - my $path = $c->lwp->request->uri->path || '/'; + my $path = $c->http->request->uri->path || '/'; + $path =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; $path =~ s/^\///; $c->req->base($base); @@ -212,8 +189,8 @@ sub prepare_path { =cut sub prepare_request { - my ( $c, $lwp ) = @_; - $c->lwp($lwp); + my ( $c, $http ) = @_; + $c->http($http); } =item $c->prepare_uploads @@ -234,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 ); @@ -245,16 +223,21 @@ sub run { $request = HTTP::Request->new( 'GET', $request ); } - my $lwp = Catalyst::Engine::Test::LWP->new( + my $host = sprintf( '%s:%d', $request->uri->host, $request->uri->port ); + $request->header( 'Host' => $host ); + + my $http = Catalyst::Engine::Test::HTTP->new( address => '127.0.0.1', hostname => 'localhost', request => $request, response => HTTP::Response->new ); - $class->handler($lwp); + $http->response->date(time); + + $class->handler($http); - return $lwp->response; + return $http->response; } =back