summaryrefslogtreecommitdiff
path: root/t/cmop/metaclass_inheritance.t
diff options
context:
space:
mode:
Diffstat (limited to 't/cmop/metaclass_inheritance.t')
-rw-r--r--t/cmop/metaclass_inheritance.t43
1 files changed, 43 insertions, 0 deletions
diff --git a/t/cmop/metaclass_inheritance.t b/t/cmop/metaclass_inheritance.t
new file mode 100644
index 0000000..0cc2a5c
--- /dev/null
+++ b/t/cmop/metaclass_inheritance.t
@@ -0,0 +1,43 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Class::MOP;
+
+=pod
+
+Test that a default set up will cause metaclasses to inherit
+the same metaclass type, but produce different metaclasses.
+
+=cut
+
+{
+ package Foo;
+ use metaclass;
+
+ package Bar;
+ use parent -norequire => 'Foo';
+
+ package Baz;
+ use parent -norequire => 'Bar';
+}
+
+my $foo_meta = Foo->meta;
+isa_ok($foo_meta, 'Class::MOP::Class');
+
+is($foo_meta->name, 'Foo', '... foo_meta->name == Foo');
+
+my $bar_meta = Bar->meta;
+isa_ok($bar_meta, 'Class::MOP::Class');
+
+is($bar_meta->name, 'Bar', '... bar_meta->name == Bar');
+isnt($bar_meta, $foo_meta, '... Bar->meta != Foo->meta');
+
+my $baz_meta = Baz->meta;
+isa_ok($baz_meta, 'Class::MOP::Class');
+
+is($baz_meta->name, 'Baz', '... baz_meta->name == Baz');
+isnt($baz_meta, $bar_meta, '... Baz->meta != Bar->meta');
+isnt($baz_meta, $foo_meta, '... Baz->meta != Foo->meta');
+
+done_testing;