Fix infinite recursion in tests under Catalyst 5.90040
Dagfinn Ilmari Mannsåker [Sun, 16 Jun 2013 14:18:52 +0000 (15:18 +0100)]
Instead of trying to neuter Catalyst's prohibition against multiple
calls to ->setup(), just do the different tests in different files.

Changes
t/catalyst-request-rest-custom-nonrest-request-class.t [new file with mode: 0644]
t/catalyst-request-rest-custom-rest-request-class.t [new file with mode: 0644]
t/catalyst-traitfor-request-rest.t
t/lib/Test/Catalyst/Action/REST.pm

diff --git a/Changes b/Changes
index 6770896..1b721ed 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,5 @@
+ Fix infinite recursion in tests under Catalyst 5.90040
+
 Mon 22 Apr 2013 14:36:53 BST - Release 1.10
  Use YAML rather than JSON in basic tests
 
diff --git a/t/catalyst-request-rest-custom-nonrest-request-class.t b/t/catalyst-request-rest-custom-nonrest-request-class.t
new file mode 100644 (file)
index 0000000..7bb6405
--- /dev/null
@@ -0,0 +1,24 @@
+use strict;
+use warnings;
+use Test::More;
+use FindBin;
+use Moose ();
+use lib ( "$FindBin::Bin/lib" );
+
+my $test = 'Test::Catalyst::Action::REST';
+
+my $meta = Moose::Meta::Class->create_anon_class(
+    superclasses => ['Catalyst::Request'],
+);
+$meta->add_method('__random_method' => sub { 42 });
+
+$ENV{CAR_TEST_REQUEST_CLASS} = $meta->name;
+
+use_ok $test;
+ok($test->request_class->does('Catalyst::TraitFor::Request::REST'),
+  'Request class does Catalyst::TraitFor::Request::REST');
+isnt $test->request_class, $meta->name, 'Different request class';
+ok $test->request_class->can('__random_method'), 'Is right class';
+ok $test->request_class->can('data'), 'Also smells like REST subclass';
+
+done_testing;
diff --git a/t/catalyst-request-rest-custom-rest-request-class.t b/t/catalyst-request-rest-custom-rest-request-class.t
new file mode 100644 (file)
index 0000000..8b30e6e
--- /dev/null
@@ -0,0 +1,24 @@
+use strict;
+use warnings;
+use Test::More;
+use FindBin;
+use Moose ();
+use lib ( "$FindBin::Bin/lib" );
+
+my $test = 'Test::Catalyst::Action::REST';
+
+my $meta = Moose::Meta::Class->create_anon_class(
+    # The test app has ForBrowsers actions, so we need that to not have
+    # the request class replaced
+    superclasses => ['Catalyst::Request::REST::ForBrowsers'],
+);
+
+$ENV{CAR_TEST_REQUEST_CLASS} = $meta->name;
+
+use_ok $test;
+ok($test->request_class->does('Catalyst::TraitFor::Request::REST'),
+  'Request class does Catalyst::TraitFor::Request::REST');
+is $test->request_class, $meta->name, 'Request class kept';
+ok $test->request_class->can('data'), 'Also smells like REST subclass';
+
+done_testing;
index e6c498c..93e8ba6 100644 (file)
@@ -182,36 +182,6 @@ for my $class ( $anon_class, 'Catalyst::Request::REST' ) {
     }
 }
 
-{
-  local %ENV=%ENV;
-  $ENV{CATALYST_DEBUG} = 0;
-  my $test = 'Test::Catalyst::Action::REST';
-  use_ok $test;
-  ok($test->request_class->does('Catalyst::TraitFor::Request::REST'),
-    'Request does Catalyst::TraitFor::Request::REST');
-
-  my $meta = Moose::Meta::Class->create_anon_class(
-      superclasses => ['Catalyst::Request'],
-  );
-  $meta->add_method('__random_method' => sub { 42 });
-
-  $test->request_class($meta->name);
-  # FIXME - setup_finished(0) is evil!
-  eval { $test->setup_finished(0); $test->setup };
-  ok !$@, 'Can setup again';
-  isnt $test->request_class, $meta->name, 'Different request class';
-  ok $test->request_class->can('__random_method'), 'Is right class';
-  ok $test->request_class->can('data'), 'Also smells like REST subclass';
-
-  {
-    package My::Request;
-    use base 'Catalyst::Request::REST';
-  }
-  $test->request_class('My::Request');
-  eval { $test->setup_finished(0); $test->setup };
-  is $@, '', 'no error from Request::REST subclass';
-}
-
 done_testing;
 
 package MockContext;
index 0b992b7..95ed5bf 100644 (file)
@@ -16,6 +16,8 @@ __PACKAGE__->config(
         content_type_stash_key => 'serialize_content_type',
     },
 );
+__PACKAGE__->request_class($ENV{CAR_TEST_REQUEST_CLASS})
+    if $ENV{CAR_TEST_REQUEST_CLASS};
 __PACKAGE__->setup;
 __PACKAGE__->log( Test::Catalyst::Log->new )
     unless __PACKAGE__->debug;