Tidy code and remove unneeded module loads
[gitmo/Moose.git] / t / 060_compat / 004_extends_nonmoose_that_isa_moose_with_metarole.t
CommitLineData
f2391d17 1use strict;
2use warnings;
a28e50e4 3use Test::More;
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;
be0ed157 25 use Test::Fatal;
26 ok ! exception {
349cda54 27 extends 'SubClassUseBase';
be0ed157 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
5e97395f 38# Note, remove metaclasses of the 'use base' classes after each test,
39# so that they have to be re-initialized - otherwise latter tests
40# would not demonstrate the original issue.
ef55236d 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;
be0ed157 57 use Test::Fatal;
58 ok ! exception {
1276b4c9 59 extends qw( SubClassUseBase OtherSubClassUseBase );
be0ed157 60 },
1276b4c9 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
5e97395f 70Class::MOP::remove_metaclass_by_name($_)
71 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 72
1276b4c9 73{
74 package MultiParent2;
75 use Moose;
76 use Test::More;
be0ed157 77 use Test::Fatal;
78 ok ! exception {
1276b4c9 79 extends qw( OtherSubClassUseBase SubClassUseBase );
be0ed157 80 },
1276b4c9 81 'Can extend two non-Moose classes with parents that are different Moose metaclasses (reverse order)';
82}
83
84{
85 ok( MultiParent2->meta->meta->can('does_role')
86 && MultiParent2->meta->meta->does_role('My::Role'),
87 'MultiParent2 meta metaclass does the My::Role role' );
88}
89
5e97395f 90Class::MOP::remove_metaclass_by_name($_)
91 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 92
1276b4c9 93{
94 package MultiParent3;
95 use Moose;
96 use Test::More;
be0ed157 97 use Test::Fatal;
98 ok ! exception {
1276b4c9 99 extends qw( OtherClass SubClassUseBase );
be0ed157 100 },
1276b4c9 101 'Can extend one Moose class and one non-Moose class';
102}
103
104{
105 ok( MultiParent3->meta->meta->can('does_role')
106 && MultiParent3->meta->meta->does_role('My::Role'),
107 'MultiParent3 meta metaclass does the My::Role role' );
108}
109
5e97395f 110Class::MOP::remove_metaclass_by_name($_)
111 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 112
1276b4c9 113{
114 package MultiParent4;
115 use Moose;
116 use Test::More;
be0ed157 117 use Test::Fatal;
118 ok ! exception {
1276b4c9 119 extends qw( SubClassUseBase OtherClass );
be0ed157 120 },
1276b4c9 121 'Can extend one non-Moose class and one Moose class';
122}
123
124{
125 ok( MultiParent4->meta->meta->can('does_role')
126 && MultiParent4->meta->meta->does_role('My::Role'),
127 'MultiParent4 meta metaclass does the My::Role role' );
128}
129
5e97395f 130Class::MOP::remove_metaclass_by_name($_)
131 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 132
1276b4c9 133{
134 package MultiChild1;
135 use Moose;
136 use Test::More;
be0ed157 137 use Test::Fatal;
138 ok ! exception {
1276b4c9 139 extends 'MultiParent1';
be0ed157 140 },
1276b4c9 141 'Can extend class that itself extends two non-Moose classes with Moose parents';
142}
143
144{
145 ok( MultiChild1->meta->meta->can('does_role')
146 && MultiChild1->meta->meta->does_role('My::Role'),
147 'MultiChild1 meta metaclass does the My::Role role' );
148}
149
5e97395f 150Class::MOP::remove_metaclass_by_name($_)
151 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 152
1276b4c9 153{
154 package MultiChild2;
155 use Moose;
156 use Test::More;
be0ed157 157 use Test::Fatal;
158 ok ! exception {
1276b4c9 159 extends 'MultiParent2';
be0ed157 160 },
1276b4c9 161 'Can extend class that itself extends two non-Moose classes with Moose parents (reverse order)';
162}
163
164{
165 ok( MultiChild2->meta->meta->can('does_role')
166 && MultiChild2->meta->meta->does_role('My::Role'),
167 'MultiChild2 meta metaclass does the My::Role role' );
168}
169
5e97395f 170Class::MOP::remove_metaclass_by_name($_)
171 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 172
1276b4c9 173{
174 package MultiChild3;
175 use Moose;
176 use Test::More;
be0ed157 177 use Test::Fatal;
178 ok ! exception {
1276b4c9 179 extends 'MultiParent3';
be0ed157 180 },
1276b4c9 181 'Can extend class that itself extends one Moose and one non-Moose parent';
182}
183
184{
185 ok( MultiChild3->meta->meta->can('does_role')
186 && MultiChild3->meta->meta->does_role('My::Role'),
187 'MultiChild3 meta metaclass does the My::Role role' );
188}
189
5e97395f 190Class::MOP::remove_metaclass_by_name($_)
191 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 192
1276b4c9 193{
194 package MultiChild4;
195 use Moose;
196 use Test::More;
be0ed157 197 use Test::Fatal;
198 ok ! exception {
1276b4c9 199 extends 'MultiParent4';
be0ed157 200 },
1276b4c9 201 'Can extend class that itself extends one non-Moose and one Moose parent';
202}
203
204{
205 ok( MultiChild4->meta->meta->can('does_role')
206 && MultiChild4->meta->meta->does_role('My::Role'),
207 'MultiChild4 meta metaclass does the My::Role role' );
208}
209
5e97395f 210Class::MOP::remove_metaclass_by_name($_)
211 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 212
a28e50e4 213done_testing;