# applying modifiers).
Scope::Upper::reap(sub {
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, "
+ . "but did not inline the constructor.\n"
+ . "This will break catalyst, please pass "
+ . "(replace_constructor => 1) when making your class immutable.\n";
+ }
$meta->make_immutable(replace_constructor => 1) unless $meta->is_immutable;
}, Scope::Upper::SCOPE(1));
# 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;
+use Test::More tests => 4;
+use Test::Exception;
{
package NewTestPlugin;
use Catalyst::Test qw/TestAppPluginWithNewMethod/;
ok request('/foo')->is_success;
is $TestAppPluginWithNewMethod::MODIFIER_FIRED, 1, 'Before modifier was fired correctly.';
+
+throws_ok {
+ package TestAppBadlyImmutable;
+ use Catalyst qw/+NewTestPlugin/;
+
+ 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';
+