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