method stuff worked out
[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(
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
53eval { My::2::B->meta->class_precedence_list };
54ok($@, '... 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
77is_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)');