5e35930a2765b9b9aa9e7243c08744b9651df436
[dbsrgits/DBIx-Class.git] / xt / optional_deps.t
1 use strict;
2 use warnings;
3 no warnings qw/once/;
4
5 use Test::More;
6 use lib qw(t/lib);
7 use Scalar::Util; # load before we break require()
8 use 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)
11 ok (1);
12
13 # record contents of %INC - makes sure there are no extra deps slipping into
14 # Opt::Dep.
15 my $inc_before = [ keys %INC ];
16 ok ( (! grep { $_ =~ m|DBIx/Class| } @$inc_before ), 'Nothing DBIC related is yet loaded');
17
18 use_ok 'DBIx::Class::Optional::Dependencies';
19
20 my $inc_after = [ keys %INC ];
21
22 is_deeply (
23   [ sort @$inc_after],
24   [ sort (@$inc_before, 'DBIx/Class/Optional/Dependencies.pm') ],
25   'Nothing loaded other than DBIx::Class::OptDeps',
26 );
27
28 my $sqlt_dep = DBIx::Class::Optional::Dependencies->req_list_for ('deploy');
29 is_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
38 ok (
39   ! DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'),
40   'deploy() deps missing',
41 );
42
43 like (
44   DBIx::Class::Optional::Dependencies->req_missing_for ('deploy'),
45   qr/^SQL::Translator \>\= \d/,
46   'expected missing string contents',
47 );
48
49 like (
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
60 ok (
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
69 ok (
70   DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'),
71   'deploy() deps present',
72 );
73
74 is (
75   DBIx::Class::Optional::Dependencies->req_missing_for ('deploy'),
76   '',
77   'expected null missing string',
78 );
79
80 is_deeply (
81   DBIx::Class::Optional::Dependencies->req_errorlist_for ('deploy'),
82   {},
83   'expected empty errorlist',
84 );
85
86
87 done_testing;