19e694594a80d0370c54e8aa7707273230901260
[dbsrgits/DBIx-Class.git] / t / 53lean_startup.t
1 # Use a require override instead of @INC munging (less common)
2 # Do the override as early as possible so that CORE::require doesn't get compiled away
3 # We will replace $req_override in a bit
4
5 my $test_hook;
6 BEGIN {
7   $test_hook = sub {}; # noop at first
8   *CORE::GLOBAL::require = sub {
9     $test_hook->(@_);
10     CORE::require($_[0]);
11   };
12 }
13
14 use strict;
15 use warnings;
16 use Test::More;
17
18 BEGIN {
19   my $core_modules = { map { $_ => 1 } qw/
20     strict
21     warnings
22     vars
23
24     base
25     parent
26     mro
27     overload
28
29     B
30     locale
31
32     namespace::clean
33     Try::Tiny
34     Sub::Name
35
36     Scalar::Util
37     List::Util
38     Hash::Merge
39
40     DBI
41     SQL::Abstract
42
43     Carp
44
45     Class::Accessor::Grouped
46     Class::C3::Componentised
47
48     Test::Deep::NoTest
49   /, $] < 5.010 ? 'MRO::Compat' : () };
50
51   $test_hook = sub {
52
53     my $req = $_[0];
54     $req =~ s/\.pm$//;
55     $req =~ s/\//::/g;
56
57     return if $req =~ /^DBIx::Class|^DBICTest::Schema/;
58
59     my $up = 1;
60     my @caller;
61     do { @caller = caller($up++) } while (
62       @caller and (
63         $caller[0] =~ /^ (?: base | parent | Class::C3::Componentised | Module::Inspector) $/x
64           or
65         $caller[1] =~ / \( eval \s \d+ \) /x
66       )
67     );
68
69     if ( $caller[0] =~ /^DBIx::Class/) {
70       fail ("Unexpected require of '$req' by $caller[0] ($caller[1] line $caller[2])")
71         unless $core_modules->{$req};
72     }
73   };
74 }
75
76 use lib 't/lib';
77 use DBICTest;
78
79 # these envvars bring in more stuff
80 delete $ENV{$_} for qw/
81   DBICTEST_SQLT_DEPLOY
82   DBIC_TRACE
83 /;
84
85 my $schema = DBICTest->init_schema;
86 is ($schema->resultset('Artist')->next->name, 'Caterwauler McCrae');
87
88 done_testing;