From: Tomas Doran Date: Wed, 13 May 2009 18:57:45 +0000 (+0000) Subject: B::Hooks::EndOfScope eats exceptions inside the on_scope_end block. Nyomnyomnyom... X-Git-Tag: 5.80004~22 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=81ef9afd4f446447d48b5844045b388f6d304d2b B::Hooks::EndOfScope eats exceptions inside the on_scope_end block. Nyomnyomnyom. Ergo we were never seeing the die. A warning is good enough for now. Also add some more bleeding tests to prove that you really are not immutable till end of package --- diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 9a75306..4cfd0ad 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -1102,7 +1102,7 @@ EOF B::Hooks::EndOfScope::on_scope_end { my $meta = Class::MOP::get_metaclass_by_name($class); if ( $meta->is_immutable && ! { $meta->immutable_options }->{inline_constructor} ) { - die "You made your application class ($class) immutable, " + warn "You made your application class ($class) immutable, " . "but did not inline the constructor.\n" . "This will break catalyst, please pass " . "(replace_constructor => 1) when making your class immutable.\n"; diff --git a/t/lib/TestAppBadlyImmutable.pm b/t/lib/TestAppBadlyImmutable.pm new file mode 100644 index 0000000..2beefe6 --- /dev/null +++ b/t/lib/TestAppBadlyImmutable.pm @@ -0,0 +1,12 @@ +package TestAppBadlyImmutable; +use Catalyst qw/+TestPluginWithConstructor/; +use Test::More; + +__PACKAGE__->setup; + +ok !__PACKAGE__->meta->is_immutable, 'Am not already immutable'; +__PACKAGE__->meta->make_immutable( inline_constructor => 0 ); +ok __PACKAGE__->meta->is_immutable, 'Am now immutable'; + +1; + diff --git a/t/plugin_new_method_backcompat.t b/t/plugin_new_method_backcompat.t index a5a2e8a..c0cb13a 100644 --- a/t/plugin_new_method_backcompat.t +++ b/t/plugin_new_method_backcompat.t @@ -8,7 +8,7 @@ # 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 => 6; +use Test::More tests => 8; use Test::Exception; use Moose::Util qw/find_meta/; use FindBin; @@ -21,14 +21,9 @@ ok find_meta('TestAppPluginWithConstructor')->is_immutable, ok request('/foo')->is_success, 'Can get /foo'; is $TestAppPluginWithConstructor::MODIFIER_FIRED, 1, 'Before modifier was fired correctly.'; -throws_ok { - package TestAppBadlyImmutable; - use Catalyst qw/+TestPluginWithConstructor/; - - TestAppBadlyImmutable->setup; - - __PACKAGE__->meta->make_immutable( inline_constructor => 0 ); -} - qr/\QYou made your application class (TestAppBadlyImmutable) immutable/, - 'An application class that is already immutable but does not inline the constructor dies at ->setup'; +my $warning; +local $SIG{__WARN__} = sub { $warning = $_[0] }; +eval "use TestAppBadlyImmutable;"; +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';