inheriting class desc
[gitmo/MooseX-MetaDescription.git] / t / 001_basic.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         }
19     );
20     use Moose;
21     
22     has 'bar' => (
23         metaclass   => 'MooseX::MetaDescription::Meta::Attribute',
24         is          => 'ro',
25         isa         => 'Str',   
26         default     => sub { 'Foo::bar' },
27         description => {
28             baz   => 'Foo::bar::baz',
29             gorch => 'Foo::bar::gorch',
30         }
31     );
32     
33     has 'baz' => (
34         traits      => [ 'MooseX::MetaDescription::Meta::Trait' ],
35         is          => 'ro',
36         isa         => 'Str',   
37         default     => sub { 'Foo::baz' },
38         description => {
39             bar   => 'Foo::baz::bar',
40             gorch => 'Foo::baz::gorch',
41         }
42     );    
43 }
44
45 # check the meta-desc
46
47 my $foo_class = Foo->meta;
48 isa_ok($foo_class, 'MooseX::MetaDescription::Meta::Class');
49 isa_ok($foo_class->metadescription, 'MooseX::MetaDescription::Description');
50 is($foo_class->metadescription->descriptor, $foo_class, '... got the circular ref');
51
52 my $bar_attr = Foo->meta->get_attribute('bar');
53 isa_ok($bar_attr->metadescription, 'MooseX::MetaDescription::Description');
54 is($bar_attr->metadescription->descriptor, $bar_attr, '... got the circular ref');
55
56 my $baz_attr = Foo->meta->get_attribute('baz');
57 isa_ok($baz_attr->metadescription, 'MooseX::MetaDescription::Description');
58 is($baz_attr->metadescription->descriptor, $baz_attr, '... got the circular ref');
59
60 # check the actual descs
61
62 foreach my $foo ('Foo', Foo->new) {
63     is_deeply(
64         $foo->meta->description,
65         { 'Hello' => 'World' },
66         '... got the right class description'
67     );
68
69     is_deeply(
70         $foo->meta->get_attribute('bar')->description,
71         {
72             baz   => 'Foo::bar::baz',
73             gorch => 'Foo::bar::gorch',
74         },
75         '... got the right class description'
76     );
77
78     is_deeply(
79         $foo->meta->get_attribute('baz')->description,
80         {
81             bar   => 'Foo::baz::bar',
82             gorch => 'Foo::baz::gorch',
83         },
84         '... got the right class description'
85     );
86 }
87