inheriting class desc
[gitmo/MooseX-MetaDescription.git] / t / 004_inheriting_class_meta_desc.t
diff --git a/t/004_inheriting_class_meta_desc.t b/t/004_inheriting_class_meta_desc.t
new file mode 100644 (file)
index 0000000..ceff575
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More no_plan => 1;
+use Test::Exception;
+
+BEGIN {
+    use_ok('MooseX::MetaDescription');
+}
+
+{
+    package Foo;
+    use metaclass 'MooseX::MetaDescription::Meta::Class' => (
+        description => {
+            'Hello' => 'World',
+            'World' => 'Hello',
+        }
+    );
+    use Moose;
+
+    package Bar;
+    use Moose;
+
+    extends 'Foo';
+    
+    __PACKAGE__->meta->description->{'Hello'} = 'Earth';
+    
+    package Baz;
+    use Moose;
+
+    extends 'Bar';
+}
+
+# check the meta-desc
+
+my $foo_class = Foo->meta;
+isa_ok($foo_class, 'MooseX::MetaDescription::Meta::Class');
+isa_ok($foo_class->metadescription, 'MooseX::MetaDescription::Description');
+is($foo_class->metadescription->descriptor, $foo_class, '... got the circular ref');
+
+my $bar_class = Bar->meta;
+isa_ok($bar_class, 'MooseX::MetaDescription::Meta::Class');
+isa_ok($bar_class->metadescription, 'MooseX::MetaDescription::Description');
+is($bar_class->metadescription->descriptor, $bar_class, '... got the circular ref');
+
+my $baz_class = Baz->meta;
+isa_ok($baz_class, 'MooseX::MetaDescription::Meta::Class');
+isa_ok($baz_class->metadescription, 'MooseX::MetaDescription::Description');
+is($baz_class->metadescription->descriptor, $baz_class, '... got the circular ref');
+
+
+foreach my $x ('Foo', Foo->new) {
+    is_deeply(
+        $x->meta->description,
+        { 
+            'Hello' => 'World',
+            'World' => 'Hello'            
+        },
+        '... got the right class description'
+    );
+}
+
+foreach my $x ('Bar', Bar->new) {
+    is_deeply(
+        $x->meta->description,
+        { 
+            'Hello' => 'Earth',
+            'World' => 'Hello'            
+        },
+        '... got the right class description'
+    );
+}
+
+foreach my $x ('Baz', Baz->new) {
+    is_deeply(
+        $x->meta->description,
+        { 
+            'Hello' => 'Earth',
+            'World' => 'Hello'            
+        },
+        '... got the right class description'
+    );
+}
+