Improve the leak tracer - hook bless() as early as possible
[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 {
37   local @INC = (sub { die('Optional Dep Test') } );
38
39   ok (
40     ! DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'),
41     'deploy() deps missing',
42   );
43
44   like (
45     DBIx::Class::Optional::Dependencies->req_missing_for ('deploy'),
46     qr/^SQL::Translator \>\= \d/,
47     'expected missing string contents',
48   );
49
50   like (
51     DBIx::Class::Optional::Dependencies->req_errorlist_for ('deploy')->{'SQL::Translator'},
52     qr/Optional Dep Test/,
53     'custom exception found in errorlist',
54   );
55 }
56
57 #make it so module appears loaded
58 $INC{'SQL/Translator.pm'} = 1;
59 $SQL::Translator::VERSION = 999;
60
61 ok (
62   ! DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'),
63   'deploy() deps missing cached properly',
64 );
65
66 #reset cache
67 %DBIx::Class::Optional::Dependencies::req_availability_cache = ();
68
69
70 ok (
71   DBIx::Class::Optional::Dependencies->req_ok_for ('deploy'),
72   'deploy() deps present',
73 );
74
75 is (
76   DBIx::Class::Optional::Dependencies->req_missing_for ('deploy'),
77   '',
78   'expected null missing string',
79 );
80
81 is_deeply (
82   DBIx::Class::Optional::Dependencies->req_errorlist_for ('deploy'),
83   {},
84   'expected empty errorlist',
85 );
86
87 done_testing;