6 use Test::More tests => 8;
8 use Mouse::Util::MetaRole;
12 package My::Meta::Class;
14 extends 'Mouse::Meta::Class';
19 package My::Meta::Attribute;
21 extends 'Mouse::Meta::Attribute';
26 package My::Meta::Method;
28 extends 'Mouse::Meta::Method';
33 package My::Meta::Instance;
35 extends 'Mouse::Meta::Instance';
42 has 'foo' => ( is => 'ro', default => 10 );
48 use metaclass 'My::Meta::Class';
55 use metaclass 'My::Meta::Class' => (
56 attribute_metaclass => 'My::Meta::Attribute',
57 method_metaclass => 'My::Meta::Method',
58 instance_metaclass => 'My::Meta::Instance',
65 Mouse::Util::MetaRole::apply_metaclass_roles(
66 for_class => 'My::Class',
67 metaclass_roles => ['Role::Foo'],
70 ok( My::Class->meta()->meta()->does_role('Role::Foo'),
71 'apply Role::Foo to My::Class->meta()' );
72 has_superclass( My::Class->meta(), 'My::Meta::Class',
73 'apply_metaclass_roles works with metaclass.pm' );
77 Mouse::Util::MetaRole::apply_metaclass_roles(
78 for_class => 'My::Class2',
79 attribute_metaclass_roles => ['Role::Foo'],
80 method_metaclass_roles => ['Role::Foo'],
81 instance_metaclass_roles => ['Role::Foo'],
84 ok( My::Class2->meta()->attribute_metaclass()->meta()->does_role('Role::Foo'),
85 q{apply Role::Foo to My::Class2->meta()'s attribute metaclass} );
86 has_superclass( My::Class2->meta()->attribute_metaclass(), 'My::Meta::Attribute',
87 '... and this does not interfere with attribute metaclass set via metaclass.pm' );
88 ok( My::Class2->meta()->method_metaclass()->meta()->does_role('Role::Foo'),
89 q{apply Role::Foo to My::Class2->meta()'s method metaclass} );
90 has_superclass( My::Class2->meta()->method_metaclass(), 'My::Meta::Method',
91 '... and this does not interfere with method metaclass set via metaclass.pm' );
92 ok( My::Class2->meta()->instance_metaclass()->meta()->does_role('Role::Foo'),
93 q{apply Role::Foo to My::Class2->meta()'s instance metaclass} );
94 has_superclass( My::Class2->meta()->instance_metaclass(), 'My::Meta::Instance',
95 '... and this does not interfere with instance metaclass set via metaclass.pm' );
98 # like isa_ok but works with a class name, not just refs
104 my %supers = map { $_ => 1 } $thing->meta()->superclasses();
106 local $Test::Builder::Level = $Test::Builder::Level + 1;
108 ok( $supers{$parent}, $desc );