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, 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.
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($_)
71 for qw( SubClassUseBase OtherSubClassUseBase );
79 extends qw( OtherSubClassUseBase SubClassUseBase );
81 'Can extend two non-Moose classes with parents that are different Moose metaclasses (reverse order)';
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' );
90 Class::MOP::remove_metaclass_by_name($_)
91 for qw( SubClassUseBase OtherSubClassUseBase );
99 extends qw( OtherClass SubClassUseBase );
101 'Can extend one Moose class and one non-Moose class';
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' );
110 Class::MOP::remove_metaclass_by_name($_)
111 for qw( SubClassUseBase OtherSubClassUseBase );
114 package MultiParent4;
119 extends qw( SubClassUseBase OtherClass );
121 'Can extend one non-Moose class and one Moose class';
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' );
130 Class::MOP::remove_metaclass_by_name($_)
131 for qw( SubClassUseBase OtherSubClassUseBase );
139 extends 'MultiParent1';
141 'Can extend class that itself extends two non-Moose classes with Moose parents';
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' );
150 Class::MOP::remove_metaclass_by_name($_)
151 for qw( SubClassUseBase OtherSubClassUseBase );
159 extends 'MultiParent2';
161 'Can extend class that itself extends two non-Moose classes with Moose parents (reverse order)';
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' );
170 Class::MOP::remove_metaclass_by_name($_)
171 for qw( SubClassUseBase OtherSubClassUseBase );
179 extends 'MultiParent3';
181 'Can extend class that itself extends one Moose and one non-Moose parent';
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' );
190 Class::MOP::remove_metaclass_by_name($_)
191 for qw( SubClassUseBase OtherSubClassUseBase );
199 extends 'MultiParent4';
201 'Can extend class that itself extends one non-Moose and one Moose parent';
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' );
210 Class::MOP::remove_metaclass_by_name($_)
211 for qw( SubClassUseBase OtherSubClassUseBase );