ae404043c0ed5dbf087a943957e319c3f2a5a55f
[dbsrgits/DBIx-Class.git] / xt / extra / c3_mro.t
1 BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
2
3 use warnings;
4 use strict;
5
6 use Test::More;
7
8
9 use DBICTest; # do not remove even though it is not used (pulls in MRO::Compat if needed)
10
11 {
12   package AAA;
13
14   use base "DBIx::Class::Core";
15 }
16
17 {
18   package BBB;
19
20   use base 'AAA';
21
22   #Injecting a direct parent.
23   __PACKAGE__->inject_base( __PACKAGE__, 'AAA' );
24 }
25
26 {
27   package CCC;
28
29   use base 'AAA';
30
31   #Injecting an indirect parent.
32   __PACKAGE__->inject_base( __PACKAGE__, 'DBIx::Class::Core' );
33 }
34
35 eval { mro::get_linear_isa('BBB'); };
36 ok (! $@, "Correctly skipped injecting a direct parent of class BBB");
37
38 eval { mro::get_linear_isa('CCC'); };
39 ok (! $@, "Correctly skipped injecting an indirect parent of class BBB");
40
41 use DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server;
42
43 is_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::IdentityInsert
51     DBIx::Class::Storage::DBI
52     DBIx::Class::Storage::DBIHacks
53     DBIx::Class::Storage
54     DBIx::Class
55     DBIx::Class::Componentised
56     Class::C3::Componentised
57     DBIx::Class::AccessorGroup
58     Class::Accessor::Grouped
59   /],
60   'Correctly ordered ISA of DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server'
61 );
62
63 my $storage = DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server->new;
64 $storage->connect_info(['dbi:SQLite::memory:']); # determine_driver's init() connects for this subclass
65 $storage->_determine_driver;
66 is (
67   $storage->can('sql_limit_dialect'),
68   'DBIx::Class::Storage::DBI::MSSQL'->can('sql_limit_dialect'),
69   'Correct method picked'
70 );
71
72 if ( "$]" >= 5.010 ) {
73   ok (! $INC{'Class/C3.pm'}, 'No Class::C3 loaded on perl 5.10+');
74
75   # Class::C3::Componentised loads MRO::Compat unconditionally to satisfy
76   # the assumption that once Class::C3::X is loaded, so is Class::C3
77   #ok (! $INC{'MRO/Compat.pm'}, 'No MRO::Compat loaded on perl 5.10+');
78 }
79
80 done_testing;