Tweak latter instances of the test to remove the metaclass instances for the classes...
[gitmo/Moose.git] / t / 060_compat / 004_extends_nonmoose_that_isa_moose_with_metarole.t
CommitLineData
f2391d17 1use strict;
2use warnings;
1276b4c9 3use Test::More tests => 18;
ef55236d 4use Class::MOP ();
f2391d17 5
6{
7 package My::Role;
8 use Moose::Role;
9}
5009e3d0 10
f2391d17 11{
12 package SomeClass;
13 use Moose -traits => 'My::Role';
14}
5009e3d0 15
f2391d17 16{
17 package SubClassUseBase;
18 use base qw/SomeClass/;
19}
5009e3d0 20
f2391d17 21{
22 package SubSubClassUseBase;
23 use Moose;
ce9489ef 24 use Test::More;
f2391d17 25 use Test::Exception;
349cda54 26 lives_ok {
27 extends 'SubClassUseBase';
5009e3d0 28 }
1276b4c9 29 'Can extend non-Moose class with parent class that is a Moose class with a meta role';
f2391d17 30}
1276b4c9 31
32{
33 ok( SubSubClassUseBase->meta->meta->can('does_role')
34 && SubSubClassUseBase->meta->meta->does_role('My::Role'),
35 'SubSubClassUseBase meta metaclass does the My::Role role' );
36}
37
ef55236d 38# Note, remote metaclasses of the 'use base' classes after each test, so that
39# they have to be re-initialized - otherwise latter tests would not demonstrate
40# the original issue.
41Class::MOP::remove_metaclass_by_name('SubClassUseBase');
42
1276b4c9 43{
44 package OtherClass;
45 use Moose;
46}
47
48{
49 package OtherSubClassUseBase;
50 use base 'OtherClass';
51}
52
53{
54 package MultiParent1;
55 use Moose;
56 use Test::More;
57 use Test::Exception;
58 lives_ok {
59 extends qw( SubClassUseBase OtherSubClassUseBase );
60 }
61 'Can extend two non-Moose classes with parents that are different Moose metaclasses';
62}
63
64{
65 ok( MultiParent1->meta->meta->can('does_role')
66 && MultiParent1->meta->meta->does_role('My::Role'),
67 'MultiParent1 meta metaclass does the My::Role role' );
68}
69
ef55236d 70Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
71
1276b4c9 72{
73 package MultiParent2;
74 use Moose;
75 use Test::More;
76 use Test::Exception;
77 lives_ok {
78 extends qw( OtherSubClassUseBase SubClassUseBase );
79 }
80 'Can extend two non-Moose classes with parents that are different Moose metaclasses (reverse order)';
81}
82
83{
84 ok( MultiParent2->meta->meta->can('does_role')
85 && MultiParent2->meta->meta->does_role('My::Role'),
86 'MultiParent2 meta metaclass does the My::Role role' );
87}
88
ef55236d 89Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
90
1276b4c9 91{
92 package MultiParent3;
93 use Moose;
94 use Test::More;
95 use Test::Exception;
96 lives_ok {
97 extends qw( OtherClass SubClassUseBase );
98 }
99 'Can extend one Moose class and one non-Moose class';
100}
101
102{
103 ok( MultiParent3->meta->meta->can('does_role')
104 && MultiParent3->meta->meta->does_role('My::Role'),
105 'MultiParent3 meta metaclass does the My::Role role' );
106}
107
ef55236d 108Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
109
1276b4c9 110{
111 package MultiParent4;
112 use Moose;
113 use Test::More;
114 use Test::Exception;
115 lives_ok {
116 extends qw( SubClassUseBase OtherClass );
117 }
118 'Can extend one non-Moose class and one Moose class';
119}
120
121{
122 ok( MultiParent4->meta->meta->can('does_role')
123 && MultiParent4->meta->meta->does_role('My::Role'),
124 'MultiParent4 meta metaclass does the My::Role role' );
125}
126
ef55236d 127Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
128
1276b4c9 129{
130 package MultiChild1;
131 use Moose;
132 use Test::More;
133 use Test::Exception;
134 lives_ok {
135 extends 'MultiParent1';
136 }
137 'Can extend class that itself extends two non-Moose classes with Moose parents';
138}
139
140{
141 ok( MultiChild1->meta->meta->can('does_role')
142 && MultiChild1->meta->meta->does_role('My::Role'),
143 'MultiChild1 meta metaclass does the My::Role role' );
144}
145
ef55236d 146Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
147
1276b4c9 148{
149 package MultiChild2;
150 use Moose;
151 use Test::More;
152 use Test::Exception;
153 lives_ok {
154 extends 'MultiParent2';
155 }
156 'Can extend class that itself extends two non-Moose classes with Moose parents (reverse order)';
157}
158
159{
160 ok( MultiChild2->meta->meta->can('does_role')
161 && MultiChild2->meta->meta->does_role('My::Role'),
162 'MultiChild2 meta metaclass does the My::Role role' );
163}
164
ef55236d 165Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
166
1276b4c9 167{
168 package MultiChild3;
169 use Moose;
170 use Test::More;
171 use Test::Exception;
172 lives_ok {
173 extends 'MultiParent3';
174 }
175 'Can extend class that itself extends one Moose and one non-Moose parent';
176}
177
178{
179 ok( MultiChild3->meta->meta->can('does_role')
180 && MultiChild3->meta->meta->does_role('My::Role'),
181 'MultiChild3 meta metaclass does the My::Role role' );
182}
183
ef55236d 184Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
185
1276b4c9 186{
187 package MultiChild4;
188 use Moose;
189 use Test::More;
190 use Test::Exception;
191 lives_ok {
192 extends 'MultiParent4';
193 }
194 'Can extend class that itself extends one non-Moose and one Moose parent';
195}
196
197{
198 ok( MultiChild4->meta->meta->can('does_role')
199 && MultiChild4->meta->meta->does_role('My::Role'),
200 'MultiChild4 meta metaclass does the My::Role role' );
201}
202
ef55236d 203Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
204