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