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