d7778b8c12291cc676fd4f518c37e09b8f4a6ed7
[catagits/Catalyst-Runtime.git] / t / plugin_new_method_backcompat.t
1 # Test that plugins with their own new method don't break applications.
2
3 # 5.70 creates all of the request/response structure itself in prepare,
4 # and as the new method in our plugin just blesses our args, that works nicely.
5
6 # In 5.80, we rely on the new method to appropriately initialise data
7 # structures, and therefore we need to inline a new method on MyApp to ensure
8 # that plugins don't get it wrong for us.
9
10 # Also tests method modifiers and etc in MyApp.pm still work as expected.
11 use Test::More tests => 4;
12 use Test::Exception;
13 use FindBin;
14 use lib "$FindBin::Bin/lib";
15
16 use Catalyst::Test qw/TestAppPluginWithConstructor/;
17 ok request('/foo')->is_success;
18 is $TestAppPluginWithConstructor::MODIFIER_FIRED, 1, 'Before modifier was fired correctly.';
19
20 throws_ok {
21     package TestAppBadlyImmutable;
22     use Catalyst qw/+TestPluginWithConstructor/;
23
24     TestAppBadlyImmutable->setup;
25
26     __PACKAGE__->meta->make_immutable( inline_constructor => 0 );
27 }
28     qr/\QYou made your application class (TestAppBadlyImmutable) immutable/,
29     'An application class that is already immutable but does not inline the constructor dies at ->setup';
30