make inlining a bit more easily extensible
[gitmo/Class-MOP.git] / t / 040_metaclass.t
CommitLineData
550d56db 1use strict;
2use warnings;
3
86a4d873 4use Test::More;
550d56db 5
86a4d873 6use metaclass;
550d56db 7
8{
9 package FooMeta;
10 use base 'Class::MOP::Class';
86a4d873 11
550d56db 12 package Foo;
13 use metaclass 'FooMeta';
14}
15
16can_ok('Foo', 'meta');
17isa_ok(Foo->meta, 'FooMeta');
18isa_ok(Foo->meta, 'Class::MOP::Class');
19
20{
21 package BarMeta;
22 use base 'Class::MOP::Class';
86a4d873 23
550d56db 24 package BarMeta::Attribute;
25 use base 'Class::MOP::Attribute';
86a4d873 26
550d56db 27 package BarMeta::Method;
86a4d873 28 use base 'Class::MOP::Method';
29
550d56db 30 package Bar;
31 use metaclass 'BarMeta' => (
c23184fc 32 'attribute_metaclass' => 'BarMeta::Attribute',
86a4d873 33 'method_metaclass' => 'BarMeta::Method',
550d56db 34 );
35}
36
37can_ok('Bar', 'meta');
38isa_ok(Bar->meta, 'BarMeta');
39isa_ok(Bar->meta, 'Class::MOP::Class');
40
41is(Bar->meta->attribute_metaclass, 'BarMeta::Attribute', '... got the right attribute metaobject');
42is(Bar->meta->method_metaclass, 'BarMeta::Method', '... got the right method metaobject');
43
44{
45 package Baz;
46 use metaclass;
47}
48
49can_ok('Baz', 'meta');
50isa_ok(Baz->meta, 'Class::MOP::Class');
51
86a4d873 52eval {
550d56db 53 package Boom;
54 metaclass->import('Foo');
55};
56ok($@, '... metaclasses must be subclass of Class::MOP::Class');
57
86a4d873 58done_testing;