summaryrefslogtreecommitdiff
path: root/t/cmop/subclasses.t
diff options
context:
space:
mode:
Diffstat (limited to 't/cmop/subclasses.t')
-rw-r--r--t/cmop/subclasses.t45
1 files changed, 45 insertions, 0 deletions
diff --git a/t/cmop/subclasses.t b/t/cmop/subclasses.t
new file mode 100644
index 0000000..3104bf4
--- /dev/null
+++ b/t/cmop/subclasses.t
@@ -0,0 +1,45 @@
+use strict;
+use warnings;
+use Test::More;
+use Class::MOP;
+
+do {
+ package Grandparent;
+ use metaclass;
+
+ package Parent;
+ use metaclass;
+ use parent -norequire => 'Grandparent';
+
+ package Uncle;
+ use metaclass;
+ use parent -norequire => 'Grandparent';
+
+ package Son;
+ use metaclass;
+ use parent -norequire => 'Parent';
+
+ package Daughter;
+ use metaclass;
+ use parent -norequire => 'Parent';
+
+ package Cousin;
+ use metaclass;
+ use parent -norequire => 'Uncle';
+};
+
+is_deeply([sort Grandparent->meta->subclasses], ['Cousin', 'Daughter', 'Parent', 'Son', 'Uncle']);
+is_deeply([sort Parent->meta->subclasses], ['Daughter', 'Son']);
+is_deeply([sort Uncle->meta->subclasses], ['Cousin']);
+is_deeply([sort Son->meta->subclasses], []);
+is_deeply([sort Daughter->meta->subclasses], []);
+is_deeply([sort Cousin->meta->subclasses], []);
+
+is_deeply([sort Grandparent->meta->direct_subclasses], ['Parent', 'Uncle']);
+is_deeply([sort Parent->meta->direct_subclasses], ['Daughter', 'Son']);
+is_deeply([sort Uncle->meta->direct_subclasses], ['Cousin']);
+is_deeply([sort Son->meta->direct_subclasses], []);
+is_deeply([sort Daughter->meta->direct_subclasses], []);
+is_deeply([sort Cousin->meta->direct_subclasses], []);
+
+done_testing;