Make sure we can load each DBICTest::Schema result individually
Peter Rabbitson [Wed, 7 Aug 2013 07:09:19 +0000 (09:09 +0200)]
This will ensure tests always fail if some sort of circular load order
issue is encountered, and we won't have to wait for a particular random
loading sequence to blow up the tests

t/02_standalone_test_classes.t [new file with mode: 0644]

diff --git a/t/02_standalone_test_classes.t b/t/02_standalone_test_classes.t
new file mode 100644 (file)
index 0000000..55df0df
--- /dev/null
@@ -0,0 +1,36 @@
+use warnings;
+use strict;
+
+use Test::More;
+use File::Find;
+
+use lib 't/lib';
+
+find({
+  wanted => sub {
+
+    return unless ( -f $_ and $_ =~ /\.pm$/ );
+
+    my $pid = fork();
+    if (! defined $pid) {
+      die "fork failed: $!"
+    }
+    elsif (!$pid) {
+      if (my @offenders = grep { $_ =~ /(^|\/)DBI/ } keys %INC) {
+        die "Wtf - DBI* modules present in %INC: @offenders";
+      }
+
+      local $SIG{__WARN__} = sub { warn @_ unless $_[0] =~ /\bdeprecated\b/i };
+      require( ($_ =~ /(.+)/)[0] ); # untaint
+      exit 0;
+    }
+
+    is ( waitpid($pid, 0), $pid, "Fork $pid terminated sucessfully");
+    my $ex = $? >> 8;
+    is ( $ex, 0, "Loading $_ ($pid) exitted with $ex" );
+  },
+
+  no_chdir => 1,
+}, 't/lib/DBICTest/Schema/');
+
+done_testing;