A tiny tweak
[gitmo/Mouse.git] / t / 030_roles / failing / 022_role_composition_req_methods.t
CommitLineData
67199842 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 16;
7use Test::Exception;
8
9use Mouse::Meta::Role::Application::RoleSummation;
10use Mouse::Meta::Role::Composite;
11
12{
13 package Role::Foo;
14 use Mouse::Role;
15 requires 'foo';
16
17 package Role::Bar;
18 use Mouse::Role;
19 requires 'bar';
20
21 package Role::ProvidesFoo;
22 use Mouse::Role;
23 sub foo { 'Role::ProvidesFoo::foo' }
24
25 package Role::ProvidesBar;
26 use Mouse::Role;
27 sub bar { 'Role::ProvidesBar::bar' }
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,
36 ]
37 );
38 isa_ok($c, 'Mouse::Meta::Role::Composite');
39
40 is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name');
41
42 lives_ok {
43 Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
44 } '... this succeeds as expected';
45
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
63 is($c->name, 'Role::Foo|Role::ProvidesFoo', '... got the composite role name');
64
65 lives_ok {
66 Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
67 } '... this succeeds as expected';
68
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,
82 Role::Bar->meta,
83 ]
84 );
85 isa_ok($c, 'Mouse::Meta::Role::Composite');
86
87 is($c->name, 'Role::Foo|Role::ProvidesFoo|Role::Bar', '... got the composite role name');
88
89 lives_ok {
90 Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
91 } '... this succeeds as expected';
92
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,
106 Role::ProvidesBar->meta,
107 Role::Bar->meta,
108 ]
109 );
110 isa_ok($c, 'Mouse::Meta::Role::Composite');
111
112 is($c->name, 'Role::Foo|Role::ProvidesFoo|Role::ProvidesBar|Role::Bar', '... got the composite role name');
113
114 lives_ok {
115 Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
116 } '... this succeeds as expected';
117
118 is_deeply(
119 [ sort $c->get_required_method_list ],
120 [ ],
121 '... got the right list of required methods'
122 );
123}
124
125