Implemented Mouse::Role->does; modified Mouse::Meta::Class->initialise
[gitmo/Mouse.git] / t / 030_roles / failing / 021_role_composite_exclusion.t
CommitLineData
67199842 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 12;
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;
15
16 package Role::Bar;
17 use Mouse::Role;
18
19 package Role::ExcludesFoo;
20 use Mouse::Role;
21 excludes 'Role::Foo';
22
23 package Role::DoesExcludesFoo;
24 use Mouse::Role;
25 with 'Role::ExcludesFoo';
26
27 package Role::DoesFoo;
28 use Mouse::Role;
29 with 'Role::Foo';
30}
31
32ok(Role::ExcludesFoo->meta->excludes_role('Role::Foo'), '... got the right exclusions');
33ok(Role::DoesExcludesFoo->meta->excludes_role('Role::Foo'), '... got the right exclusions');
34
35# test simple exclusion
36dies_ok {
37 Mouse::Meta::Role::Application::RoleSummation->new->apply(
38 Mouse::Meta::Role::Composite->new(
39 roles => [
40 Role::Foo->meta,
41 Role::ExcludesFoo->meta,
42 ]
43 )
44 );
45} '... this fails as expected';
46
47# test no conflicts
48{
49 my $c = Mouse::Meta::Role::Composite->new(
50 roles => [
51 Role::Foo->meta,
52 Role::Bar->meta,
53 ]
54 );
55 isa_ok($c, 'Mouse::Meta::Role::Composite');
56
57 is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name');
58
59 lives_ok {
60 Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
61 } '... this lives as expected';
62}
63
64# test no conflicts w/exclusion
65{
66 my $c = Mouse::Meta::Role::Composite->new(
67 roles => [
68 Role::Bar->meta,
69 Role::ExcludesFoo->meta,
70 ]
71 );
72 isa_ok($c, 'Mouse::Meta::Role::Composite');
73
74 is($c->name, 'Role::Bar|Role::ExcludesFoo', '... got the composite role name');
75
76 lives_ok {
77 Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
78 } '... this lives as expected';
79
80 is_deeply([$c->get_excluded_roles_list], ['Role::Foo'], '... has excluded roles');
81}
82
83
84# test conflict with an "inherited" exclusion
85dies_ok {
86 Mouse::Meta::Role::Application::RoleSummation->new->apply(
87 Mouse::Meta::Role::Composite->new(
88 roles => [
89 Role::Foo->meta,
90 Role::DoesExcludesFoo->meta,
91 ]
92 )
93 );
94
95} '... this fails as expected';
96
97# test conflict with an "inherited" exclusion of an "inherited" role
98dies_ok {
99 Mouse::Meta::Role::Application::RoleSummation->new->apply(
100 Mouse::Meta::Role::Composite->new(
101 roles => [
102 Role::DoesFoo->meta,
103 Role::DoesExcludesFoo->meta,
104 ]
105 )
106 );
107} '... this fails as expected';
108
109