From: Tomas Doran Date: Wed, 13 May 2009 18:15:18 +0000 (+0000) Subject: Move the inline packages out into their own files so that the new test passes. All... X-Git-Tag: 5.80004~25 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=6a8f85af6d0032d3f6aecc0ce9420ceb523910b2 Move the inline packages out into their own files so that the new test passes. All sane apps have it like this anyway, I may just have to go beat on the test suites of some of the modules I've scribbled in TODO --- diff --git a/TODO b/TODO index eb2bafb..69fdf4d 100644 --- 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 index 0000000..30818f8 --- /dev/null +++ b/t/lib/TestAppPluginWithConstructor.pm @@ -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 index 0000000..e5bdb1c --- /dev/null +++ b/t/lib/TestPluginWithConstructor.pm @@ -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; + diff --git a/t/plugin_new_method_backcompat.t b/t/plugin_new_method_backcompat.t index 7edabfc..d7778b8 100644 --- a/t/plugin_new_method_backcompat.t +++ b/t/plugin_new_method_backcompat.t @@ -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;