Fail early properly even in the presence of -jN
[dbsrgits/DBIx-Class.git] / t / lib / DBICTest / RunMode.pm
index d96fdcd..5b60130 100644 (file)
@@ -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 ===========================
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -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 {