Commit | Line | Data |
67199842 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More tests => 16; |
7 | use Test::Exception; |
8 | |
9 | use Mouse::Meta::Role::Application::RoleSummation; |
10 | use Mouse::Meta::Role::Composite; |
11 | |
12 | { |
13 | package Role::Foo; |
6cfa1e5e |
14 | use Mouse::Role; |
67199842 |
15 | requires 'foo'; |
6cfa1e5e |
16 | |
67199842 |
17 | package Role::Bar; |
18 | use Mouse::Role; |
19 | requires 'bar'; |
6cfa1e5e |
20 | |
67199842 |
21 | package Role::ProvidesFoo; |
6cfa1e5e |
22 | use Mouse::Role; |
67199842 |
23 | sub foo { 'Role::ProvidesFoo::foo' } |
6cfa1e5e |
24 | |
67199842 |
25 | package Role::ProvidesBar; |
6cfa1e5e |
26 | use Mouse::Role; |
27 | sub bar { 'Role::ProvidesBar::bar' } |
67199842 |
28 | } |
29 | |
30 | # test simple requirement |
31 | { |
32 | my $c = Mouse::Meta::Role::Composite->new( |
33 | roles => [ |
34 | Role::Foo->meta, |
35 | Role::Bar->meta, |
6cfa1e5e |
36 | ] |
67199842 |
37 | ); |
38 | isa_ok($c, 'Mouse::Meta::Role::Composite'); |
39 | |
6cfa1e5e |
40 | is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name'); |
41 | |
67199842 |
42 | lives_ok { |
43 | Mouse::Meta::Role::Application::RoleSummation->new->apply($c); |
6cfa1e5e |
44 | } '... this succeeds as expected'; |
45 | |
67199842 |
46 | is_deeply( |
47 | [ sort $c->get_required_method_list ], |
48 | [ 'bar', 'foo' ], |
49 | '... got the right list of required methods' |
50 | ); |
51 | } |
52 | |
53 | # test requirement satisfied |
54 | { |
55 | my $c = Mouse::Meta::Role::Composite->new( |
56 | roles => [ |
57 | Role::Foo->meta, |
58 | Role::ProvidesFoo->meta, |
59 | ] |
60 | ); |
61 | isa_ok($c, 'Mouse::Meta::Role::Composite'); |
62 | |
6cfa1e5e |
63 | is($c->name, 'Role::Foo|Role::ProvidesFoo', '... got the composite role name'); |
64 | |
65 | lives_ok { |
67199842 |
66 | Mouse::Meta::Role::Application::RoleSummation->new->apply($c); |
6cfa1e5e |
67 | } '... this succeeds as expected'; |
68 | |
67199842 |
69 | is_deeply( |
70 | [ sort $c->get_required_method_list ], |
71 | [], |
72 | '... got the right list of required methods' |
73 | ); |
74 | } |
75 | |
76 | # test requirement satisfied |
77 | { |
78 | my $c = Mouse::Meta::Role::Composite->new( |
79 | roles => [ |
80 | Role::Foo->meta, |
81 | Role::ProvidesFoo->meta, |
6cfa1e5e |
82 | Role::Bar->meta, |
67199842 |
83 | ] |
84 | ); |
85 | isa_ok($c, 'Mouse::Meta::Role::Composite'); |
86 | |
6cfa1e5e |
87 | is($c->name, 'Role::Foo|Role::ProvidesFoo|Role::Bar', '... got the composite role name'); |
88 | |
67199842 |
89 | lives_ok { |
90 | Mouse::Meta::Role::Application::RoleSummation->new->apply($c); |
6cfa1e5e |
91 | } '... this succeeds as expected'; |
92 | |
67199842 |
93 | is_deeply( |
94 | [ sort $c->get_required_method_list ], |
95 | [ 'bar' ], |
96 | '... got the right list of required methods' |
97 | ); |
98 | } |
99 | |
100 | # test requirement satisfied |
101 | { |
102 | my $c = Mouse::Meta::Role::Composite->new( |
103 | roles => [ |
104 | Role::Foo->meta, |
105 | Role::ProvidesFoo->meta, |
6cfa1e5e |
106 | Role::ProvidesBar->meta, |
107 | Role::Bar->meta, |
67199842 |
108 | ] |
109 | ); |
110 | isa_ok($c, 'Mouse::Meta::Role::Composite'); |
111 | |
6cfa1e5e |
112 | is($c->name, 'Role::Foo|Role::ProvidesFoo|Role::ProvidesBar|Role::Bar', '... got the composite role name'); |
113 | |
67199842 |
114 | lives_ok { |
115 | Mouse::Meta::Role::Application::RoleSummation->new->apply($c); |
6cfa1e5e |
116 | } '... this succeeds as expected'; |
117 | |
67199842 |
118 | is_deeply( |
119 | [ sort $c->get_required_method_list ], |
120 | [ ], |
121 | '... got the right list of required methods' |
122 | ); |
123 | } |
124 | |
125 | |