Commit | Line | Data |
67199842 |
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; |
6cfa1e5e |
15 | |
67199842 |
16 | override foo => sub { 'Role::Foo::foo' }; |
6cfa1e5e |
17 | |
67199842 |
18 | package Role::Bar; |
19 | use Mouse::Role; |
20 | |
21 | override bar => sub { 'Role::Bar::bar' }; |
6cfa1e5e |
22 | |
67199842 |
23 | package Role::FooConflict; |
6cfa1e5e |
24 | use Mouse::Role; |
25 | |
67199842 |
26 | override foo => sub { 'Role::FooConflict::foo' }; |
6cfa1e5e |
27 | |
67199842 |
28 | package Role::FooMethodConflict; |
6cfa1e5e |
29 | use Mouse::Role; |
30 | |
31 | sub foo { 'Role::FooConflict::foo' } |
32 | |
67199842 |
33 | package Role::BarMethodConflict; |
34 | use Mouse::Role; |
6cfa1e5e |
35 | |
67199842 |
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 | |
6cfa1e5e |
49 | is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name'); |
50 | |
67199842 |
51 | lives_ok { |
52 | Mouse::Meta::Role::Application::RoleSummation->new->apply($c); |
6cfa1e5e |
53 | } '... this lives ok'; |
54 | |
67199842 |
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( |
6cfa1e5e |
77 | Mouse::Meta::Role::Composite->new( |
67199842 |
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, |
6cfa1e5e |
93 | Role::Bar->meta, |
94 | Role::FooConflict->meta, |
67199842 |
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( |
6cfa1e5e |
104 | Mouse::Meta::Role::Composite->new( |
67199842 |
105 | roles => [ |
106 | Role::Foo->meta, |
6cfa1e5e |
107 | Role::Bar->meta, |
108 | Role::FooMethodConflict->meta, |
67199842 |
109 | ] |
110 | ) |
111 | ); |
112 | } '... this fails as expected'; |