diff options
author | Brandon Black <blblack@gmail.com> | 2007-04-17 08:14:36 -0500 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2007-04-19 14:48:20 +0000 |
commit | e1a479c5e0c08fb10925261f03573261c69ca0dc (patch) | |
tree | 09088fd1ef489ff5660300a532f799144ff7ae6a /t/mro/dbic_c3.t | |
parent | 0a311364e00e9bf5b4fcb140ade49b02e46833dd (diff) | |
download | perl-e1a479c5e0c08fb10925261f03573261c69ca0dc.tar.gz |
Re: new C3 MRO patch
From: "Brandon Black" <blblack@gmail.com>
Message-ID: <84621a60704171114k29b0460el5b08ce5185d55ed5@mail.gmail.com>
p4raw-id: //depot/perl@30980
Diffstat (limited to 't/mro/dbic_c3.t')
-rw-r--r-- | t/mro/dbic_c3.t | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/t/mro/dbic_c3.t b/t/mro/dbic_c3.t new file mode 100644 index 0000000000..a59f334fb4 --- /dev/null +++ b/t/mro/dbic_c3.t @@ -0,0 +1,125 @@ +#!./perl + +use strict; +use warnings; +BEGIN { + unless (-d 'blib') { + chdir 't' if -d 't'; + @INC = '../lib'; + } +} + +use Test::More tests => 1; + +=pod + +This example is taken from the inheritance graph of DBIx::Class::Core in DBIx::Class v0.07002: +(No ASCII art this time, this graph is insane) + +The xx:: prefixes are just to be sure these bogus declarations never stomp on real ones + +=cut + +{ + package xx::DBIx::Class::Core; use mro 'c3'; + our @ISA = qw/ + xx::DBIx::Class::Serialize::Storable + xx::DBIx::Class::InflateColumn + xx::DBIx::Class::Relationship + xx::DBIx::Class::PK::Auto + xx::DBIx::Class::PK + xx::DBIx::Class::Row + xx::DBIx::Class::ResultSourceProxy::Table + xx::DBIx::Class::AccessorGroup + /; + + package xx::DBIx::Class::InflateColumn; use mro 'c3'; + our @ISA = qw/ xx::DBIx::Class::Row /; + + package xx::DBIx::Class::Row; use mro 'c3'; + our @ISA = qw/ xx::DBIx::Class /; + + package xx::DBIx::Class; use mro 'c3'; + our @ISA = qw/ + xx::DBIx::Class::Componentised + xx::Class::Data::Accessor + /; + + package xx::DBIx::Class::Relationship; use mro 'c3'; + our @ISA = qw/ + xx::DBIx::Class::Relationship::Helpers + xx::DBIx::Class::Relationship::Accessor + xx::DBIx::Class::Relationship::CascadeActions + xx::DBIx::Class::Relationship::ProxyMethods + xx::DBIx::Class::Relationship::Base + xx::DBIx::Class + /; + + package xx::DBIx::Class::Relationship::Helpers; use mro 'c3'; + our @ISA = qw/ + xx::DBIx::Class::Relationship::HasMany + xx::DBIx::Class::Relationship::HasOne + xx::DBIx::Class::Relationship::BelongsTo + xx::DBIx::Class::Relationship::ManyToMany + /; + + package xx::DBIx::Class::Relationship::ProxyMethods; use mro 'c3'; + our @ISA = qw/ xx::DBIx::Class /; + + package xx::DBIx::Class::Relationship::Base; use mro 'c3'; + our @ISA = qw/ xx::DBIx::Class /; + + package xx::DBIx::Class::PK::Auto; use mro 'c3'; + our @ISA = qw/ xx::DBIx::Class /; + + package xx::DBIx::Class::PK; use mro 'c3'; + our @ISA = qw/ xx::DBIx::Class::Row /; + + package xx::DBIx::Class::ResultSourceProxy::Table; use mro 'c3'; + our @ISA = qw/ + xx::DBIx::Class::AccessorGroup + xx::DBIx::Class::ResultSourceProxy + /; + + package xx::DBIx::Class::ResultSourceProxy; use mro 'c3'; + our @ISA = qw/ xx::DBIx::Class /; + + package xx::Class::Data::Accessor; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::Relationship::HasMany; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::Relationship::HasOne; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::Relationship::BelongsTo; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::Relationship::ManyToMany; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::Componentised; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::AccessorGroup; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::Serialize::Storable; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::Relationship::Accessor; our @ISA = (); use mro 'c3'; + package xx::DBIx::Class::Relationship::CascadeActions; our @ISA = (); use mro 'c3'; +} + +is_deeply( + mro::get_linear_isa('xx::DBIx::Class::Core'), + [qw/ + xx::DBIx::Class::Core + xx::DBIx::Class::Serialize::Storable + xx::DBIx::Class::InflateColumn + xx::DBIx::Class::Relationship + xx::DBIx::Class::Relationship::Helpers + xx::DBIx::Class::Relationship::HasMany + xx::DBIx::Class::Relationship::HasOne + xx::DBIx::Class::Relationship::BelongsTo + xx::DBIx::Class::Relationship::ManyToMany + xx::DBIx::Class::Relationship::Accessor + xx::DBIx::Class::Relationship::CascadeActions + xx::DBIx::Class::Relationship::ProxyMethods + xx::DBIx::Class::Relationship::Base + xx::DBIx::Class::PK::Auto + xx::DBIx::Class::PK + xx::DBIx::Class::Row + xx::DBIx::Class::ResultSourceProxy::Table + xx::DBIx::Class::AccessorGroup + xx::DBIx::Class::ResultSourceProxy + xx::DBIx::Class + xx::DBIx::Class::Componentised + xx::Class::Data::Accessor + /], + '... got the right C3 merge order for xx::DBIx::Class::Core'); |