Mouse::Role improved
[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;
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