line break
[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
61       xx::DBIx::Class::Relationship::ManyToMany
62     /;
63
64     package xx::DBIx::Class::Relationship::ProxyMethods;
65     our @ISA = qw/ xx::DBIx::Class /;
66
67     package xx::DBIx::Class::Relationship::Base;
68     our @ISA = qw/ xx::DBIx::Class /;
69
70     package xx::DBIx::Class::PK::Auto;
71     our @ISA = qw/ xx::DBIx::Class /;
72
73     package xx::DBIx::Class::PK;
74     our @ISA = qw/ xx::DBIx::Class::Row /;
75
76     package xx::DBIx::Class::ResultSourceProxy::Table;
77     our @ISA = qw/
78       xx::DBIx::Class::AccessorGroup
79       xx::DBIx::Class::ResultSourceProxy
80     /;
81
82     package xx::DBIx::Class::ResultSourceProxy;
83     our @ISA = qw/ xx::DBIx::Class /;
84
85     package xx::Class::Data::Accessor; our @ISA = ();
86     package xx::DBIx::Class::Relationship::HasMany; our @ISA = ();
87     package xx::DBIx::Class::Relationship::HasOne; our @ISA = ();
88     package xx::DBIx::Class::Relationship::BelongsTo; our @ISA = ();
89     package xx::DBIx::Class::Relationship::ManyToMany; our @ISA = ();
90     package xx::DBIx::Class::Componentised; our @ISA = ();
91     package xx::DBIx::Class::AccessorGroup; our @ISA = ();
92     package xx::DBIx::Class::Serialize::Storable; our @ISA = ();
93     package xx::DBIx::Class::Relationship::Accessor; our @ISA = ();
94     package xx::DBIx::Class::Relationship::CascadeActions; our @ISA = ();
95 }
96
97 sub supers {
98     no strict 'refs';
99     @{$_[0] . '::ISA'};
100 }
101
102 is_deeply(
103     [ Algorithm::C3::merge('xx::DBIx::Class::Core', \&supers) ],
104     [qw/
105         xx::DBIx::Class::Core
106         xx::DBIx::Class::Serialize::Storable
107         xx::DBIx::Class::InflateColumn
108         xx::DBIx::Class::Relationship
109         xx::DBIx::Class::Relationship::Helpers
110         xx::DBIx::Class::Relationship::HasMany
111         xx::DBIx::Class::Relationship::HasOne
112         xx::DBIx::Class::Relationship::BelongsTo
113         xx::DBIx::Class::Relationship::ManyToMany
114         xx::DBIx::Class::Relationship::Accessor
115         xx::DBIx::Class::Relationship::CascadeActions
116         xx::DBIx::Class::Relationship::ProxyMethods
117         xx::DBIx::Class::Relationship::Base
118         xx::DBIx::Class::PK::Auto
119         xx::DBIx::Class::PK
120         xx::DBIx::Class::Row
121         xx::DBIx::Class::ResultSourceProxy::Table
122         xx::DBIx::Class::AccessorGroup
123         xx::DBIx::Class::ResultSourceProxy
124         xx::DBIx::Class
125         xx::DBIx::Class::Componentised
126         xx::Class::Data::Accessor
127     /],
128     '... got the right C3 merge order for DBIx::Class::Core');