Allow parameterized roles to be applied as plugins.
[catagits/Catalyst-Runtime.git] / t / lib / PluginTestApp / Controller / Root.pm
1 package PluginTestApp::Controller::Root;
2 use Test::More;
3
4 use base 'Catalyst::Controller';
5
6 #use Catalyst qw(
7 #        Test::Plugin
8 #        +TestApp::Plugin::FullyQualified
9 #        );
10
11 __PACKAGE__->config->{namespace} = '';
12
13 sub compile_time_plugins : Local {
14     my ( $self, $c ) = @_;
15
16     isa_ok $c, 'Catalyst::Plugin::Test::Plugin';
17     isa_ok $c, 'TestApp::Plugin::FullyQualified';
18
19     can_ok $c, 'registered_plugins';
20     $c->_test_plugins;
21
22     $c->res->body("ok");
23 }
24
25 sub run_time_plugins : Local {
26     my ( $self, $c ) = @_;
27
28     $c->_test_plugins;
29     my $faux_plugin = 'Faux::Plugin';
30
31 # Trick perl into thinking the plugin is already loaded
32     $INC{'Faux/Plugin.pm'} = 1;
33
34     ref($c)->plugin( faux => $faux_plugin );
35
36     isa_ok $c, 'Catalyst::Plugin::Test::Plugin';
37
38     # applied parameterized role
39     if (eval { require MooseX::Role::Parameterized; 1 }) {
40         can_ok $c, 'affe';
41         is $c->affe, 'birne', 'right method created by parameterized role';
42     }
43
44     isa_ok $c, 'TestApp::Plugin::FullyQualified';
45     ok !$c->isa($faux_plugin),
46     '... and it should not inherit from the instant plugin';
47     can_ok $c, 'faux';
48     is $c->faux->count, 1, '... and it should behave correctly';
49     is_deeply [ $c->registered_plugins ],
50     [
51         qw/Catalyst::Plugin::Test::Plugin
52         Faux::Plugin
53         TestApp::Plugin::FullyQualified/
54         ],
55     'registered_plugins() should report all plugins';
56     ok $c->registered_plugins('Faux::Plugin'),
57     '... and even the specific instant plugin';
58
59     $c->res->body("ok");
60 }
61
62 1;