Commit | Line | Data |
d9f5e5ae |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
d68e679f |
6 | use Test::More 'no_plan'; |
d9f5e5ae |
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 | |
56e78a9c |
28 | # always add it *after* the extends |
d9f5e5ae |
29 | __PACKAGE__->meta->description->{'Hello'} = 'Earth'; |
30 | |
31 | package Baz; |
32 | use Moose; |
33 | |
34 | extends 'Bar'; |
56e78a9c |
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'; |
d9f5e5ae |
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 | |
56e78a9c |
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'); |
d9f5e5ae |
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 | }, |
56e78a9c |
87 | '... got the right class description (inherited and changed)' |
d9f5e5ae |
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 | }, |
56e78a9c |
98 | '... got the right class description (inherited with changes handles correctly)' |
d9f5e5ae |
99 | ); |
100 | } |
101 | |
56e78a9c |
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 | } |