adding more crap
[gitmo/Class-MOP.git] / t / 002_class_precedence_list.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More no_plan => 1;
7
8 BEGIN {
9     use_ok('Class::MOP');   
10     use_ok('Class::MOP::Class');        
11 }
12
13 =pod
14
15   A
16  / \
17 B   C
18  \ / 
19   D
20
21 =cut
22
23 {
24     package My::A;
25     package My::B;
26     our @ISA = ('My::A');
27     package My::C;
28     our @ISA = ('My::A');    
29     package My::D;       
30     our @ISA = ('My::B', 'My::C');         
31 }
32
33 is_deeply(
34     [ My::D->meta->class_precedence_list ], 
35     [ 'My::D', 'My::B', 'My::A', 'My::C', 'My::A' ], 
36     '... My::D->meta->class_precedence_list == (D B A C A)');
37
38 =pod
39
40 +-- B <-+
41 |       |
42 +-> A --+
43
44 =cut
45
46 {
47     package My::2::A;
48     our @ISA = ('My::2::B');
49     package My::2::B;
50     our @ISA = ('My::2::A');       
51 }
52
53 eval { My::2::B->meta->class_precedence_list };
54 ok($@, '... recursive inheritance breaks correctly :)');
55
56 =pod
57
58  +--------+
59  |    A   |
60  |   / \  |
61  +->B   C-+
62      \ / 
63       D
64
65 =cut
66
67 {
68     package My::3::A;
69     package My::3::B;
70     our @ISA = ('My::3::A');
71     package My::3::C;
72     our @ISA = ('My::3::A', 'My::3::B');    
73     package My::3::D;       
74     our @ISA = ('My::3::B', 'My::3::C');         
75 }
76
77 is_deeply(
78     [ My::3::D->meta->class_precedence_list ], 
79     [ 'My::3::D', 'My::3::B', 'My::3::A', 'My::3::C', 'My::3::A', 'My::3::B', 'My::3::A' ], 
80     '... My::3::D->meta->class_precedence_list == (D B A C A B A)');