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