Commit | Line | Data |
a84066c7 |
1 | use strictures 1; |
2 | use Test::More; |
3 | |
4 | BEGIN { |
981402b8 |
5 | package Ker; |
6 | |
7 | use Moo::Role; |
502d2880 |
8 | |
9 | sub has_ker {} |
981402b8 |
10 | } |
11 | |
12 | BEGIN { |
a84066c7 |
13 | package Splat; |
14 | |
15 | use Moose::Role; |
16 | |
17 | requires 'monkey'; |
18 | |
19 | sub punch { 1 } |
20 | |
21 | sub jab { 0 } |
22 | |
23 | around monkey => sub { 'OW' }; |
24 | |
25 | has trap => (is => 'ro', default => sub { -1 }); |
502d2880 |
26 | |
27 | sub has_splat {} |
28 | } |
29 | |
30 | BEGIN { |
31 | package KerSplat; |
32 | use Moo::Role; |
33 | |
34 | with qw/ |
35 | Ker |
36 | Splat |
37 | /; |
a84066c7 |
38 | } |
39 | |
40 | BEGIN { |
c100c04c |
41 | package Splat2; |
42 | |
43 | use Mouse::Role; |
44 | |
45 | requires 'monkey'; |
46 | |
47 | sub punch { 1 } |
48 | |
49 | sub jab { 0 } |
50 | |
51 | around monkey => sub { 'OW' }; |
52 | |
53 | has trap => (is => 'ro', default => sub { -1 }); |
502d2880 |
54 | |
55 | sub has_splat {} |
56 | } |
57 | |
58 | BEGIN { |
59 | package KerSplat2; |
60 | use Moo::Role; |
61 | |
62 | with qw/ |
63 | Ker |
64 | Splat2 |
65 | /; |
c100c04c |
66 | } |
67 | |
68 | BEGIN { |
a84066c7 |
69 | package Splattered; |
70 | |
71 | use Moo; |
72 | |
73 | sub monkey { 'WHAT' } |
74 | |
75 | with 'Splat'; |
76 | |
77 | sub jab { 3 } |
78 | } |
79 | |
c100c04c |
80 | BEGIN { |
81 | package Splattered2; |
82 | |
83 | use Moo; |
84 | |
85 | sub monkey { 'WHAT' } |
86 | |
87 | with 'Splat2'; |
88 | |
89 | sub jab { 3 } |
90 | } |
a84066c7 |
91 | |
981402b8 |
92 | BEGIN { |
93 | package Ker::Splattered; |
94 | |
95 | use Moo; |
96 | |
97 | sub monkey { 'WHAT' } |
98 | |
99 | with qw/ Ker Splat /; |
100 | |
101 | sub jab { 3 } |
102 | } |
103 | |
104 | BEGIN { |
105 | package Ker::Splattered2; |
106 | |
107 | use Moo; |
108 | |
109 | sub monkey { 'WHAT' } |
110 | |
111 | with qw/ Ker Splat2 /; |
112 | |
113 | sub jab { 3 } |
114 | } |
115 | |
502d2880 |
116 | BEGIN { |
117 | package KerSplattered; |
118 | |
119 | use Moo; |
120 | |
121 | sub monkey { 'WHAT' } |
122 | |
123 | with qw/ KerSplat /; |
981402b8 |
124 | |
502d2880 |
125 | sub jab { 3 } |
126 | } |
127 | |
128 | BEGIN { |
129 | package KerSplattered2; |
130 | |
131 | use Moo; |
132 | |
133 | sub monkey { 'WHAT' } |
134 | |
135 | with qw/ KerSplat2 /; |
136 | |
137 | sub jab { 3 } |
138 | } |
139 | |
7887ffd0 |
140 | BEGIN { |
141 | package Plunk; |
142 | |
143 | use Moo::Role; |
144 | |
145 | has pp => (is => 'rw', moosify => sub { |
146 | my $spec = shift; |
147 | $spec->{documentation} = 'moosify'; |
148 | }); |
149 | } |
150 | |
151 | BEGIN { |
152 | package Plank; |
153 | |
154 | use Moo; |
155 | use Sub::Quote; |
156 | |
157 | has vv => (is => 'rw', moosify => [quote_sub(q| |
158 | $_[0]->{documentation} = 'moosify'; |
159 | |), sub { $_[0]->{documentation} = $_[0]->{documentation}.' foo'; }]); |
160 | } |
161 | |
162 | BEGIN { |
163 | package Plunker; |
164 | |
165 | use Moose; |
166 | |
167 | with 'Plunk'; |
168 | } |
169 | |
170 | BEGIN { |
171 | package Planker; |
172 | |
173 | use Moose; |
174 | |
175 | extends 'Plank'; |
176 | } |
177 | |
502d2880 |
178 | foreach my $s ( |
179 | Splattered->new, |
180 | Splattered2->new, |
181 | Ker::Splattered->new, |
182 | Ker::Splattered2->new, |
183 | KerSplattered->new, |
184 | KerSplattered2->new, |
185 | ) { |
186 | ok($s->can('punch')) |
187 | and is($s->punch, 1, 'punch'); |
188 | ok($s->can('jab')) |
189 | and is($s->jab, 3, 'jab'); |
190 | ok($s->can('monkey')) |
191 | and is($s->monkey, 'OW', 'monkey'); |
192 | ok($s->can('trap')) |
193 | and is($s->trap, -1, 'trap'); |
194 | } |
195 | |
196 | foreach my $c (qw/ |
197 | Ker::Splattered |
198 | Ker::Splattered2 |
199 | KerSplattered |
200 | KerSplattered2 |
201 | /) { |
202 | ok $c->can('has_ker'); |
203 | ok $c->can('has_splat'); |
c100c04c |
204 | } |
a84066c7 |
205 | |
7887ffd0 |
206 | foreach my $c (Plunker->new) { |
207 | is(Plunker->meta->find_attribute_by_name('pp')->documentation, 'moosify', 'moosify modifies attr specs'); |
208 | is(Planker->meta->find_attribute_by_name('vv')->documentation, 'moosify foo', 'moosify modifies attr specs as array'); |
209 | } |
502d2880 |
210 | |
7887ffd0 |
211 | done_testing; |