finish get_attribute_values etc
[gitmo/Class-MOP.git] / t / 040_metaclass.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 12;
7
8 BEGIN {
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
20 can_ok('Foo', 'meta');
21 isa_ok(Foo->meta, 'FooMeta');
22 isa_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
41 can_ok('Bar', 'meta');
42 isa_ok(Bar->meta, 'BarMeta');
43 isa_ok(Bar->meta, 'Class::MOP::Class');
44
45 is(Bar->meta->attribute_metaclass, 'BarMeta::Attribute', '... got the right attribute metaobject');
46 is(Bar->meta->method_metaclass, 'BarMeta::Method', '... got the right method metaobject');
47
48 {
49     package Baz;
50     use metaclass;
51 }
52
53 can_ok('Baz', 'meta');
54 isa_ok(Baz->meta, 'Class::MOP::Class');
55
56 eval {   
57     package Boom;
58     metaclass->import('Foo');
59 };
60 ok($@, '... metaclasses must be subclass of Class::MOP::Class');
61