3 use Test::More tests => 18;
13 use Moose -traits => 'My::Role';
17 package SubClassUseBase;
18 use base qw/SomeClass/;
22 package SubSubClassUseBase;
27 extends 'SubClassUseBase';
29 'Can extend non-Moose class with parent class that is a Moose class with a meta role';
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' );
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
41 Class::MOP::remove_metaclass_by_name('SubClassUseBase');
49 package OtherSubClassUseBase;
50 use base 'OtherClass';
59 extends qw( SubClassUseBase OtherSubClassUseBase );
61 'Can extend two non-Moose classes with parents that are different Moose metaclasses';
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' );
70 Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
78 extends qw( OtherSubClassUseBase SubClassUseBase );
80 'Can extend two non-Moose classes with parents that are different Moose metaclasses (reverse order)';
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' );
89 Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
97 extends qw( OtherClass SubClassUseBase );
99 'Can extend one Moose class and one non-Moose class';
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' );
108 Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
111 package MultiParent4;
116 extends qw( SubClassUseBase OtherClass );
118 'Can extend one non-Moose class and one Moose class';
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' );
127 Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
135 extends 'MultiParent1';
137 'Can extend class that itself extends two non-Moose classes with Moose parents';
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' );
146 Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
154 extends 'MultiParent2';
156 'Can extend class that itself extends two non-Moose classes with Moose parents (reverse order)';
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' );
165 Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
173 extends 'MultiParent3';
175 'Can extend class that itself extends one Moose and one non-Moose parent';
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' );
184 Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);
192 extends 'MultiParent4';
194 'Can extend class that itself extends one non-Moose and one Moose parent';
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' );
203 Class::MOP::remove_metaclass_by_name(qw/SubClassUseBase OtherSubClassUseBase/);