Implemented Mouse::Role->does; modified Mouse::Meta::Class->initialise
[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