Merged CMOP into Moose
[gitmo/Moose.git] / t / 001_cmop / 087_subclasses.t
1 use strict;
2 use warnings;
3 use Test::More;
4 use Class::MOP;
5
6 do {
7     package Grandparent;
8     use metaclass;
9
10     package Parent;
11     use metaclass;
12     use base 'Grandparent';
13
14     package Uncle;
15     use metaclass;
16     use base 'Grandparent';
17
18     package Son;
19     use metaclass;
20     use base 'Parent';
21
22     package Daughter;
23     use metaclass;
24     use base 'Parent';
25
26     package Cousin;
27     use metaclass;
28     use base 'Uncle';
29 };
30
31 is_deeply([sort Grandparent->meta->subclasses], ['Cousin', 'Daughter', 'Parent', 'Son', 'Uncle']);
32 is_deeply([sort Parent->meta->subclasses],      ['Daughter', 'Son']);
33 is_deeply([sort Uncle->meta->subclasses],       ['Cousin']);
34 is_deeply([sort Son->meta->subclasses],         []);
35 is_deeply([sort Daughter->meta->subclasses],    []);
36 is_deeply([sort Cousin->meta->subclasses],      []);
37
38 is_deeply([sort Grandparent->meta->direct_subclasses], ['Parent', 'Uncle']);
39 is_deeply([sort Parent->meta->direct_subclasses],      ['Daughter', 'Son']);
40 is_deeply([sort Uncle->meta->direct_subclasses],       ['Cousin']);
41 is_deeply([sort Son->meta->direct_subclasses],         []);
42 is_deeply([sort Daughter->meta->direct_subclasses],    []);
43 is_deeply([sort Cousin->meta->direct_subclasses],      []);
44
45 done_testing;