Re: new C3 MRO patch
[p5sagit/p5-mst-13.2.git] / t / mro / dbic_c3.t
1 #!./perl
2
3 use strict;
4 use warnings;
5 BEGIN {
6     unless (-d 'blib') {
7         chdir 't' if -d 't';
8         @INC = '../lib';
9     }
10 }
11
12 use Test::More tests => 1;
13
14 =pod
15
16 This example is taken from the inheritance graph of DBIx::Class::Core in DBIx::Class v0.07002:
17 (No ASCII art this time, this graph is insane)
18
19 The xx:: prefixes are just to be sure these bogus declarations never stomp on real ones
20
21 =cut
22
23 {
24     package xx::DBIx::Class::Core; use mro 'c3';
25     our @ISA = qw/
26       xx::DBIx::Class::Serialize::Storable
27       xx::DBIx::Class::InflateColumn
28       xx::DBIx::Class::Relationship
29       xx::DBIx::Class::PK::Auto
30       xx::DBIx::Class::PK
31       xx::DBIx::Class::Row
32       xx::DBIx::Class::ResultSourceProxy::Table
33       xx::DBIx::Class::AccessorGroup
34     /;
35
36     package xx::DBIx::Class::InflateColumn; use mro 'c3';
37     our @ISA = qw/ xx::DBIx::Class::Row /;
38
39     package xx::DBIx::Class::Row; use mro 'c3';
40     our @ISA = qw/ xx::DBIx::Class /;
41
42     package xx::DBIx::Class; use mro 'c3';
43     our @ISA = qw/
44       xx::DBIx::Class::Componentised
45       xx::Class::Data::Accessor
46     /;
47
48     package xx::DBIx::Class::Relationship; use mro 'c3';
49     our @ISA = qw/
50       xx::DBIx::Class::Relationship::Helpers
51       xx::DBIx::Class::Relationship::Accessor
52       xx::DBIx::Class::Relationship::CascadeActions
53       xx::DBIx::Class::Relationship::ProxyMethods
54       xx::DBIx::Class::Relationship::Base
55       xx::DBIx::Class
56     /;
57
58     package xx::DBIx::Class::Relationship::Helpers; use mro 'c3';
59     our @ISA = qw/
60       xx::DBIx::Class::Relationship::HasMany
61       xx::DBIx::Class::Relationship::HasOne
62       xx::DBIx::Class::Relationship::BelongsTo
63       xx::DBIx::Class::Relationship::ManyToMany
64     /;
65
66     package xx::DBIx::Class::Relationship::ProxyMethods; use mro 'c3';
67     our @ISA = qw/ xx::DBIx::Class /;
68
69     package xx::DBIx::Class::Relationship::Base; use mro 'c3';
70     our @ISA = qw/ xx::DBIx::Class /;
71
72     package xx::DBIx::Class::PK::Auto; use mro 'c3';
73     our @ISA = qw/ xx::DBIx::Class /;
74
75     package xx::DBIx::Class::PK; use mro 'c3';
76     our @ISA = qw/ xx::DBIx::Class::Row /;
77
78     package xx::DBIx::Class::ResultSourceProxy::Table; use mro 'c3';
79     our @ISA = qw/
80       xx::DBIx::Class::AccessorGroup
81       xx::DBIx::Class::ResultSourceProxy
82     /;
83
84     package xx::DBIx::Class::ResultSourceProxy; use mro 'c3';
85     our @ISA = qw/ xx::DBIx::Class /;
86
87     package xx::Class::Data::Accessor; our @ISA = (); use mro 'c3';
88     package xx::DBIx::Class::Relationship::HasMany; our @ISA = (); use mro 'c3';
89     package xx::DBIx::Class::Relationship::HasOne; our @ISA = (); use mro 'c3';
90     package xx::DBIx::Class::Relationship::BelongsTo; our @ISA = (); use mro 'c3';
91     package xx::DBIx::Class::Relationship::ManyToMany; our @ISA = (); use mro 'c3';
92     package xx::DBIx::Class::Componentised; our @ISA = (); use mro 'c3';
93     package xx::DBIx::Class::AccessorGroup; our @ISA = (); use mro 'c3';
94     package xx::DBIx::Class::Serialize::Storable; our @ISA = (); use mro 'c3';
95     package xx::DBIx::Class::Relationship::Accessor; our @ISA = (); use mro 'c3';
96     package xx::DBIx::Class::Relationship::CascadeActions; our @ISA = (); use mro 'c3';
97 }
98
99 is_deeply(
100     mro::get_linear_isa('xx::DBIx::Class::Core'),
101     [qw/
102         xx::DBIx::Class::Core
103         xx::DBIx::Class::Serialize::Storable
104         xx::DBIx::Class::InflateColumn
105         xx::DBIx::Class::Relationship
106         xx::DBIx::Class::Relationship::Helpers
107         xx::DBIx::Class::Relationship::HasMany
108         xx::DBIx::Class::Relationship::HasOne
109         xx::DBIx::Class::Relationship::BelongsTo
110         xx::DBIx::Class::Relationship::ManyToMany
111         xx::DBIx::Class::Relationship::Accessor
112         xx::DBIx::Class::Relationship::CascadeActions
113         xx::DBIx::Class::Relationship::ProxyMethods
114         xx::DBIx::Class::Relationship::Base
115         xx::DBIx::Class::PK::Auto
116         xx::DBIx::Class::PK
117         xx::DBIx::Class::Row
118         xx::DBIx::Class::ResultSourceProxy::Table
119         xx::DBIx::Class::AccessorGroup
120         xx::DBIx::Class::ResultSourceProxy
121         xx::DBIx::Class
122         xx::DBIx::Class::Componentised
123         xx::Class::Data::Accessor
124     /],
125     '... got the right C3 merge order for xx::DBIx::Class::Core');