9 package Foo::Trait::Constructor;
12 around _generate_BUILDALL => sub {
15 return $self->$orig(@_) . '$::called++;';
22 Moose::Util::MetaRole::apply_metaroles(
25 constructor => ['Foo::Trait::Constructor'],
31 is($called, 0, "no calls before inlining");
32 Foo->meta->make_immutable;
35 is($called, 1, "inlined constructor has trait modifications");
37 ok(Foo->meta->constructor_class->meta->does_role('Foo::Trait::Constructor'),
38 "class has correct constructor traits");
49 is($called, 0, "no calls before inlining");
51 Foo::Sub->meta->make_immutable;
54 is($called, 1, "inherits constructor trait properly");
56 ok(Foo::Sub->meta->constructor_class->meta->can('does_role')
57 && Foo::Sub->meta->constructor_class->meta->does_role('Foo::Trait::Constructor'),
58 "subclass inherits constructor traits");
66 use Moose -traits => ['Foo2::Role'];
75 my $meta = __PACKAGE__->meta;
76 ::lives_ok { $meta->superclasses('Foo2') } "can set superclasses once";
77 ::isa_ok($meta, Foo2->meta->meta->name);
78 ::lives_ok { $meta->superclasses('Bar2') } "can still set superclasses";
79 ::isa_ok($meta, Bar2->meta->meta->name);
80 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
82 "still have the role attached");
83 ::ok(!$meta->is_immutable,
84 "immutable superclass doesn't make this class immutable");
85 ::lives_ok { $meta->make_immutable } "can still make immutable";
93 use Moose -traits => ['Foo3::Role'];
97 use Moose -traits => ['Foo3::Role'];
98 my $meta = __PACKAGE__->meta;
99 ::lives_ok { $meta->superclasses('Foo2') } "can set superclasses once";
100 ::isa_ok($meta, Foo2->meta->meta->name);
101 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
102 ['Foo2::Role', 'Foo3::Role'],
103 "reconciled roles correctly");
104 ::lives_ok { $meta->superclasses('Bar3') } "can still set superclasses";
105 ::isa_ok($meta, Bar3->meta->meta->name);
106 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
107 ['Foo2::Role', 'Foo3::Role'],
108 "roles still the same");
109 ::ok(!$meta->is_immutable,
110 "immutable superclass doesn't make this class immutable");
111 ::lives_ok { $meta->make_immutable } "can still make immutable";
119 use Moose -traits => ['Foo3::Role'];
120 my $meta = __PACKAGE__->meta;
121 ::lives_ok { $meta->superclasses('Foo2') } "can set superclasses once";
122 ::isa_ok($meta, Foo2->meta->meta->name);
123 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
124 ['Foo2::Role', 'Foo3::Role'],
125 "reconciled roles correctly");
126 ::lives_ok { $meta->superclasses('Quux3') } "can still set superclasses";
127 ::isa_ok($meta, Quux3->meta->meta->name);
128 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
129 ['Foo2::Role', 'Foo3::Role'],
130 "roles still the same");
131 ::ok(!$meta->is_immutable,
132 "immutable superclass doesn't make this class immutable");
133 ::lives_ok { $meta->make_immutable } "can still make immutable";
142 use Moose -traits => ['Foo4::Role'];
143 __PACKAGE__->meta->make_immutable;
152 my $meta = __PACKAGE__->meta;
153 ::lives_ok { $meta->superclasses('Foo4') } "can set superclasses once";
154 ::isa_ok($meta, Foo4->meta->_get_mutable_metaclass_name);
155 ::lives_ok { $meta->superclasses('Bar4') } "can still set superclasses";
156 ::isa_ok($meta, Bar4->meta->meta->name);
157 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
159 "still have the role attached");
160 ::ok(!$meta->is_immutable,
161 "immutable superclass doesn't make this class immutable");
162 ::lives_ok { $meta->make_immutable } "can still make immutable";
170 use Moose -traits => ['Foo5::Role'];
174 use Moose -traits => ['Foo5::Role'];
175 my $meta = __PACKAGE__->meta;
176 ::lives_ok { $meta->superclasses('Foo4') } "can set superclasses once";
177 ::isa_ok($meta, Foo4->meta->_get_mutable_metaclass_name);
178 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
179 ['Foo4::Role', 'Foo5::Role'],
180 "reconciled roles correctly");
181 ::lives_ok { $meta->superclasses('Bar5') } "can still set superclasses";
182 ::isa_ok($meta, Bar5->meta->meta->name);
183 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
184 ['Foo4::Role', 'Foo5::Role'],
185 "roles still the same");
186 ::ok(!$meta->is_immutable,
187 "immutable superclass doesn't make this class immutable");
188 ::lives_ok { $meta->make_immutable } "can still make immutable";
196 use Moose -traits => ['Foo5::Role'];
197 my $meta = __PACKAGE__->meta;
198 ::lives_ok { $meta->superclasses('Foo4') } "can set superclasses once";
199 ::isa_ok($meta, Foo4->meta->_get_mutable_metaclass_name);
200 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
201 ['Foo4::Role', 'Foo5::Role'],
202 "reconciled roles correctly");
203 ::lives_ok { $meta->superclasses('Quux5') } "can still set superclasses";
204 ::isa_ok($meta, Quux5->meta->meta->name);
205 ::is_deeply([sort map { $_->name } $meta->meta->calculate_all_roles_with_inheritance],
206 ['Foo4::Role', 'Foo5::Role'],
207 "roles still the same");
208 ::ok(!$meta->is_immutable,
209 "immutable superclass doesn't make this class immutable");
210 ::lives_ok { $meta->make_immutable } "can still make immutable";