ec33b73e89f9554a801f6d2ce8b22e4521282ad5
[gitmo/Moose.git] / t / moose_util / ensure_all_roles.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7
8 use Moose::Util ':all';
9
10 {
11     package Foo;
12     use Moose::Role;
13 }
14
15 {
16     package Bar;
17     use Moose::Role;
18 }
19
20 {
21     package Quux;
22     use Moose;
23 }
24
25 is_deeply(
26     Quux->meta->roles,
27     [],
28     "no roles yet",
29 );
30
31 Foo->meta->apply(Quux->meta);
32
33 is_deeply(
34     Quux->meta->roles,
35     [ Foo->meta ],
36     "applied Foo",
37 );
38
39 Foo->meta->apply(Quux->meta);
40 Bar->meta->apply(Quux->meta);
41 is_deeply(
42     Quux->meta->roles,
43     [ Foo->meta, Foo->meta, Bar->meta ],
44     "duplicated Foo",
45 );
46
47 is(does_role('Quux', 'Foo'), 1, "Quux does Foo");
48 is(does_role('Quux', 'Bar'), 1, "Quux does Bar");
49 ensure_all_roles('Quux', qw(Foo Bar));
50 is_deeply(
51     Quux->meta->roles,
52     [ Foo->meta, Foo->meta, Bar->meta ],
53     "unchanged, since all roles are already applied",
54 );
55
56 my $obj = Quux->new;
57 ensure_all_roles($obj, qw(Foo Bar));
58 is_deeply(
59     $obj->meta->roles,
60     [ Foo->meta, Foo->meta, Bar->meta ],
61     "unchanged, since all roles are already applied",
62 );
63
64 done_testing;