Commit | Line | Data |
b099a649 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
a28e50e4 |
6 | use Test::More; |
b099a649 |
7 | |
28fdde7f |
8 | use Moose::Util ':all'; |
b099a649 |
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 | ); |
a28e50e4 |
63 | |
64 | done_testing; |