Commit | Line | Data |
e1a479c5 |
1 | #!./perl |
2 | |
3 | use strict; |
4 | use warnings; |
e1a479c5 |
5 | |
c94dd5be |
6 | require q(./test.pl); plan(tests => 12); |
e1a479c5 |
7 | |
8 | =pod |
9 | |
10 | This example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879 |
11 | |
12 | --- --- --- |
13 | Level 5 8 | A | 9 | B | A | C | (More General) |
14 | --- --- --- V |
15 | \ | / | |
16 | \ | / | |
17 | \ | / | |
18 | \ | / | |
19 | --- | |
20 | Level 4 7 | D | | |
21 | --- | |
22 | / \ | |
23 | / \ | |
24 | --- --- | |
25 | Level 3 4 | G | 6 | E | | |
26 | --- --- | |
27 | | | | |
28 | | | | |
29 | --- --- | |
30 | Level 2 3 | H | 5 | F | | |
31 | --- --- | |
32 | \ / | | |
33 | \ / | | |
34 | \ | | |
35 | / \ | | |
36 | / \ | | |
37 | --- --- | |
38 | Level 1 1 | J | 2 | I | | |
39 | --- --- | |
40 | \ / | |
41 | \ / | |
42 | --- v |
43 | Level 0 0 | K | (More Specialized) |
44 | --- |
45 | |
46 | |
47 | 0123456789A |
48 | KJIHGFEDABC |
49 | |
50 | =cut |
51 | |
52 | { |
53 | package Test::A; use mro 'c3'; |
54 | |
55 | package Test::B; use mro 'c3'; |
56 | |
57 | package Test::C; use mro 'c3'; |
58 | |
59 | package Test::D; use mro 'c3'; |
60 | use base qw/Test::A Test::B Test::C/; |
61 | |
62 | package Test::E; use mro 'c3'; |
63 | use base qw/Test::D/; |
64 | |
65 | package Test::F; use mro 'c3'; |
66 | use base qw/Test::E/; |
67 | sub testmeth { "wrong" } |
68 | |
69 | package Test::G; use mro 'c3'; |
70 | use base qw/Test::D/; |
71 | |
72 | package Test::H; use mro 'c3'; |
73 | use base qw/Test::G/; |
74 | |
75 | package Test::I; use mro 'c3'; |
76 | use base qw/Test::H Test::F/; |
77 | sub testmeth { "right" } |
78 | |
79 | package Test::J; use mro 'c3'; |
80 | use base qw/Test::F/; |
81 | |
82 | package Test::K; use mro 'c3'; |
83 | use base qw/Test::J Test::I/; |
84 | sub testmeth { shift->next::method } |
85 | } |
86 | |
c94dd5be |
87 | ok(eq_array( |
e1a479c5 |
88 | mro::get_linear_isa('Test::A'), |
c94dd5be |
89 | [ qw(Test::A) ] |
90 | ), '... got the right C3 merge order for Test::A'); |
e1a479c5 |
91 | |
c94dd5be |
92 | ok(eq_array( |
e1a479c5 |
93 | mro::get_linear_isa('Test::B'), |
c94dd5be |
94 | [ qw(Test::B) ] |
95 | ), '... got the right C3 merge order for Test::B'); |
e1a479c5 |
96 | |
c94dd5be |
97 | ok(eq_array( |
e1a479c5 |
98 | mro::get_linear_isa('Test::C'), |
c94dd5be |
99 | [ qw(Test::C) ] |
100 | ), '... got the right C3 merge order for Test::C'); |
e1a479c5 |
101 | |
c94dd5be |
102 | ok(eq_array( |
e1a479c5 |
103 | mro::get_linear_isa('Test::D'), |
c94dd5be |
104 | [ qw(Test::D Test::A Test::B Test::C) ] |
105 | ), '... got the right C3 merge order for Test::D'); |
e1a479c5 |
106 | |
c94dd5be |
107 | ok(eq_array( |
e1a479c5 |
108 | mro::get_linear_isa('Test::E'), |
c94dd5be |
109 | [ qw(Test::E Test::D Test::A Test::B Test::C) ] |
110 | ), '... got the right C3 merge order for Test::E'); |
e1a479c5 |
111 | |
c94dd5be |
112 | ok(eq_array( |
e1a479c5 |
113 | mro::get_linear_isa('Test::F'), |
c94dd5be |
114 | [ qw(Test::F Test::E Test::D Test::A Test::B Test::C) ] |
115 | ), '... got the right C3 merge order for Test::F'); |
e1a479c5 |
116 | |
c94dd5be |
117 | ok(eq_array( |
e1a479c5 |
118 | mro::get_linear_isa('Test::G'), |
c94dd5be |
119 | [ qw(Test::G Test::D Test::A Test::B Test::C) ] |
120 | ), '... got the right C3 merge order for Test::G'); |
e1a479c5 |
121 | |
c94dd5be |
122 | ok(eq_array( |
e1a479c5 |
123 | mro::get_linear_isa('Test::H'), |
c94dd5be |
124 | [ qw(Test::H Test::G Test::D Test::A Test::B Test::C) ] |
125 | ), '... got the right C3 merge order for Test::H'); |
e1a479c5 |
126 | |
c94dd5be |
127 | ok(eq_array( |
e1a479c5 |
128 | mro::get_linear_isa('Test::I'), |
c94dd5be |
129 | [ qw(Test::I Test::H Test::G Test::F Test::E Test::D Test::A Test::B Test::C) ] |
130 | ), '... got the right C3 merge order for Test::I'); |
e1a479c5 |
131 | |
c94dd5be |
132 | ok(eq_array( |
e1a479c5 |
133 | mro::get_linear_isa('Test::J'), |
c94dd5be |
134 | [ qw(Test::J Test::F Test::E Test::D Test::A Test::B Test::C) ] |
135 | ), '... got the right C3 merge order for Test::J'); |
e1a479c5 |
136 | |
c94dd5be |
137 | ok(eq_array( |
e1a479c5 |
138 | mro::get_linear_isa('Test::K'), |
c94dd5be |
139 | [ qw(Test::K Test::J Test::I Test::H Test::G Test::F Test::E Test::D Test::A Test::B Test::C) ] |
140 | ), '... got the right C3 merge order for Test::K'); |
e1a479c5 |
141 | |
142 | is(Test::K->testmeth(), "right", 'next::method working ok'); |