5 my ($inc_before, $inc_after);
6 # DBIx::Class::Optional::Dependencies queries $ENV at compile time
7 # to build the optional requirements
9 $ENV{DBICTEST_PG_DSN} = '1';
10 delete $ENV{DBICTEST_ORA_DSN};
12 require Carp; # Carp is not used in the test, but in OptDeps, load for proper %INC comparison
14 $inc_before = [ keys %INC ];
15 require DBIx::Class::Optional::Dependencies;
16 $inc_after = [ keys %INC ];
21 use Scalar::Util; # load before we break require()
23 ok ( (! grep { $_ =~ m|DBIx/Class| } @$inc_before ), 'Nothing DBIC related was loaded before inc-test')
24 unless $ENV{PERL5OPT}; # a defined PERL5OPT may inject extra deps crashing this test
28 [ sort (@$inc_before, 'DBIx/Class/Optional/Dependencies.pm') ],
29 'Nothing loaded other than DBIx::Class::OptDeps',
33 # check the project-local groups for sanity
35 DBIx::Class::Optional::Dependencies->req_group_list
36 } "The entire optdep list is well formed";
39 [ keys %{ DBIx::Class::Optional::Dependencies->req_list_for ('deploy') } ],
40 [ 'SQL::Translator' ],
41 'Correct deploy() dependency list',
44 # scope to break require()
47 # make module loading impossible, regardless of actual libpath contents
48 local @INC = (sub { die('Optional Dep Test') } );
50 # basic test using the deploy target
51 for ('deploy', ['deploy']) {
53 # explicitly blow up cache
54 %DBIx::Class::Optional::Dependencies::req_unavailability_cache = ();
57 ! DBIx::Class::Optional::Dependencies->req_ok_for ($_),
58 'deploy() deps missing',
62 DBIx::Class::Optional::Dependencies->req_missing_for ($_),
65 " SQL::Translator \~ \>\= [\d\.]+ "
68 \Q(see DBIx::Class::Optional::Dependencies documentation for details)\E
71 'expected missing string contents',
75 DBIx::Class::Optional::Dependencies->req_errorlist_for ($_)->{'SQL::Translator'},
76 qr/Optional Dep Test/,
77 'custom exception found in errorlist',
80 #make it so module appears loaded
81 local $INC{'SQL/Translator.pm'} = 1;
82 local $SQL::Translator::VERSION = 999;
85 ! DBIx::Class::Optional::Dependencies->req_ok_for ($_),
86 'deploy() deps missing cached properly from previous run',
90 %DBIx::Class::Optional::Dependencies::req_unavailability_cache = ();
93 DBIx::Class::Optional::Dependencies->req_ok_for ($_),
94 'deploy() deps present',
98 DBIx::Class::Optional::Dependencies->req_missing_for ($_),
100 'expected null missing string',
104 DBIx::Class::Optional::Dependencies->req_errorlist_for ($_),
106 'expected empty errorlist',
110 # test lack of deps for oracle test (envvar deleted higher up)
112 DBIx::Class::Optional::Dependencies->req_list_for('test_rdbms_oracle'),
114 'empty optional dependencies list for testing Oracle without ENV var',
117 # test combination of different requirements on same module (pg's are relatively stable)
119 DBIx::Class::Optional::Dependencies->req_list_for('rdbms_pg'),
120 { 'DBD::Pg' => '0', },
121 'optional dependencies list for using Postgres matches',
125 DBIx::Class::Optional::Dependencies->req_list_for([qw( rdbms_pg test_rdbms_pg )]),
126 { 'DBD::Pg' => '2.009002' },
127 'optional dependencies list for testing Postgres matches',
131 DBIx::Class::Optional::Dependencies->req_missing_for([qw( rdbms_pg test_rdbms_pg )]),
132 '"DBD::Pg~>=2.009002"',
133 'optional dependencies error text for testing Postgres matches',
138 # test multiple times to find autovivification bugs
141 DBIx::Class::Optional::Dependencies->req_list_for();
142 } qr/\Qreq_list_for() expects a requirement group name/,
143 "req_list_for without groupname throws exception on run $_";
146 DBIx::Class::Optional::Dependencies->req_list_for('');
147 } qr/\Qreq_list_for() expects a requirement group name/,
148 "req_list_for with empty groupname throws exception on run $_";
151 DBIx::Class::Optional::Dependencies->req_list_for('invalid_groupname');
152 } qr/Requirement group 'invalid_groupname' is not defined/,
153 "req_list_for with invalid groupname throws exception on run $_";