more detailed messages for tag and release commit
[gitmo/Moose.git] / t / compat / 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;
b10dde3a 25 use Test::Fatal;
26 is( exception {
349cda54 27 extends 'SubClassUseBase';
b10dde3a 28 }, undef, 'Can extend non-Moose class with parent class that is a Moose class with a meta role' );
f2391d17 29}
1276b4c9 30
31{
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' );
35}
36
5e97395f 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.
ef55236d 40Class::MOP::remove_metaclass_by_name('SubClassUseBase');
41
1276b4c9 42{
43 package OtherClass;
44 use Moose;
45}
46
47{
48 package OtherSubClassUseBase;
49 use base 'OtherClass';
50}
51
52{
53 package MultiParent1;
54 use Moose;
55 use Test::More;
b10dde3a 56 use Test::Fatal;
57 is( exception {
1276b4c9 58 extends qw( SubClassUseBase OtherSubClassUseBase );
b10dde3a 59 }, undef, 'Can extend two non-Moose classes with parents that are different Moose metaclasses' );
1276b4c9 60}
61
62{
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' );
66}
67
5e97395f 68Class::MOP::remove_metaclass_by_name($_)
69 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 70
1276b4c9 71{
72 package MultiParent2;
73 use Moose;
74 use Test::More;
b10dde3a 75 use Test::Fatal;
76 is( exception {
1276b4c9 77 extends qw( OtherSubClassUseBase SubClassUseBase );
b10dde3a 78 }, undef, 'Can extend two non-Moose classes with parents that are different Moose metaclasses (reverse order)' );
1276b4c9 79}
80
81{
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' );
85}
86
5e97395f 87Class::MOP::remove_metaclass_by_name($_)
88 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 89
1276b4c9 90{
91 package MultiParent3;
92 use Moose;
93 use Test::More;
b10dde3a 94 use Test::Fatal;
95 is( exception {
1276b4c9 96 extends qw( OtherClass SubClassUseBase );
b10dde3a 97 }, undef, 'Can extend one Moose class and one non-Moose class' );
1276b4c9 98}
99
100{
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' );
104}
105
5e97395f 106Class::MOP::remove_metaclass_by_name($_)
107 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 108
1276b4c9 109{
110 package MultiParent4;
111 use Moose;
112 use Test::More;
b10dde3a 113 use Test::Fatal;
114 is( exception {
1276b4c9 115 extends qw( SubClassUseBase OtherClass );
b10dde3a 116 }, undef, 'Can extend one non-Moose class and one Moose class' );
1276b4c9 117}
118
119{
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' );
123}
124
5e97395f 125Class::MOP::remove_metaclass_by_name($_)
126 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 127
1276b4c9 128{
129 package MultiChild1;
130 use Moose;
131 use Test::More;
b10dde3a 132 use Test::Fatal;
133 is( exception {
1276b4c9 134 extends 'MultiParent1';
b10dde3a 135 }, undef, 'Can extend class that itself extends two non-Moose classes with Moose parents' );
1276b4c9 136}
137
138{
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' );
142}
143
5e97395f 144Class::MOP::remove_metaclass_by_name($_)
145 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 146
1276b4c9 147{
148 package MultiChild2;
149 use Moose;
150 use Test::More;
b10dde3a 151 use Test::Fatal;
152 is( exception {
1276b4c9 153 extends 'MultiParent2';
b10dde3a 154 }, undef, 'Can extend class that itself extends two non-Moose classes with Moose parents (reverse order)' );
1276b4c9 155}
156
157{
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' );
161}
162
5e97395f 163Class::MOP::remove_metaclass_by_name($_)
164 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 165
1276b4c9 166{
167 package MultiChild3;
168 use Moose;
169 use Test::More;
b10dde3a 170 use Test::Fatal;
171 is( exception {
1276b4c9 172 extends 'MultiParent3';
b10dde3a 173 }, undef, 'Can extend class that itself extends one Moose and one non-Moose parent' );
1276b4c9 174}
175
176{
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' );
180}
181
5e97395f 182Class::MOP::remove_metaclass_by_name($_)
183 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 184
1276b4c9 185{
186 package MultiChild4;
187 use Moose;
188 use Test::More;
b10dde3a 189 use Test::Fatal;
190 is( exception {
1276b4c9 191 extends 'MultiParent4';
b10dde3a 192 }, undef, 'Can extend class that itself extends one non-Moose and one Moose parent' );
1276b4c9 193}
194
195{
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' );
199}
200
5e97395f 201Class::MOP::remove_metaclass_by_name($_)
202 for qw( SubClassUseBase OtherSubClassUseBase );
ef55236d 203
a28e50e4 204done_testing;