some doc cleanup
[gitmo/Moose.git] / t / 030_roles / 022_role_composition_req_methods.t
CommitLineData
fb1e11d5 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
28412c0b 6use Test::More tests => 19;
fb1e11d5 7use Test::Exception;
8
9BEGIN {
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