Mouse::Role improved
[gitmo/Mouse.git] / t / 030_roles / failing / 022_role_composition_req_methods.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 16;
7 use Test::Exception;
8
9 use Mouse::Meta::Role::Application::RoleSummation;
10 use Mouse::Meta::Role::Composite;
11
12 {
13     package Role::Foo;
14     use Mouse::Role;
15     requires 'foo';
16
17     package Role::Bar;
18     use Mouse::Role;
19     requires 'bar';
20
21     package Role::ProvidesFoo;
22     use Mouse::Role;
23     sub foo { 'Role::ProvidesFoo::foo' }
24
25     package Role::ProvidesBar;
26     use Mouse::Role;
27     sub bar { 'Role::ProvidesBar::bar' }
28 }
29
30 # test simple requirement
31 {
32     my $c = Mouse::Meta::Role::Composite->new(
33         roles => [
34             Role::Foo->meta,
35             Role::Bar->meta,
36         ]
37     );
38     isa_ok($c, 'Mouse::Meta::Role::Composite');
39
40     is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name');
41
42     lives_ok {
43         Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
44     } '... this succeeds as expected';
45
46     is_deeply(
47         [ sort $c->get_required_method_list ],
48         [ 'bar', 'foo' ],
49         '... got the right list of required methods'
50     );
51 }
52
53 # test requirement satisfied
54 {
55     my $c = Mouse::Meta::Role::Composite->new(
56         roles => [
57             Role::Foo->meta,
58             Role::ProvidesFoo->meta,
59         ]
60     );
61     isa_ok($c, 'Mouse::Meta::Role::Composite');
62
63     is($c->name, 'Role::Foo|Role::ProvidesFoo', '... got the composite role name');
64
65     lives_ok {
66         Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
67     } '... this succeeds as expected';
68
69     is_deeply(
70         [ sort $c->get_required_method_list ],
71         [],
72         '... got the right list of required methods'
73     );
74 }
75
76 # test requirement satisfied
77 {
78     my $c = Mouse::Meta::Role::Composite->new(
79         roles => [
80             Role::Foo->meta,
81             Role::ProvidesFoo->meta,
82             Role::Bar->meta,
83         ]
84     );
85     isa_ok($c, 'Mouse::Meta::Role::Composite');
86
87     is($c->name, 'Role::Foo|Role::ProvidesFoo|Role::Bar', '... got the composite role name');
88
89     lives_ok {
90         Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
91     } '... this succeeds as expected';
92
93     is_deeply(
94         [ sort $c->get_required_method_list ],
95         [ 'bar' ],
96         '... got the right list of required methods'
97     );
98 }
99
100 # test requirement satisfied
101 {
102     my $c = Mouse::Meta::Role::Composite->new(
103         roles => [
104             Role::Foo->meta,
105             Role::ProvidesFoo->meta,
106             Role::ProvidesBar->meta,
107             Role::Bar->meta,
108         ]
109     );
110     isa_ok($c, 'Mouse::Meta::Role::Composite');
111
112     is($c->name, 'Role::Foo|Role::ProvidesFoo|Role::ProvidesBar|Role::Bar', '... got the composite role name');
113
114     lives_ok {
115         Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
116     } '... this succeeds as expected';
117
118     is_deeply(
119         [ sort $c->get_required_method_list ],
120         [ ],
121         '... got the right list of required methods'
122     );
123 }
124
125