3a3b6bf0292ea083c3c671e8a6b1623ce0d734a8
[gitmo/MooseX-MetaDescription.git] / t / 004_inheriting_class_meta_desc.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More no_plan => 1;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('MooseX::MetaDescription');
11 }
12
13 {
14     package Foo;
15     use metaclass 'MooseX::MetaDescription::Meta::Class' => (
16         description => {
17             'Hello' => 'World',
18             'World' => 'Hello',
19         }
20     );
21     use Moose;
22
23     package Bar;
24     use Moose;
25
26     extends 'Foo';
27     
28     # always add it *after* the extends
29     __PACKAGE__->meta->description->{'Hello'} = 'Earth';
30     
31     package Baz;
32     use Moose;
33
34     extends 'Bar';
35     
36     package Gorch;
37     use metaclass 'MooseX::MetaDescription::Meta::Class' => (
38         description => {
39             'Hello' => 'World'
40         }
41     );    
42     use Moose;
43
44     extends 'Baz';    
45 }
46
47 # check the meta-desc
48
49 my $foo_class = Foo->meta;
50 isa_ok($foo_class, 'MooseX::MetaDescription::Meta::Class');
51 isa_ok($foo_class->metadescription, 'MooseX::MetaDescription::Description');
52 is($foo_class->metadescription->descriptor, $foo_class, '... got the circular ref');
53
54 my $bar_class = Bar->meta;
55 isa_ok($bar_class, 'MooseX::MetaDescription::Meta::Class');
56 isa_ok($bar_class->metadescription, 'MooseX::MetaDescription::Description');
57 is($bar_class->metadescription->descriptor, $bar_class, '... got the circular ref');
58
59 my $baz_class = Baz->meta;
60 isa_ok($baz_class, 'MooseX::MetaDescription::Meta::Class');
61 isa_ok($baz_class->metadescription, 'MooseX::MetaDescription::Description');
62 is($baz_class->metadescription->descriptor, $baz_class, '... got the circular ref');
63
64 my $gorch_class = Gorch->meta;
65 isa_ok($gorch_class, 'MooseX::MetaDescription::Meta::Class');
66 isa_ok($gorch_class->metadescription, 'MooseX::MetaDescription::Description');
67 is($gorch_class->metadescription->descriptor, $gorch_class, '... got the circular ref');
68
69 foreach my $x ('Foo', Foo->new) {
70     is_deeply(
71         $x->meta->description,
72         { 
73             'Hello' => 'World',
74             'World' => 'Hello'            
75         },
76         '... got the right class description'
77     );
78 }
79
80 foreach my $x ('Bar', Bar->new) {
81     is_deeply(
82         $x->meta->description,
83         { 
84             'Hello' => 'Earth',
85             'World' => 'Hello'            
86         },
87         '... got the right class description (inherited and changed)'
88     );
89 }
90
91 foreach my $x ('Baz', Baz->new) {
92     is_deeply(
93         $x->meta->description,
94         { 
95             'Hello' => 'Earth',
96             'World' => 'Hello'            
97         },
98         '... got the right class description (inherited with changes handles correctly)'
99     );
100 }
101
102 foreach my $x ('Gorch', Gorch->new) {
103     is_deeply(
104         $x->meta->description,
105         { 
106             'Hello' => 'World',
107         },
108         '... got the right class description (with completely overriden desc)'
109     );
110 }