* role exclusion and aliasiing now works in composite roles too
[gitmo/Moose.git] / t / 030_roles / 020_role_composite.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 17;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Moose');
11     use_ok('Moose::Meta::Role::Application::RoleSummation');
12     use_ok('Moose::Meta::Role::Composite');
13 }
14
15 {
16     package Role::Foo;
17     use Moose::Role;
18     
19     package Role::Bar;
20     use Moose::Role;
21
22     package Role::Baz;
23     use Moose::Role;      
24     
25     package Role::Gorch;
26     use Moose::Role;       
27 }
28
29 {
30     my $c = Moose::Meta::Role::Composite->new(
31         roles => [
32             Role::Foo->meta,
33             Role::Bar->meta,
34             Role::Baz->meta,            
35         ]
36     );
37     isa_ok($c, 'Moose::Meta::Role::Composite');
38
39     is($c->name, 'Role::Foo|Role::Bar|Role::Baz', '... got the composite role name');
40
41     is_deeply($c->get_roles, [
42         Role::Foo->meta,
43         Role::Bar->meta,
44         Role::Baz->meta,        
45     ], '... got the right roles');
46     
47     ok($c->does_role($_), '... our composite does the role ' . $_)
48         for qw(
49             Role::Foo
50             Role::Bar
51             Role::Baz            
52         );
53     
54     lives_ok {
55         Moose::Meta::Role::Application::RoleSummation->new->apply($c);
56     } '... this composed okay';   
57     
58     ##... now nest 'em
59     { 
60         my $c2 = Moose::Meta::Role::Composite->new(
61             roles => [
62                 $c,
63                 Role::Gorch->meta,
64             ]
65         );
66         isa_ok($c2, 'Moose::Meta::Role::Composite');
67
68         is($c2->name, 'Role::Foo|Role::Bar|Role::Baz|Role::Gorch', '... got the composite role name');
69
70         is_deeply($c2->get_roles, [
71             $c,
72             Role::Gorch->meta,  
73         ], '... got the right roles');
74
75         ok($c2->does_role($_), '... our composite does the role ' . $_)
76             for qw(
77                 Role::Foo
78                 Role::Bar
79                 Role::Baz     
80                 Role::Gorch                        
81             );     
82     }
83 }