X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=t%2Fplugin_new_method_backcompat.t;h=28455fb8e69ffced73bed05a957308307d258837;hp=74e8f109f3148225703867e8cd4b5a2ecfcc0e7f;hb=68b4caec7950a4dc7ed003fe0e78f73baf81f9d3;hpb=ae29b412955743885e80350085167b54b69672da diff --git a/t/plugin_new_method_backcompat.t b/t/plugin_new_method_backcompat.t index 74e8f10..28455fb 100644 --- a/t/plugin_new_method_backcompat.t +++ b/t/plugin_new_method_backcompat.t @@ -1,52 +1,34 @@ # 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 => 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 Test::More; +use Moose::Util qw/find_meta/; 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/; +TestAppPluginWithConstructor->_make_immutable_if_needed; +ok find_meta('TestAppPluginWithConstructor')->is_immutable, + 'Am immutable after use'; + +ok request('/foo')->is_success, 'Can get /foo'; +is $TestAppPluginWithConstructor::MODIFIER_FIRED, 1, 'Before modifier was fired correctly.'; + +my $warning; +eval "use TestAppBadlyImmutable"; +local $SIG{__WARN__} = sub { $warning .= $_[0] }; + +TestAppBadlyImmutable->_make_immutable_if_needed; + +like $warning, qr/\QYou made your application class (TestAppBadlyImmutable) immutable/, + 'An application class that is already immutable but does not inline the constructor warns at ->setup'; + +done_testing; +