Class::MOP - closer
[gitmo/Class-MOP.git] / t / 002_class_precedence_list.t
CommitLineData
0882828e 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More no_plan => 1;
7
8BEGIN {
9 use_ok('Class::MOP');
10 use_ok('Class::MOP::Class');
11}
12
13=pod
14
15 A
16 / \
17B 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
33is_deeply(
bfe4d0fc 34 [ Class::MOP::Class->initialize('My::D')->class_precedence_list ],
0882828e 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
bfe4d0fc 40 A <-+
41 | |
42 B |
43 | |
44 C --+
0882828e 45
46=cut
47
48{
49 package My::2::A;
bfe4d0fc 50 our @ISA = ('My::2::C');
51
0882828e 52 package My::2::B;
bfe4d0fc 53 our @ISA = ('My::2::A');
54
55 package My::2::C;
56 our @ISA = ('My::2::B');
0882828e 57}
58
bfe4d0fc 59eval { Class::MOP::Class->initialize('My::2::B')->class_precedence_list };
0882828e 60ok($@, '... recursive inheritance breaks correctly :)');
61
62=pod
63
64 +--------+
65 | A |
66 | / \ |
67 +->B C-+
68 \ /
69 D
70
71=cut
72
73{
74 package My::3::A;
75 package My::3::B;
76 our @ISA = ('My::3::A');
77 package My::3::C;
78 our @ISA = ('My::3::A', 'My::3::B');
79 package My::3::D;
80 our @ISA = ('My::3::B', 'My::3::C');
81}
82
83is_deeply(
bfe4d0fc 84 [ Class::MOP::Class->initialize('My::3::D')->class_precedence_list ],
0882828e 85 [ 'My::3::D', 'My::3::B', 'My::3::A', 'My::3::C', 'My::3::A', 'My::3::B', 'My::3::A' ],
86 '... My::3::D->meta->class_precedence_list == (D B A C A B A)');