Extend t0m's tests for mixed moose/non-moose parentage to make sure
[gitmo/Moose.git] / t / 060_compat / 004_extends_nonmoose_that_isa_moose_with_metarole.t
1 use strict;
2 use warnings;
3 use Test::More tests => 18;
4
5 {
6     package My::Role;
7     use Moose::Role;
8 }
9
10 {
11     package SomeClass;
12     use Moose -traits => 'My::Role';
13 }
14
15 {
16     package SubClassUseBase;
17     use base qw/SomeClass/;
18 }
19
20 {
21     package SubSubClassUseBase;
22     use Moose;
23     use Test::More;
24     use Test::Exception;
25     lives_ok {
26         extends 'SubClassUseBase';
27     }
28     'Can extend non-Moose class with parent class that is a Moose class with a meta role';
29 }
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