Commit | Line | Data |
f2391d17 |
1 | use strict; |
2 | use warnings; |
1276b4c9 |
3 | use Test::More tests => 18; |
f2391d17 |
4 | |
5 | { |
6 | package My::Role; |
7 | use Moose::Role; |
8 | } |
5009e3d0 |
9 | |
f2391d17 |
10 | { |
11 | package SomeClass; |
12 | use Moose -traits => 'My::Role'; |
13 | } |
5009e3d0 |
14 | |
f2391d17 |
15 | { |
16 | package SubClassUseBase; |
17 | use base qw/SomeClass/; |
18 | } |
5009e3d0 |
19 | |
f2391d17 |
20 | { |
21 | package SubSubClassUseBase; |
22 | use Moose; |
ce9489ef |
23 | use Test::More; |
f2391d17 |
24 | use Test::Exception; |
349cda54 |
25 | lives_ok { |
26 | extends 'SubClassUseBase'; |
5009e3d0 |
27 | } |
1276b4c9 |
28 | 'Can extend non-Moose class with parent class that is a Moose class with a meta role'; |
f2391d17 |
29 | } |
1276b4c9 |
30 | |
31 | { |
32 | ok( SubSubClassUseBase->meta->meta->can('does_role') |
33 | && SubSubClassUseBase->meta->meta->does_role('My::Role'), |
34 | 'SubSubClassUseBase meta metaclass does the My::Role role' ); |
35 | } |
36 | |
37 | { |
38 | package OtherClass; |
39 | use Moose; |
40 | } |
41 | |
42 | { |
43 | package OtherSubClassUseBase; |
44 | use base 'OtherClass'; |
45 | } |
46 | |
47 | { |
48 | package MultiParent1; |
49 | use Moose; |
50 | use Test::More; |
51 | use Test::Exception; |
52 | lives_ok { |
53 | extends qw( SubClassUseBase OtherSubClassUseBase ); |
54 | } |
55 | 'Can extend two non-Moose classes with parents that are different Moose metaclasses'; |
56 | } |
57 | |
58 | { |
59 | ok( MultiParent1->meta->meta->can('does_role') |
60 | && MultiParent1->meta->meta->does_role('My::Role'), |
61 | 'MultiParent1 meta metaclass does the My::Role role' ); |
62 | } |
63 | |
64 | { |
65 | package MultiParent2; |
66 | use Moose; |
67 | use Test::More; |
68 | use Test::Exception; |
69 | lives_ok { |
70 | extends qw( OtherSubClassUseBase SubClassUseBase ); |
71 | } |
72 | 'Can extend two non-Moose classes with parents that are different Moose metaclasses (reverse order)'; |
73 | } |
74 | |
75 | { |
76 | ok( MultiParent2->meta->meta->can('does_role') |
77 | && MultiParent2->meta->meta->does_role('My::Role'), |
78 | 'MultiParent2 meta metaclass does the My::Role role' ); |
79 | } |
80 | |
81 | { |
82 | package MultiParent3; |
83 | use Moose; |
84 | use Test::More; |
85 | use Test::Exception; |
86 | lives_ok { |
87 | extends qw( OtherClass SubClassUseBase ); |
88 | } |
89 | 'Can extend one Moose class and one non-Moose class'; |
90 | } |
91 | |
92 | { |
93 | ok( MultiParent3->meta->meta->can('does_role') |
94 | && MultiParent3->meta->meta->does_role('My::Role'), |
95 | 'MultiParent3 meta metaclass does the My::Role role' ); |
96 | } |
97 | |
98 | { |
99 | package MultiParent4; |
100 | use Moose; |
101 | use Test::More; |
102 | use Test::Exception; |
103 | lives_ok { |
104 | extends qw( SubClassUseBase OtherClass ); |
105 | } |
106 | 'Can extend one non-Moose class and one Moose class'; |
107 | } |
108 | |
109 | { |
110 | ok( MultiParent4->meta->meta->can('does_role') |
111 | && MultiParent4->meta->meta->does_role('My::Role'), |
112 | 'MultiParent4 meta metaclass does the My::Role role' ); |
113 | } |
114 | |
115 | { |
116 | package MultiChild1; |
117 | use Moose; |
118 | use Test::More; |
119 | use Test::Exception; |
120 | lives_ok { |
121 | extends 'MultiParent1'; |
122 | } |
123 | 'Can extend class that itself extends two non-Moose classes with Moose parents'; |
124 | } |
125 | |
126 | { |
127 | ok( MultiChild1->meta->meta->can('does_role') |
128 | && MultiChild1->meta->meta->does_role('My::Role'), |
129 | 'MultiChild1 meta metaclass does the My::Role role' ); |
130 | } |
131 | |
132 | { |
133 | package MultiChild2; |
134 | use Moose; |
135 | use Test::More; |
136 | use Test::Exception; |
137 | lives_ok { |
138 | extends 'MultiParent2'; |
139 | } |
140 | 'Can extend class that itself extends two non-Moose classes with Moose parents (reverse order)'; |
141 | } |
142 | |
143 | { |
144 | ok( MultiChild2->meta->meta->can('does_role') |
145 | && MultiChild2->meta->meta->does_role('My::Role'), |
146 | 'MultiChild2 meta metaclass does the My::Role role' ); |
147 | } |
148 | |
149 | { |
150 | package MultiChild3; |
151 | use Moose; |
152 | use Test::More; |
153 | use Test::Exception; |
154 | lives_ok { |
155 | extends 'MultiParent3'; |
156 | } |
157 | 'Can extend class that itself extends one Moose and one non-Moose parent'; |
158 | } |
159 | |
160 | { |
161 | ok( MultiChild3->meta->meta->can('does_role') |
162 | && MultiChild3->meta->meta->does_role('My::Role'), |
163 | 'MultiChild3 meta metaclass does the My::Role role' ); |
164 | } |
165 | |
166 | { |
167 | package MultiChild4; |
168 | use Moose; |
169 | use Test::More; |
170 | use Test::Exception; |
171 | lives_ok { |
172 | extends 'MultiParent4'; |
173 | } |
174 | 'Can extend class that itself extends one non-Moose and one Moose parent'; |
175 | } |
176 | |
177 | { |
178 | ok( MultiChild4->meta->meta->can('does_role') |
179 | && MultiChild4->meta->meta->does_role('My::Role'), |
180 | 'MultiChild4 meta metaclass does the My::Role role' ); |
181 | } |
182 | |