13 use Moose -traits => 'My::Role';
17 package SubClassUseBase;
18 use base qw/SomeClass/;
22 package SubSubClassUseBase;
27 extends 'SubClassUseBase';
28 }, undef, 'Can extend non-Moose class with parent class that is a Moose class with a meta role' );
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' );
37 # Note, remove metaclasses of the 'use base' classes after each test,
38 # so that they have to be re-initialized - otherwise latter tests
39 # would not demonstrate the original issue.
40 Class::MOP::remove_metaclass_by_name('SubClassUseBase');
48 package OtherSubClassUseBase;
49 use base 'OtherClass';
58 extends qw( SubClassUseBase OtherSubClassUseBase );
59 }, undef, 'Can extend two non-Moose classes with parents that are different Moose metaclasses' );
63 ok( MultiParent1->meta->meta->can('does_role')
64 && MultiParent1->meta->meta->does_role('My::Role'),
65 'MultiParent1 meta metaclass does the My::Role role' );
68 Class::MOP::remove_metaclass_by_name($_)
69 for qw( SubClassUseBase OtherSubClassUseBase );
77 extends qw( OtherSubClassUseBase SubClassUseBase );
78 }, undef, 'Can extend two non-Moose classes with parents that are different Moose metaclasses (reverse order)' );
82 ok( MultiParent2->meta->meta->can('does_role')
83 && MultiParent2->meta->meta->does_role('My::Role'),
84 'MultiParent2 meta metaclass does the My::Role role' );
87 Class::MOP::remove_metaclass_by_name($_)
88 for qw( SubClassUseBase OtherSubClassUseBase );
96 extends qw( OtherClass SubClassUseBase );
97 }, undef, 'Can extend one Moose class and one non-Moose class' );
101 ok( MultiParent3->meta->meta->can('does_role')
102 && MultiParent3->meta->meta->does_role('My::Role'),
103 'MultiParent3 meta metaclass does the My::Role role' );
106 Class::MOP::remove_metaclass_by_name($_)
107 for qw( SubClassUseBase OtherSubClassUseBase );
110 package MultiParent4;
115 extends qw( SubClassUseBase OtherClass );
116 }, undef, 'Can extend one non-Moose class and one Moose class' );
120 ok( MultiParent4->meta->meta->can('does_role')
121 && MultiParent4->meta->meta->does_role('My::Role'),
122 'MultiParent4 meta metaclass does the My::Role role' );
125 Class::MOP::remove_metaclass_by_name($_)
126 for qw( SubClassUseBase OtherSubClassUseBase );
134 extends 'MultiParent1';
135 }, undef, 'Can extend class that itself extends two non-Moose classes with Moose parents' );
139 ok( MultiChild1->meta->meta->can('does_role')
140 && MultiChild1->meta->meta->does_role('My::Role'),
141 'MultiChild1 meta metaclass does the My::Role role' );
144 Class::MOP::remove_metaclass_by_name($_)
145 for qw( SubClassUseBase OtherSubClassUseBase );
153 extends 'MultiParent2';
154 }, undef, 'Can extend class that itself extends two non-Moose classes with Moose parents (reverse order)' );
158 ok( MultiChild2->meta->meta->can('does_role')
159 && MultiChild2->meta->meta->does_role('My::Role'),
160 'MultiChild2 meta metaclass does the My::Role role' );
163 Class::MOP::remove_metaclass_by_name($_)
164 for qw( SubClassUseBase OtherSubClassUseBase );
172 extends 'MultiParent3';
173 }, undef, 'Can extend class that itself extends one Moose and one non-Moose parent' );
177 ok( MultiChild3->meta->meta->can('does_role')
178 && MultiChild3->meta->meta->does_role('My::Role'),
179 'MultiChild3 meta metaclass does the My::Role role' );
182 Class::MOP::remove_metaclass_by_name($_)
183 for qw( SubClassUseBase OtherSubClassUseBase );
191 extends 'MultiParent4';
192 }, undef, 'Can extend class that itself extends one non-Moose and one Moose parent' );
196 ok( MultiChild4->meta->meta->can('does_role')
197 && MultiChild4->meta->meta->does_role('My::Role'),
198 'MultiChild4 meta metaclass does the My::Role role' );
201 Class::MOP::remove_metaclass_by_name($_)
202 for qw( SubClassUseBase OtherSubClassUseBase );