Factor out Role's before/after/around into a helper function
[gitmo/Moose.git] / t / 060_compat / 004_extends_nonmoose_that_isa_moose_with_metarole.t
CommitLineData
f2391d17 1use strict;
2use warnings;
1276b4c9 3use Test::More tests => 18;
f2391d17 4
5{
6 package My::Role;
7 use Moose::Role;
8}
5009e3d0 9
f2391d17 10{
11 package SomeClass;
12 use Moose -traits => 'My::Role';
13}
5009e3d0 14
f2391d17 15{
16 package SubClassUseBase;
17 use base qw/SomeClass/;
18}
5009e3d0 19
f2391d17 20{
21 package SubSubClassUseBase;
22 use Moose;
ce9489ef 23 use Test::More;
f2391d17 24 use Test::Exception;
349cda54 25 lives_ok {
26 extends 'SubClassUseBase';
5009e3d0 27 }
1276b4c9 28 '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
37{
38 package OtherClass;
39 use Moose;
40}
41
42{
43 package OtherSubClassUseBase;
44 use base 'OtherClass';
45}
46
47{
48 package MultiParent1;
49 use Moose;
50 use Test::More;
51 use Test::Exception;
52 lives_ok {
53 extends qw( SubClassUseBase OtherSubClassUseBase );
54 }
55 'Can extend two non-Moose classes with parents that are different Moose metaclasses';
56}
57
58{
59 ok( MultiParent1->meta->meta->can('does_role')
60 && MultiParent1->meta->meta->does_role('My::Role'),
61 'MultiParent1 meta metaclass does the My::Role role' );
62}
63
64{
65 package MultiParent2;
66 use Moose;
67 use Test::More;
68 use Test::Exception;
69 lives_ok {
70 extends qw( OtherSubClassUseBase SubClassUseBase );
71 }
72 'Can extend two non-Moose classes with parents that are different Moose metaclasses (reverse order)';
73}
74
75{
76 ok( MultiParent2->meta->meta->can('does_role')
77 && MultiParent2->meta->meta->does_role('My::Role'),
78 'MultiParent2 meta metaclass does the My::Role role' );
79}
80
81{
82 package MultiParent3;
83 use Moose;
84 use Test::More;
85 use Test::Exception;
86 lives_ok {
87 extends qw( OtherClass SubClassUseBase );
88 }
89 'Can extend one Moose class and one non-Moose class';
90}
91
92{
93 ok( MultiParent3->meta->meta->can('does_role')
94 && MultiParent3->meta->meta->does_role('My::Role'),
95 'MultiParent3 meta metaclass does the My::Role role' );
96}
97
98{
99 package MultiParent4;
100 use Moose;
101 use Test::More;
102 use Test::Exception;
103 lives_ok {
104 extends qw( SubClassUseBase OtherClass );
105 }
106 'Can extend one non-Moose class and one Moose class';
107}
108
109{
110 ok( MultiParent4->meta->meta->can('does_role')
111 && MultiParent4->meta->meta->does_role('My::Role'),
112 'MultiParent4 meta metaclass does the My::Role role' );
113}
114
115{
116 package MultiChild1;
117 use Moose;
118 use Test::More;
119 use Test::Exception;
120 lives_ok {
121 extends 'MultiParent1';
122 }
123 'Can extend class that itself extends two non-Moose classes with Moose parents';
124}
125
126{
127 ok( MultiChild1->meta->meta->can('does_role')
128 && MultiChild1->meta->meta->does_role('My::Role'),
129 'MultiChild1 meta metaclass does the My::Role role' );
130}
131
132{
133 package MultiChild2;
134 use Moose;
135 use Test::More;
136 use Test::Exception;
137 lives_ok {
138 extends 'MultiParent2';
139 }
140 'Can extend class that itself extends two non-Moose classes with Moose parents (reverse order)';
141}
142
143{
144 ok( MultiChild2->meta->meta->can('does_role')
145 && MultiChild2->meta->meta->does_role('My::Role'),
146 'MultiChild2 meta metaclass does the My::Role role' );
147}
148
149{
150 package MultiChild3;
151 use Moose;
152 use Test::More;
153 use Test::Exception;
154 lives_ok {
155 extends 'MultiParent3';
156 }
157 'Can extend class that itself extends one Moose and one non-Moose parent';
158}
159
160{
161 ok( MultiChild3->meta->meta->can('does_role')
162 && MultiChild3->meta->meta->does_role('My::Role'),
163 'MultiChild3 meta metaclass does the My::Role role' );
164}
165
166{
167 package MultiChild4;
168 use Moose;
169 use Test::More;
170 use Test::Exception;
171 lives_ok {
172 extends 'MultiParent4';
173 }
174 'Can extend class that itself extends one non-Moose and one Moose parent';
175}
176
177{
178 ok( MultiChild4->meta->meta->can('does_role')
179 && MultiChild4->meta->meta->does_role('My::Role'),
180 'MultiChild4 meta metaclass does the My::Role role' );
181}
182