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