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