(optdeps) One last pass through tests, streamline skip messages
[dbsrgits/DBIx-Class.git] / t / storage / global_destruction.t
index ae4260a..5b7fc85 100644 (file)
@@ -1,65 +1,58 @@
+BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
+
 use strict;
 use warnings;
 
 use Test::More;
-use Test::Exception;
+
+# so we can see the retry exceptions (if any)
+BEGIN { $ENV{DBIC_STORAGE_RETRY_DEBUG} = 1 }
 
 use DBIx::Class::Optional::Dependencies ();
 
-use lib qw(t/lib);
-use DBICTest;
 
-plan skip_all => 'Test segfaults on Win32' if $^O eq 'MSWin32';
+use DBICTest;
 
-for my $type (qw/PG MYSQL/) {
+for my $type (qw/PG MYSQL SQLite/) {
 
   SKIP: {
-    skip "Skipping $type tests without DBICTEST_${type}_DSN", 1
-      unless $ENV{"DBICTEST_${type}_DSN"};
 
-    if ($type eq 'PG') {
-      skip "skipping Pg tests without dependencies installed", 1
-        unless DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_pg');
-    }
-    elsif ($type eq 'MYSQL') {
-      skip "skipping MySQL tests without dependencies installed", 1
-        unless DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_mysql');
-    }
+    DBIx::Class::Optional::Dependencies->skip_without( 'test_rdbms_' . lc $type );
+
+    my @dsn = $type eq 'SQLite'
+      ? ( DBICTest->_database(sqlite_use_file => 1) )
+      : ( @ENV{map { "DBICTEST_${type}_${_}" } qw/DSN USER PASS/} )
+    ;
 
-    my $schema = DBICTest::Schema->connect (@ENV{map { "DBICTEST_${type}_${_}" } qw/DSN USER PASS/});
+    my $schema = DBICTest::Schema->connect (@dsn);
 
     # emulate a singleton-factory, just cache the object *somewhere in a different package*
     # to induce out-of-order destruction
     $DBICTest::FakeSchemaFactory::schema = $schema;
 
-    # so we can see the retry exceptions (if any)
-    $ENV{DBIC_DBIRETRY_DEBUG} = 1;
-
     ok (!$schema->storage->connected, "$type: start disconnected");
 
-    lives_ok (sub {
-      $schema->txn_do (sub {
-
-        ok ($schema->storage->connected, "$type: transaction starts connected");
+    $schema->txn_do (sub {
 
-        my $pid = fork();
-        SKIP: {
-          skip "Fork failed: $!", 1 if (! defined $pid);
+      ok ($schema->storage->connected, "$type: transaction starts connected");
 
-          if ($pid) {
-            note "Parent $$ sleeping...";
-            wait();
-            note "Parent $$ woken up after child $pid exit";
-          }
-          else {
-            note "Child $$ terminating";
-            undef $DBICTest::FakeSchemaFactory::schema;
-            exit 0;
-          }
+      my $pid = fork();
+      SKIP: {
+        skip "Fork failed: $!", 1 if (! defined $pid);
 
-          ok ($schema->storage->connected, "$type: parent still connected (in txn_do)");
+        if ($pid) {
+          note "Parent $$ sleeping...";
+          wait();
+          note "Parent $$ woken up after child $pid exit";
         }
-      });
+        else {
+          note "Child $$ terminating";
+          undef $DBICTest::FakeSchemaFactory::schema;
+          exit 0;
+        }
+
+        ok ($schema->storage->connected, "$type: parent still connected (in txn_do)");
+      }
     });
 
     ok ($schema->storage->connected, "$type: parent still connected (outside of txn_do)");