Test to make sure optional deps does not use any external modules
[dbsrgits/DBIx-Class.git] / xt / optional_deps.t
CommitLineData
05c0614b 1use strict;
2use warnings;
3no warnings qw/once/;
4
5use Test::More;
6use lib qw(t/lib);
7use Scalar::Util; # load before we break require()
3c3e76bd 8use Carp (); # Carp is not used in the test, but we want to have it loaded for proper %INC comparison
9
10# a dummy test which lazy-loads more modules (so we can compare INC below)
11ok (1);
12
13# record contents of %INC - makes sure there are no extra deps slipping into
14# Opt::Dep.
15my $inc_before = [ keys %INC ];
16ok ( (! grep { $_ =~ m|DBIx/Class| } @$inc_before ), 'Nothing DBIC related is yet loaded');
05c0614b 17
18use_ok 'DBIx::Class::Optional::Dependencies';
19
3c3e76bd 20my $inc_after = [ keys %INC ];
21
22is_deeply (
23 [ sort @$inc_after],
24 [ sort (@$inc_before, 'DBIx/Class/Optional/Dependencies.pm') ],
25 'Nothing loaded other than DBIx::Class::OptDeps',
26);
27
05c0614b 28my $sqlt_dep = DBIx::Class::Optional::Dependencies->req_list_for ('deploy');
29is_deeply (
30 [ keys %$sqlt_dep ],
31 [ 'SQL::Translator' ],
32 'Correct deploy() dependency list',
33);
34
35# make module loading impossible, regardless of actual libpath contents
36@INC = (sub { die('Optional Dep Test') } );
37
38ok (
39 ! DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'),
40 'deploy() deps missing',
41);
42
43like (
44 DBIx::Class::Optional::Dependencies->req_missing_for ('deploy'),
45 qr/^SQL::Translator \>\= \d/,
46 'expected missing string contents',
47);
48
49like (
50 DBIx::Class::Optional::Dependencies->req_errorlist_for ('deploy')->{'SQL::Translator'},
51 qr/Optional Dep Test/,
52 'custom exception found in errorlist',
53);
54
55
56#make it so module appears loaded
57$INC{'SQL/Translator.pm'} = 1;
58$SQL::Translator::VERSION = 999;
59
60ok (
61 ! DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'),
62 'deploy() deps missing cached properly',
63);
64
65#reset cache
66%DBIx::Class::Optional::Dependencies::req_availability_cache = ();
67
68
69ok (
70 DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'),
71 'deploy() deps present',
72);
73
74is (
75 DBIx::Class::Optional::Dependencies->req_missing_for ('deploy'),
76 '',
77 'expected null missing string',
78);
79
80is_deeply (
81 DBIx::Class::Optional::Dependencies->req_errorlist_for ('deploy'),
82 {},
83 'expected empty errorlist',
84);
85
86
87done_testing;