Move the inline packages out into their own files so that the new test passes. All...
Tomas Doran [Wed, 13 May 2009 18:15:18 +0000 (18:15 +0000)]
TODO
t/lib/TestAppPluginWithConstructor.pm [new file with mode: 0644]
t/lib/TestPluginWithConstructor.pm [new file with mode: 0644]
t/plugin_new_method_backcompat.t

diff --git a/TODO b/TODO
index eb2bafb..69fdf4d 100644 (file)
--- a/TODO
+++ b/TODO
@@ -9,11 +9,17 @@ Known Bugs:
    - Certain errors in your application to do with using other code which does
      not exist can cause an 'Unknown error' issue.
 
-     Test app: http://github.com/bobtfish/catalyst-app-bug-unknown-error/tree/master
-     < rafl> 21:13:03 < vincent> hah, Class::MOP::Method::Generated->_eval_closure
-     < rafl> 21:13:40 < vincent> right, shove a local $@ in there
-     < rafl> i can do that and add tests in an hour or two
+     This is now fixed, by moving back to B::Hooks::EndOfScope, but this (used
+     to) cause issues with the following modules:
 
+     - Catalyst-Plugin-Session-State-Cookie
+     - Catalyst-Plugin-Session-Store-FastMmap
+     - Catalyst-Plugin-Session-PerUser
+     - Catalyst-Plugin-Session-Store-File
+     - Catalyst-Authentication-Credential-HTTP
+     - Catalyst-Plugin-SmartURI
+
+     according to comments in r8991. Retest these before shipping anything..
 
    - -restarter.t will fail if you don't have ::StashChange installed, and
       also quite often at other times.
diff --git a/t/lib/TestAppPluginWithConstructor.pm b/t/lib/TestAppPluginWithConstructor.pm
new file mode 100644 (file)
index 0000000..30818f8
--- /dev/null
@@ -0,0 +1,22 @@
+# See t/plugin_new_method_backcompat.t
+package TestAppPluginWithConstructor;
+use Test::Exception;
+use Catalyst qw/+TestPluginWithConstructor/;
+use Moose;
+BEGIN { extends qw/Catalyst Catalyst::Controller/ } # Ewww, FIXME.
+
+sub foo : Local {
+    my ($self, $c) = @_;
+    $c->res->body('foo');
+}
+
+__PACKAGE__->setup;
+our $MODIFIER_FIRED = 0;
+
+lives_ok {
+    before 'dispatch' => sub { $MODIFIER_FIRED = 1 }
+} 'Can apply method modifier';
+no Moose;
+
+1;
+
diff --git a/t/lib/TestPluginWithConstructor.pm b/t/lib/TestPluginWithConstructor.pm
new file mode 100644 (file)
index 0000000..e5bdb1c
--- /dev/null
@@ -0,0 +1,11 @@
+# See t/plugin_new_method_backcompat.t
+package TestPluginWithConstructor;
+use strict;
+use warnings;
+sub new {
+    my $class = shift;
+    return bless $_[0], $class;
+}
+
+1;
+
index 7edabfc..d7778b8 100644 (file)
@@ -1,60 +1,25 @@
 # Test that plugins with their own new method don't break applications.
 
-# 5.70 creates all of the request/response structure itself in prepare, 
+# 5.70 creates all of the request/response structure itself in prepare,
 # and as the new method in our plugin just blesses our args, that works nicely.
 
-# In 5.80, we rely on the new method to appropriately initialise data 
+# In 5.80, we rely on the new method to appropriately initialise data
 # structures, and therefore we need to inline a new method on MyApp to ensure
 # that plugins don't get it wrong for us.
 
 # Also tests method modifiers and etc in MyApp.pm still work as expected.
 use Test::More tests => 4;
 use Test::Exception;
-
-{
-    package NewTestPlugin;
-    use strict;
-    use warnings;
-    sub new { 
-        my $class = shift;
-        return bless $_[0], $class; 
-    }
-}
-
-{   # This is all in the same file so that the setup method on the 
-    # application is called at runtime, rather than at compile time.
-    # This ensures that the end of scope hook has to happen at runtime
-    # correctly, otherwise the test will fail (ergo the switch from
-    # B::Hooks::EndOfScope to Sub::Uplevel)
-    package TestAppPluginWithNewMethod;
-    use Test::Exception;
-    use Catalyst qw/+NewTestPlugin/;
-
-    sub foo : Local {
-        my ($self, $c) = @_;
-        $c->res->body('foo');
-    }
-
-    use Moose; # Just testing method modifiers still work.
-    __PACKAGE__->setup;
-    our $MODIFIER_FIRED = 0;
-
-    lives_ok {
-        before 'dispatch' => sub { $MODIFIER_FIRED = 1 }
-    } 'Can apply method modifier';
-    no Moose;
-}
-
 use FindBin;
 use lib "$FindBin::Bin/lib";
 
-use Catalyst::Test qw/TestAppPluginWithNewMethod/;
-ok request('/foo')->is_success; 
-is $TestAppPluginWithNewMethod::MODIFIER_FIRED, 1, 'Before modifier was fired correctly.';
+use Catalyst::Test qw/TestAppPluginWithConstructor/;
+ok request('/foo')->is_success;
+is $TestAppPluginWithConstructor::MODIFIER_FIRED, 1, 'Before modifier was fired correctly.';
 
 throws_ok {
     package TestAppBadlyImmutable;
-    use Catalyst qw/+NewTestPlugin/;
+    use Catalyst qw/+TestPluginWithConstructor/;
 
     TestAppBadlyImmutable->setup;