Fix Pg DBI parser test
Dagfinn Ilmari Mannsåker [Tue, 17 Dec 2013 21:03:00 +0000 (21:03 +0000)]
Allow maybe_plan() to not declare a plan, and use skip_all() and
done_testing() in the test file.

lib/Test/SQL/Translator.pm
t/66-postgres-dbi-parser.t

index 6caef98..1802dcf 100644 (file)
@@ -467,7 +467,9 @@ sub maybe_plan {
             join ", ", @errors;
         plan skip_all => $msg;
     }
-    elsif ($ntests and $ntests ne 'no_plan') {
+    return unless defined $ntests;
+
+    if ($ntests ne 'no_plan') {
         plan tests => $ntests;
     }
     else {
@@ -582,6 +584,9 @@ modules on which test execution depends:
 If one of C<SQL::Translator::Parser::MySQL>'s dependencies does not exist,
 then the test will be skipped.
 
+Instead of a number of tests, you can pass C<undef> if you're using
+C<done_testing()>, or C<'no_plan'> if you don't want a plan at all.
+
 =head1 EXPORTS
 
 table_ok, field_ok, constraint_ok, index_ok, view_ok, trigger_ok, procedure_ok,
index 2fd1648..a86a010 100644 (file)
@@ -7,29 +7,24 @@ use SQL::Translator;
 use SQL::Translator::Schema::Constants;
 use Test::SQL::Translator qw(maybe_plan table_ok);
 
-BEGIN {
-    maybe_plan(61, 'SQL::Translator::Parser::DBI::PostgreSQL');
-    SQL::Translator::Parser::DBI::PostgreSQL->import('parse');
-}
-
-use_ok('SQL::Translator::Parser::DBI::PostgreSQL');
+maybe_plan(undef, 'SQL::Translator::Parser::DBI::PostgreSQL');
 
 my @dsn =
   $ENV{DBICTEST_PG_DSN} ? @ENV{ map { "DBICTEST_PG_$_" } qw/DSN USER PASS/ }
-: $ENV{DBI_DSN} ? @ENV{ map { "DBI_$_" } qw/DSN USER PASS/ };
+: $ENV{DBI_DSN} ? @ENV{ map { "DBI_$_" } qw/DSN USER PASS/ }
+: plan skip_all => 'Set $ENV{DBICTEST_PG_DSN}, _USER and _PASS to run this test';
 
 my $dbh = eval {
   DBI->connect(@dsn, {AutoCommit => 1, RaiseError=>1,PrintError => 1} );
 };
 
-SKIP: {
-    if (my $err = ($@ || $DBI::err )) {
-      chomp $err;
-      skip "No connection to test db. DBI says '$err'", 60;
-    }
+if (my $err = ($@ || $DBI::err )) {
+    chomp $err;
+    plan skip_all => "No connection to test db. DBI says '$err'";
+}
 
-    ok($dbh, "dbh setup correctly");
-    $dbh->do('SET client_min_messages=WARNING');
+ok($dbh, "dbh setup correctly");
+$dbh->do('SET client_min_messages=WARNING');
 
 my $sql = q[
     drop table if exists sqlt_test2;
@@ -178,5 +173,5 @@ is( $t2_c1->type, FOREIGN_KEY, "Constraint is a FK" );
 
 $dbh->rollback;
 $dbh->disconnect;
-} # end of SKIP block
 
+done_testing();