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