Expect applying the same role >1 time to be a no-op
[gitmo/Moose.git] / t / moose_util / ensure_all_roles.t
CommitLineData
b099a649 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
a28e50e4 6use Test::More;
b099a649 7
28fdde7f 8use 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
25is_deeply(
26 Quux->meta->roles,
27 [],
28 "no roles yet",
29);
30
31Foo->meta->apply(Quux->meta);
32
33is_deeply(
34 Quux->meta->roles,
35 [ Foo->meta ],
36 "applied Foo",
37);
38
39Foo->meta->apply(Quux->meta);
40Bar->meta->apply(Quux->meta);
41is_deeply(
42 Quux->meta->roles,
e5db4970 43 [ Foo->meta, Bar->meta ],
b099a649 44 "duplicated Foo",
45);
46
47is(does_role('Quux', 'Foo'), 1, "Quux does Foo");
48is(does_role('Quux', 'Bar'), 1, "Quux does Bar");
49ensure_all_roles('Quux', qw(Foo Bar));
50is_deeply(
51 Quux->meta->roles,
e5db4970 52 [ Foo->meta, Bar->meta ],
b099a649 53 "unchanged, since all roles are already applied",
54);
55
56my $obj = Quux->new;
57ensure_all_roles($obj, qw(Foo Bar));
58is_deeply(
59 $obj->meta->roles,
e5db4970 60 [ Foo->meta, Bar->meta ],
b099a649 61 "unchanged, since all roles are already applied",
62);
a28e50e4 63
64done_testing;