s/make_immutable/metaclass->make_immutable/
[gitmo/Moose.git] / t / 030_roles / 025_role_composition_override.t
CommitLineData
fb1e11d5 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
28412c0b 6use Test::More tests => 11;
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
19 override foo => sub { 'Role::Foo::foo' };
20
21 package Role::Bar;
22 use Moose::Role;
23
24 override bar => sub { 'Role::Bar::bar' };
25
26 package Role::FooConflict;
27 use Moose::Role;
28
29 override foo => sub { 'Role::FooConflict::foo' };
30
31 package Role::FooMethodConflict;
32 use Moose::Role;
33
34 sub foo { 'Role::FooConflict::foo' }
35
36 package Role::BarMethodConflict;
37 use Moose::Role;
38
39 sub bar { 'Role::BarConflict::bar' }
40}
41
42# test simple overrides
43{
44 my $c = Moose::Meta::Role::Composite->new(
45 roles => [
46 Role::Foo->meta,
47 Role::Bar->meta,
48 ]
49 );
50 isa_ok($c, 'Moose::Meta::Role::Composite');
51
52 is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name');
53
54 lives_ok {
55 Moose::Meta::Role::Application::RoleSummation->new->apply($c);
56 } '... this lives ok';
57
58 is_deeply(
59 [ sort $c->get_method_modifier_list('override') ],
60 [ 'bar', 'foo' ],
61 '... got the right list of methods'
62 );
63}
64
65# test simple overrides w/ conflicts
66dies_ok {
67 Moose::Meta::Role::Application::RoleSummation->new->apply(
68 Moose::Meta::Role::Composite->new(
69 roles => [
70 Role::Foo->meta,
71 Role::FooConflict->meta,
72 ]
73 )
74 );
75} '... this fails as expected';
76
77# test simple overrides w/ conflicts
78dies_ok {
79 Moose::Meta::Role::Application::RoleSummation->new->apply(
80 Moose::Meta::Role::Composite->new(
81 roles => [
82 Role::Foo->meta,
83 Role::FooMethodConflict->meta,
84 ]
85 )
86 );
87} '... this fails as expected';
88
89
90# test simple overrides w/ conflicts
91dies_ok {
92 Moose::Meta::Role::Application::RoleSummation->new->apply(
93 Moose::Meta::Role::Composite->new(
94 roles => [
95 Role::Foo->meta,
96 Role::Bar->meta,
97 Role::FooConflict->meta,
98 ]
99 )
100 );
101} '... this fails as expected';
102
103
104# test simple overrides w/ conflicts
105dies_ok {
106 Moose::Meta::Role::Application::RoleSummation->new->apply(
107 Moose::Meta::Role::Composite->new(
108 roles => [
109 Role::Foo->meta,
110 Role::Bar->meta,
111 Role::FooMethodConflict->meta,
112 ]
113 )
114 );
115} '... this fails as expected';