X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Flib%2FDBICTest%2FRunMode.pm;h=bdb569a5033177d352dfb7e7416f91fe0b5f14f1;hb=a63c42fc0b2844ff59bc86719fbe2c779067f171;hp=d96fdcde980ec55a2fe28ef433d3d46d579f7e75;hpb=d5e5fb4b47b759b202e552ff1d2f1dd393ac7b39;p=dbsrgits%2FDBIx-Class.git diff --git a/t/lib/DBICTest/RunMode.pm b/t/lib/DBICTest/RunMode.pm index d96fdcd..bdb569a 100644 --- a/t/lib/DBICTest/RunMode.pm +++ b/t/lib/DBICTest/RunMode.pm @@ -1,13 +1,50 @@ -package # hide from PAUSE +package # hide from PAUSE DBICTest::RunMode; use strict; use warnings; +BEGIN { + if ($INC{'DBIx/Class.pm'}) { + my ($fr, @frame) = 1; + while (@frame = caller($fr++)) { + last if $frame[1] !~ m|^t/lib/DBICTest|; + } + + die __PACKAGE__ . " must be loaded before DBIx::Class (or modules using DBIx::Class) at $frame[1] line $frame[2]\n"; + } +} + use Path::Class qw/file dir/; +use File::Spec; _check_author_makefile() unless $ENV{DBICTEST_NO_MAKEFILE_VERIFICATION}; +# PathTools has a bug where on MSWin32 it will often return / as a tmpdir. +# This is *really* stupid and the result of having our lockfiles all over +# the place is also rather obnoxious. So we use our own heuristics instead +# https://rt.cpan.org/Ticket/Display.html?id=76663 +my $tmpdir; +sub tmpdir { + dir ($tmpdir ||= do { + + my $dir = dir(File::Spec->tmpdir); + + my @parts = File::Spec->splitdir($dir); + if (@parts == 2 and $parts[1] eq '') { + # This means we were give the root dir (C:\ or something equally unacceptable) + # Replace with our local project tmpdir. This will make multiple runs + # from different runs conflict with each other, but is much better than + # polluting the root dir with random crap + $dir = _find_co_root()->subdir('t')->subdir('var'); + $dir->mkpath; + } + + $dir->stringify; + }); +} + + # Die if the author did not update his makefile # # This is pretty heavy handed, so the check is pretty solid: @@ -58,7 +95,6 @@ sub _check_author_makefile { if (@fail_reasons) { print STDERR <<'EOE'; - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ======================== FATAL ERROR =========================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -68,7 +104,7 @@ checkout and that you, the user, did not run `perl Makefile.PL` before using this code. You absolutely _must_ perform this step, to ensure you have all required dependencies present. Not doing so often results in a lot of wasted time for other contributors -trying to assit you with spurious "its broken!" problems. +trying to assist you with spurious "its broken!" problems. By default DBICs Makefile.PL turns all optional dependenciess into *HARD REQUIREMENTS*, in order to make sure that the entire test @@ -95,28 +131,13 @@ EOE } print STDERR "\n\n\n"; + require Time::HiRes; + Time::HiRes::sleep(0.005); + print STDOUT "\nBail out!\n"; exit 1; } } -sub peepeeness { - return ! $ENV{DBICTEST_ALL_LEAKS} if defined $ENV{DBICTEST_ALL_LEAKS}; - - # don't smoke perls with known issues: - if (__PACKAGE__->is_smoker) { - if ($] == '5.013006') { - # leaky 5.13.6 (fixed in blead/cefd5c7c) - return 1; - } - elsif ($] == '5.013005') { - # not sure why this one leaks, but disable anyway - ANDK seems to make it weep - return 1; - } - } - - return 0; -} - # Mimic $Module::Install::AUTHOR sub is_author { @@ -131,7 +152,11 @@ sub is_author { } sub is_smoker { - return ( $ENV{AUTOMATED_TESTING} && ! $ENV{PERL5_CPANM_IS_RUNNING} && ! $ENV{RELEASE_TESTING} ) + return + ( ($ENV{TRAVIS}||'') eq 'true' ) + || + ( $ENV{AUTOMATED_TESTING} && ! $ENV{PERL5_CPANM_IS_RUNNING} && ! $ENV{RELEASE_TESTING} ) + ; } sub is_plain {