We only need local $? if we inline calls to DEMOLISH
[gitmo/Moose.git] / t / cmop / metaclass.t
CommitLineData
38bf2a25 1use strict;
2use warnings;
3
4use Test::More;
5
6use metaclass;
7
8{
9 package FooMeta;
10 use base 'Class::MOP::Class';
11
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';
23
24 package BarMeta::Attribute;
25 use base 'Class::MOP::Attribute';
26
27 package BarMeta::Method;
28 use base 'Class::MOP::Method';
29
30 package Bar;
31 use metaclass 'BarMeta' => (
32 'attribute_metaclass' => 'BarMeta::Attribute',
33 'method_metaclass' => 'BarMeta::Method',
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
52eval {
53 package Boom;
54 metaclass->import('Foo');
55};
56ok($@, '... metaclasses must be subclass of Class::MOP::Class');
57
58done_testing;