Mouse::Util::does_role() respects $thing->does() method
[gitmo/Mouse.git] / t / 030_roles / 020_role_composite.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 use Test::Exception;
11
12 use Mouse::Meta::Role::Application;
13 use Mouse::Meta::Role::Composite;
14
15 {
16     package Role::Foo;
17     use Mouse::Role;
18
19     package Role::Bar;
20     use Mouse::Role;
21
22     package Role::Baz;
23     use Mouse::Role;
24
25     package Role::Gorch;
26     use Mouse::Role;
27 }
28
29 {
30     my $c = Mouse::Meta::Role::Composite->new(
31         roles => [
32             Role::Foo->meta,
33             Role::Bar->meta,
34             Role::Baz->meta,
35         ]
36     );
37     isa_ok($c, 'Mouse::Meta::Role::Composite');
38     { local $TODO = 'M::M::R::Compisite name';
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     { local $TODO = 'cannot apply a composite role directly';
54     lives_ok {
55         Mouse::Meta::Role::Application::RoleSummation->new->apply($c);
56     } '... this composed okay';
57     }
58
59     ##... now nest 'em
60     {
61         my $c2 = Mouse::Meta::Role::Composite->new(
62             roles => [
63                 $c,
64                 Role::Gorch->meta,
65             ]
66         );
67         isa_ok($c2, 'Mouse::Meta::Role::Composite');
68         { local $TODO = 'name';
69         is($c2->name, 'Role::Foo|Role::Bar|Role::Baz|Role::Gorch', '... got the composite role name');
70         }
71         is_deeply($c2->get_roles, [
72             $c,
73             Role::Gorch->meta,
74         ], '... got the right roles');
75
76         ok($c2->does_role($_), '... our composite does the role ' . $_)
77             for qw(
78                 Role::Foo
79                 Role::Bar
80                 Role::Baz
81                 Role::Gorch
82             );
83     }
84 }
85
86 done_testing;