Commit | Line | Data |
fb1e11d5 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
a28e50e4 |
6 | use Test::More; |
b10dde3a |
7 | use Test::Fatal; |
fb1e11d5 |
8 | |
7ff56534 |
9 | use Moose::Meta::Role::Application::RoleSummation; |
10 | use Moose::Meta::Role::Composite; |
fb1e11d5 |
11 | |
12 | { |
13 | package Role::Foo; |
14 | use Moose::Role; |
d03bd989 |
15 | |
fb1e11d5 |
16 | override foo => sub { 'Role::Foo::foo' }; |
d03bd989 |
17 | |
fb1e11d5 |
18 | package Role::Bar; |
19 | use Moose::Role; |
20 | |
21 | override bar => sub { 'Role::Bar::bar' }; |
d03bd989 |
22 | |
fb1e11d5 |
23 | package Role::FooConflict; |
d03bd989 |
24 | use Moose::Role; |
25 | |
fb1e11d5 |
26 | override foo => sub { 'Role::FooConflict::foo' }; |
d03bd989 |
27 | |
fb1e11d5 |
28 | package Role::FooMethodConflict; |
d03bd989 |
29 | use Moose::Role; |
30 | |
31 | sub foo { 'Role::FooConflict::foo' } |
32 | |
fb1e11d5 |
33 | package Role::BarMethodConflict; |
34 | use Moose::Role; |
d03bd989 |
35 | |
fb1e11d5 |
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 | |
d03bd989 |
49 | is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name'); |
50 | |
b10dde3a |
51 | is( exception { |
fb1e11d5 |
52 | Moose::Meta::Role::Application::RoleSummation->new->apply($c); |
b10dde3a |
53 | }, undef, '... this lives ok' ); |
d03bd989 |
54 | |
fb1e11d5 |
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 |
b10dde3a |
63 | isnt( exception { |
fb1e11d5 |
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 | ); |
b10dde3a |
72 | }, undef, '... this fails as expected' ); |
fb1e11d5 |
73 | |
74 | # test simple overrides w/ conflicts |
b10dde3a |
75 | isnt( exception { |
fb1e11d5 |
76 | Moose::Meta::Role::Application::RoleSummation->new->apply( |
d03bd989 |
77 | Moose::Meta::Role::Composite->new( |
fb1e11d5 |
78 | roles => [ |
79 | Role::Foo->meta, |
80 | Role::FooMethodConflict->meta, |
81 | ] |
82 | ) |
83 | ); |
b10dde3a |
84 | }, undef, '... this fails as expected' ); |
fb1e11d5 |
85 | |
86 | |
87 | # test simple overrides w/ conflicts |
b10dde3a |
88 | isnt( exception { |
fb1e11d5 |
89 | Moose::Meta::Role::Application::RoleSummation->new->apply( |
90 | Moose::Meta::Role::Composite->new( |
91 | roles => [ |
92 | Role::Foo->meta, |
d03bd989 |
93 | Role::Bar->meta, |
94 | Role::FooConflict->meta, |
fb1e11d5 |
95 | ] |
96 | ) |
97 | ); |
b10dde3a |
98 | }, undef, '... this fails as expected' ); |
fb1e11d5 |
99 | |
100 | |
101 | # test simple overrides w/ conflicts |
b10dde3a |
102 | isnt( exception { |
fb1e11d5 |
103 | Moose::Meta::Role::Application::RoleSummation->new->apply( |
d03bd989 |
104 | Moose::Meta::Role::Composite->new( |
fb1e11d5 |
105 | roles => [ |
106 | Role::Foo->meta, |
d03bd989 |
107 | Role::Bar->meta, |
108 | Role::FooMethodConflict->meta, |
fb1e11d5 |
109 | ] |
110 | ) |
111 | ); |
b10dde3a |
112 | }, undef, '... this fails as expected' ); |
a28e50e4 |
113 | |
114 | done_testing; |