Patch up weird MRO fail on 5.8 perls
[dbsrgits/DBIx-Class.git] / t / 04dont_break_c3.t
CommitLineData
e8b77df6 1use warnings;
e4c24739 2use strict;
e8b77df6 3
4use Test::More;
4f507947 5use MRO::Compat;
e4c24739 6
d8190011 7use lib qw(t/lib);
8use DBICTest; # do not remove even though it is not used
9
e4c24739 10{
e8b77df6 11 package AAA;
e4c24739 12
e8b77df6 13 use base "DBIx::Class::Core";
14}
e4c24739 15
e8b77df6 16{
17 package BBB;
e4c24739 18
e8b77df6 19 use base 'AAA';
e4c24739 20
e8b77df6 21 #Injecting a direct parent.
22 __PACKAGE__->inject_base( __PACKAGE__, 'AAA' );
23}
e4c24739 24
e8b77df6 25{
26 package CCC;
e4c24739 27
e8b77df6 28 use base 'AAA';
e4c24739 29
e8b77df6 30 #Injecting an indirect parent.
31 __PACKAGE__->inject_base( __PACKAGE__, 'DBIx::Class::Core' );
e4c24739 32}
33
4f507947 34eval { mro::get_linear_isa('BBB'); };
e4c24739 35ok (! $@, "Correctly skipped injecting a direct parent of class BBB");
36
4f507947 37eval { mro::get_linear_isa('CCC'); };
e4c24739 38ok (! $@, "Correctly skipped injecting an indirect parent of class BBB");
e8b77df6 39
40use DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server;
41use B;
42
43is_deeply (
44 mro::get_linear_isa('DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server'),
45 [qw/
46 DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server
47 DBIx::Class::Storage::DBI::Sybase
48 DBIx::Class::Storage::DBI::MSSQL
49 DBIx::Class::Storage::DBI::UniqueIdentifier
50 DBIx::Class::Storage::DBI
51 DBIx::Class::Storage::DBIHacks
52 DBIx::Class::Storage
53 DBIx::Class
54 DBIx::Class::Componentised
55 Class::C3::Componentised
56 Class::Accessor::Grouped
57 /],
58 'Correctly ordered ISA of DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server'
59);
60
61my $dialect_ref = DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server->can('sql_limit_dialect');
62is (
63 B::svref_2object($dialect_ref)->GV->STASH->NAME,
64 'DBIx::Class::Storage::DBI::MSSQL',
65 'Correct method picked'
66);
67
68done_testing;