Add another MOOSE_TEST_MD option, MooseX
[gitmo/Moose.git] / t / roles / role_composition_override.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Fatal;
8
9 use Moose::Meta::Role::Application::RoleSummation;
10 use Moose::Meta::Role::Composite;
11
12 {
13     package Role::Foo;
14     use Moose::Role;
15
16     override foo => sub { 'Role::Foo::foo' };
17
18     package Role::Bar;
19     use Moose::Role;
20
21     override bar => sub { 'Role::Bar::bar' };
22
23     package Role::FooConflict;
24     use Moose::Role;
25
26     override foo => sub { 'Role::FooConflict::foo' };
27
28     package Role::FooMethodConflict;
29     use Moose::Role;
30
31     sub foo { 'Role::FooConflict::foo' }
32
33     package Role::BarMethodConflict;
34     use Moose::Role;
35
36     sub bar { 'Role::BarConflict::bar' }
37 }
38
39 # test simple overrides
40 {
41     my $c = Moose::Meta::Role::Composite->new(
42         roles => [
43             Role::Foo->meta,
44             Role::Bar->meta,
45         ]
46     );
47     isa_ok($c, 'Moose::Meta::Role::Composite');
48
49     is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name');
50
51     is( exception {
52         Moose::Meta::Role::Application::RoleSummation->new->apply($c);
53     }, undef, '... 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 isnt( exception {
64     Moose::Meta::Role::Application::RoleSummation->new->apply(
65         Moose::Meta::Role::Composite->new(
66             roles => [
67                 Role::Foo->meta,
68                 Role::FooConflict->meta,
69             ]
70         )
71     );
72 }, undef, '... this fails as expected' );
73
74 # test simple overrides w/ conflicts
75 isnt( exception {
76     Moose::Meta::Role::Application::RoleSummation->new->apply(
77         Moose::Meta::Role::Composite->new(
78             roles => [
79                 Role::Foo->meta,
80                 Role::FooMethodConflict->meta,
81             ]
82         )
83     );
84 }, undef, '... this fails as expected' );
85
86
87 # test simple overrides w/ conflicts
88 isnt( exception {
89     Moose::Meta::Role::Application::RoleSummation->new->apply(
90         Moose::Meta::Role::Composite->new(
91             roles => [
92                 Role::Foo->meta,
93                 Role::Bar->meta,
94                 Role::FooConflict->meta,
95             ]
96         )
97     );
98 }, undef, '... this fails as expected' );
99
100
101 # test simple overrides w/ conflicts
102 isnt( exception {
103     Moose::Meta::Role::Application::RoleSummation->new->apply(
104         Moose::Meta::Role::Composite->new(
105             roles => [
106                 Role::Foo->meta,
107                 Role::Bar->meta,
108                 Role::FooMethodConflict->meta,
109             ]
110         )
111     );
112 }, undef, '... this fails as expected' );
113
114 done_testing;