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