Import Mouse
[gitmo/Mouse.git] / t / 100-meta-class.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More tests => 12;
5
6 do {
7     package Class;
8     use Mouse;
9
10     has pawn => (
11         is        => 'rw',
12         predicate => 'has_pawn',
13     );
14
15     no Mouse;
16 };
17
18 my $meta = Class->meta;
19 isa_ok($meta, 'Mouse::Class');
20
21 is_deeply([$meta->superclasses], ['Mouse::Object'], "correctly inherting from Mouse::Object");
22
23 my $meta2 = Class->meta;
24 is($meta, $meta2, "same metaclass instance");
25
26 can_ok($meta, 'name', 'attributes', 'get_attribute_map');
27
28 my $attr = $meta->get_attribute('pawn');
29 isa_ok($attr, 'Mouse::Attribute');
30 is($attr->name, 'pawn', 'got the correct attribute');
31
32 my $map = $meta->get_attribute_map;
33 is_deeply($map, { pawn => $attr }, "attribute map");
34
35 eval "
36     package Class;
37     use Mouse;
38     no Mouse;
39 ";
40
41 my $meta3 = Class->meta;
42 is($meta, $meta3, "same metaclass instance, even if use Mouse is performed again");
43
44 is($meta->name, 'Class', "name for the metaclass");
45
46 do {
47     package Child;
48     use Mouse;
49     extends 'Class';
50 };
51
52 my $child_meta = Child->meta;
53 isa_ok($child_meta, 'Mouse::Class');
54
55 isnt($meta, $child_meta, "different metaclass instances for the two classes");
56
57 is_deeply([$child_meta->superclasses], ['Class'], "correct superclasses");