Tweaks
[gitmo/Mouse.git] / Moose-t-failing / 030_roles / 021_role_composite_exclusion.t
1 #!/usr/bin/perl
2 # This is automatically generated by author/import-moose-test.pl.
3 # DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!!
4 use t::lib::MooseCompat;
5
6 use strict;
7 use warnings;
8
9 use Test::More;
10 $TODO = q{Mouse is not yet completed};
11 use Test::Exception;
12
13 use Mouse::Meta::Role::Application;
14 use Mouse::Meta::Role::Composite;
15
16 {
17     package Role::Foo;
18     use Mouse::Role;
19
20     package Role::Bar;
21     use Mouse::Role;
22
23     package Role::ExcludesFoo;
24     use Mouse::Role;
25     excludes 'Role::Foo';
26
27     package Role::DoesExcludesFoo;
28     use Mouse::Role;
29     with 'Role::ExcludesFoo';
30
31     package Role::DoesFoo;
32     use Mouse::Role;
33     with 'Role::Foo';
34 }
35
36 ok(Role::ExcludesFoo->meta->excludes_role('Role::Foo'), '... got the right exclusions');
37 ok(Role::DoesExcludesFoo->meta->excludes_role('Role::Foo'), '... got the right exclusions');
38
39 # test simple exclusion
40 dies_ok {
41     Mouse::Meta::Role::Application->new->apply(
42         Mouse::Meta::Role::Composite->new(
43             roles => [
44                 Role::Foo->meta,
45                 Role::ExcludesFoo->meta,
46             ]
47         )
48     );
49 } '... this fails as expected';
50
51 # test no conflicts
52 {
53     my $c = Mouse::Meta::Role::Composite->new(
54         roles => [
55             Role::Foo->meta,
56             Role::Bar->meta,
57         ]
58     );
59     isa_ok($c, 'Mouse::Meta::Role::Composite');
60
61     is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name');
62
63     lives_ok {
64         Mouse::Meta::Role::Application->new->apply($c);
65     } '... this lives as expected';
66 }
67
68 # test no conflicts w/exclusion
69 {
70     my $c = Mouse::Meta::Role::Composite->new(
71         roles => [
72             Role::Bar->meta,
73             Role::ExcludesFoo->meta,
74         ]
75     );
76     isa_ok($c, 'Mouse::Meta::Role::Composite');
77
78     is($c->name, 'Role::Bar|Role::ExcludesFoo', '... got the composite role name');
79
80     lives_ok {
81         Mouse::Meta::Role::Application->new->apply($c);
82     } '... this lives as expected';
83
84     is_deeply([$c->get_excluded_roles_list], ['Role::Foo'], '... has excluded roles');
85 }
86
87
88 # test conflict with an "inherited" exclusion
89 dies_ok {
90     Mouse::Meta::Role::Application->new->apply(
91         Mouse::Meta::Role::Composite->new(
92             roles => [
93                 Role::Foo->meta,
94                 Role::DoesExcludesFoo->meta,
95             ]
96         )
97     );
98
99 } '... this fails as expected';
100
101 # test conflict with an "inherited" exclusion of an "inherited" role
102 dies_ok {
103     Mouse::Meta::Role::Application->new->apply(
104         Mouse::Meta::Role::Composite->new(
105             roles => [
106                 Role::DoesFoo->meta,
107                 Role::DoesExcludesFoo->meta,
108             ]
109         )
110     );
111 } '... this fails as expected';
112
113 done_testing;