Commit | Line | Data |
38bf2a25 |
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; |