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