Squashed commit of the following:
[gitmo/Moose.git] / t / 400_moose_util / 007_apply_roles.t
CommitLineData
560c498d 1use strict;
2use warnings;
3
4use Test::More;
5use Moose::Util qw( apply_all_roles );
6
7{
8 package Role::Foo;
9 use Moose::Role;
10}
11
12{
13 package Role::Bar;
14 use Moose::Role;
15}
16
17{
18 package Role::Baz;
19 use Moose::Role;
20}
21
22{
23 package Class::A;
24 use Moose;
25}
26
27{
28 package Class::B;
29 use Moose;
30}
31
32{
33 package Class::C;
34 use Moose;
35}
36
37{
38 package Class::D;
39 use Moose;
40}
41
42{
43 package Class::E;
44 use Moose;
45}
46
47my @roles = qw( Role::Foo Role::Bar Role::Baz );
48apply_all_roles( 'Class::A', @roles );
49ok( Class::A->meta->does_role($_), "Class::A does $_" ) for @roles;
50
51apply_all_roles( 'Class::B', map { $_->meta } @roles );
52ok( Class::A->meta->does_role($_),
53 "Class::B does $_ (applied with meta role object)" )
54 for @roles;
55
56@roles = qw( Role::Foo );
57apply_all_roles( 'Class::C', @roles );
58ok( Class::A->meta->does_role($_), "Class::C does $_" ) for @roles;
59
60apply_all_roles( 'Class::D', map { $_->meta } @roles );
61ok( Class::A->meta->does_role($_),
62 "Class::D does $_ (applied with meta role object)" )
63 for @roles;
64
65@roles = qw( Role::Foo Role::Bar ), Role::Baz->meta;
66apply_all_roles( 'Class::E', @roles );
67ok( Class::A->meta->does_role($_),
68 "Class::E does $_ (mix of names and meta role object)" )
69 for @roles;
70
71done_testing;