5 use File::Spec::Functions;
13 use lib catdir( $FindBin::Bin, 'lib' );
23 __PACKAGE__->meta->make_immutable;
31 __PACKAGE__->meta->make_immutable;
37 use metaclass 'MyMetaClass';
39 sub mymetaclass_attributes {
40 shift->meta->mymetaclass_attributes;
43 ::lives_ok{ Baz->meta->superclasses('Bar') }
44 '... we survive the metaclass incompatibility test';
49 ok( $meta->is_mutable, '... Baz is mutable' );
51 Scalar::Util::blessed( Foo->meta ),
52 Scalar::Util::blessed( Bar->meta ),
53 'Foo and Bar immutable metaclasses match'
55 is( Scalar::Util::blessed($meta), 'MyMetaClass',
56 'Baz->meta blessed as MyMetaClass' );
57 ok( Baz->can('mymetaclass_attributes'),
58 '... Baz can do method before immutable' );
59 ok( $meta->can('mymetaclass_attributes'),
60 '... meta can do method before immutable' );
61 lives_ok { $meta->make_immutable } "Baz is now immutable";
62 ok( $meta->is_immutable, '... Baz is immutable' );
63 isa_ok( $meta, 'MyMetaClass', 'Baz->meta' );
64 ok( Baz->can('mymetaclass_attributes'),
65 '... Baz can do method after imutable' );
66 ok( $meta->can('mymetaclass_attributes'),
67 '... meta can do method after immutable' );
68 isnt( Scalar::Util::blessed( Baz->meta ),
69 Scalar::Util::blessed( Bar->meta ),
70 'Baz and Bar immutable metaclasses are different' );
71 lives_ok { $meta->make_mutable } "Baz is now mutable";
72 ok( $meta->is_mutable, '... Baz is mutable again' );