Mouse::Role improved
[gitmo/Mouse.git] / t / 030_roles / failing / 023_role_composition_attributes.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 7;
7 use Test::Exception;
8
9 use Mouse::Meta::Role::Application::RoleSummation;
10 use Mouse::Meta::Role::Composite;
11
12 {
13     package Role::Foo;
14     use Mouse::Role;
15     has 'foo' => (is => 'rw');
16
17     package Role::Bar;
18     use Mouse::Role;
19     has 'bar' => (is => 'rw');
20
21     package Role::FooConflict;
22     use Mouse::Role;
23     has 'foo' => (is => 'rw');
24
25     package Role::BarConflict;
26     use Mouse::Role;
27     has 'bar' => (is => 'rw');
28
29     package Role::AnotherFooConflict;
30     use Mouse::Role;
31     with 'Role::FooConflict';
32 }
33
34 # test simple attributes
35 {
36     my $c = Mouse::Meta::Role::Composite->new(
37         roles => [
38             Role::Foo->meta,
39             Role::Bar->meta,
40         ]
41     );
42     isa_ok($c, 'Mouse::Meta::Role::Composite');
43
44     is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name');
45
46     lives_ok {
47         Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
48     } '... this succeeds as expected';
49
50     is_deeply(
51         [ sort $c->get_attribute_list ],
52         [ 'bar', 'foo' ],
53         '... got the right list of attributes'
54     );
55 }
56
57 # test simple conflict
58 dies_ok {
59     Mouse::Meta::Role::Application::RoleSummation->new->apply(
60         Mouse::Meta::Role::Composite->new(
61             roles => [
62                 Role::Foo->meta,
63                 Role::FooConflict->meta,
64             ]
65         )
66     );
67 } '... this fails as expected';
68
69 # test complex conflict
70 dies_ok {
71     Mouse::Meta::Role::Application::RoleSummation->new->apply(
72         Mouse::Meta::Role::Composite->new(
73             roles => [
74                 Role::Foo->meta,
75                 Role::Bar->meta,
76                 Role::FooConflict->meta,
77                 Role::BarConflict->meta,
78             ]
79         )
80     );
81 } '... this fails as expected';
82
83 # test simple conflict
84 dies_ok {
85     Mouse::Meta::Role::Application::RoleSummation->new->apply(
86         Mouse::Meta::Role::Composite->new(
87             roles => [
88                 Role::Foo->meta,
89                 Role::AnotherFooConflict->meta,
90             ]
91         )
92     );
93 } '... this fails as expected';
94