X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FTest.pm;h=911878299bbb171cf46889788cf8686a10d523f4;hp=5e0ee163a61bf650d6ab57db1b4665781ab4f034;hb=85f0a66f2b5de7a028ed0e4960435784baff4a37;hpb=269194b4f9de3905430a2d1f21f68da13b2b9ed9 diff --git a/lib/Catalyst/Test.pm b/lib/Catalyst/Test.pm index 5e0ee16..9118782 100644 --- a/lib/Catalyst/Test.pm +++ b/lib/Catalyst/Test.pm @@ -30,27 +30,32 @@ my $build_exports = sub { my $get = sub { $request->(@_)->content }; - my $crequest = sub { + my $ctx_request = sub { my $me = ref $self || $self; - ### throw an exception if crequest is being used against a remote + ### throw an exception if ctx_request is being used against a remote ### server Catalyst::Exception->throw("$me only works with local requests, not remote") if $ENV{CATALYST_SERVER}; + ### check explicitly for the class here, or the Cat->meta call will blow + ### up in our face + Catalyst::Exception->throw("Must specify a test app: use Catalyst::Test 'TestApp'") unless $class; + ### place holder for $c after the request finishes; reset every time ### requests are done. my $c; ### hook into 'dispatch' -- the function gets called after all plugins ### have done their work, and it's an easy place to capture $c. - no warnings 'redefine'; - my $dispatch = Catalyst->can('dispatch'); - local *Catalyst::dispatch = sub { - $c = shift; - $dispatch->( $c, @_ ); - }; + my $meta = Catalyst->meta; + $meta->make_mutable; + $meta->add_after_method_modifier( "dispatch", sub { + $c = shift; + }); + $meta->make_immutable; + ### do the request; C::T::request will know about the class name, and ### we've already stopped it from doing remote requests above. my $res = $request->( @_ ); @@ -60,9 +65,9 @@ my $build_exports = sub { }; return { - request => $request, - get => $get, - crequest => $crequest, + request => $request, + get => $get, + ctx_request => $ctx_request, content_like => sub { my $action = shift; return Test::More->builder->like($get->($action),@_); @@ -118,7 +123,7 @@ Catalyst::Test - Test Catalyst Applications use Catalyst::Test 'TestApp'; my $content = get('index.html'); # Content as string my $response = request('index.html'); # HTTP::Response object - my($res, $c) = crequest('index.html'); # HTTP::Response & context object + my($res, $c) = ctx_request('index.html'); # HTTP::Response & context object use HTTP::Request::Common; my $response = request POST '/foo', [ @@ -165,10 +170,10 @@ L or remotely if you define the CATALYST_SERVER environment variable. This module also adds a few catalyst specific testing methods as displayed in the method section. -The and functions take either a URI or an L +The L and L functions take either a URI or an L object. -=head2 METHODS +=head1 METHODS =head2 $content = get( ... ) @@ -189,7 +194,7 @@ method and the L method below: =head2 $res = request( ... ); -Returns a C object. Accepts an optional hashref for request +Returns a L object. Accepts an optional hashref for request header configuration; currently only supports setting 'host' value. my $res = request('foo/bar?test=1'); @@ -197,10 +202,10 @@ header configuration; currently only supports setting 'host' value. =head1 FUNCTIONS -=head2 ($res, $c) = crequest( ... ); +=head2 ($res, $c) = ctx_request( ... ); -Works exactly like C, except it also returns the -catalyst context object, C<$c>. Note that this only works for local requests. +Works exactly like L, except it also returns the Catalyst context object, +C<$c>. Note that this only works for local requests. =head2 $res = Catalyst::Test::local_request( $AppClass, $url ); @@ -301,23 +306,23 @@ sub _customize_request { =head2 action_ok -Fetches the given url and check that the request was successful +Fetches the given URL and check that the request was successful =head2 action_redirect -Fetches the given url and check that the request was a redirect +Fetches the given URL and check that the request was a redirect =head2 action_notfound -Fetches the given url and check that the request was not found +Fetches the given URL and check that the request was not found =head2 content_like -Fetches the given url and matches the content against it. +Fetches the given URL and matches the content against it. =head2 contenttype_is -Check for given mime type +Check for given MIME type =head1 SEE ALSO