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