include test for failure mode
[catagits/Catalyst-Runtime.git] / t / plugin_new_method_backcompat.t
index 7aaef8b..74e8f10 100644 (file)
@@ -8,10 +8,45 @@
 # 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 => 3;
+
+{
+    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 Test::More tests => 3;
+use lib "$FindBin::Bin/lib";
 
-use Catalyst::Test qw/TestAppPluginWithNewMethod/; # 1 test for adding a modifer not throwing.
+use Catalyst::Test qw/TestAppPluginWithNewMethod/;
 ok request('/foo')->is_success; 
 is $TestAppPluginWithNewMethod::MODIFIER_FIRED, 1, 'Before modifier was fired correctly.';