Commit | Line | Data |
948cd189 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | use Test::Moose; |
6 | |
7 | { |
8 | package Role::A; |
9 | |
10 | use Moose::Role |
11 | } |
12 | |
13 | { |
14 | package Role::B; |
15 | |
16 | use Moose::Role |
17 | } |
18 | |
19 | { |
20 | package Foo; |
21 | |
22 | use Moose; |
23 | } |
24 | |
25 | { |
26 | package Bar; |
27 | |
28 | use Moose; |
29 | |
30 | with 'Role::A'; |
31 | } |
32 | |
33 | { |
34 | package Baz; |
35 | |
36 | use Moose; |
37 | |
38 | with qw( Role::A Role::B ); |
39 | } |
40 | |
41 | with_immutable { |
42 | |
43 | for my $thing ( 'Foo', Foo->new ) { |
44 | my $name = ref $thing ? 'Foo object' : 'Foo class'; |
45 | $name .= ' (immutable)' if $thing->meta->is_immutable; |
46 | |
47 | ok( |
48 | !$thing->does('Role::A'), |
49 | "$name does not do Role::A" |
50 | ); |
51 | ok( |
52 | !$thing->does('Role::B'), |
53 | "$name does not do Role::B" |
54 | ); |
55 | |
56 | ok( |
57 | !$thing->does( Role::A->meta ), |
58 | "$name does not do Role::A (passed as object)" |
59 | ); |
60 | ok( |
61 | !$thing->does( Role::B->meta ), |
62 | "$name does not do Role::B (passed as object)" |
63 | ); |
64 | |
65 | ok( |
66 | !$thing->DOES('Role::A'), |
67 | "$name does not do Role::A (using DOES)" |
68 | ); |
69 | ok( |
70 | !$thing->DOES('Role::B'), |
71 | "$name does not do Role::B (using DOES)" |
72 | ); |
73 | } |
74 | |
75 | for my $thing ( 'Bar', Bar->new ) { |
76 | my $name = ref $thing ? 'Bar object' : 'Bar class'; |
77 | $name .= ' (immutable)' if $thing->meta->is_immutable; |
78 | |
79 | ok( |
80 | $thing->does('Role::A'), |
81 | "$name does Role::A" |
82 | ); |
83 | ok( |
84 | !$thing->does('Role::B'), |
85 | "$name does not do Role::B" |
86 | ); |
87 | |
88 | ok( |
89 | $thing->does( Role::A->meta ), |
90 | "$name does Role::A (passed as object)" |
91 | ); |
92 | ok( |
93 | !$thing->does( Role::B->meta ), |
94 | "$name does not do Role::B (passed as object)" |
95 | ); |
96 | |
97 | ok( |
98 | $thing->DOES('Role::A'), |
99 | "$name does Role::A (using DOES)" |
100 | ); |
101 | ok( |
102 | !$thing->DOES('Role::B'), |
103 | "$name does not do Role::B (using DOES)" |
104 | ); |
105 | } |
106 | |
107 | for my $thing ( 'Baz', Baz->new ) { |
108 | my $name = ref $thing ? 'Baz object' : 'Baz class'; |
109 | $name .= ' (immutable)' if $thing->meta->is_immutable; |
110 | |
111 | ok( |
112 | $thing->does('Role::A'), |
113 | "$name does Role::A" |
114 | ); |
115 | ok( |
116 | $thing->does('Role::B'), |
117 | "$name does Role::B" |
118 | ); |
119 | |
120 | ok( |
121 | $thing->does( Role::A->meta ), |
122 | "$name does Role::A (passed as object)" |
123 | ); |
124 | ok( |
125 | $thing->does( Role::B->meta ), |
126 | "$name does Role::B (passed as object)" |
127 | ); |
128 | |
129 | ok( |
130 | $thing->DOES('Role::A'), |
131 | "$name does Role::A (using DOES)" |
132 | ); |
133 | ok( |
134 | $thing->DOES('Role::B'), |
135 | "$name does Role::B (using DOES)" |
136 | ); |
137 | } |
138 | |
139 | } |
140 | qw( Foo Bar Baz ); |
141 | |
142 | done_testing; |