Remove MySQL year(2) test
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 10_07mssql_common.t
index 6382fc6..185405c 100644 (file)
@@ -2,7 +2,8 @@ use strict;
 use warnings;
 use Test::More;
 use Test::Exception;
-use DBIx::Class::Schema::Loader::Utils 'warnings_exist_silent';
+use DBIx::Class::Optional::Dependencies;
+use DBIx::Class::Schema::Loader::Utils qw/warnings_exist_silent sigwarn_silencer/;
 use Try::Tiny;
 use File::Path 'rmtree';
 use DBIx::Class::Schema::Loader 'make_schema_at';
@@ -26,17 +27,24 @@ use constant EXTRA_DUMP_DIR => "$tdir/mssql_extra_dump";
 # for extra tests cleanup
 my $schema;
 
-my ($dsns, $common_version);
+my (%dsns, $common_version);
 
 for (qw/MSSQL MSSQL_ODBC MSSQL_ADO/) {
   next unless $ENV{"DBICTEST_${_}_DSN"};
 
-  $dsns->{$_}{dsn} = $ENV{"DBICTEST_${_}_DSN"};
-  $dsns->{$_}{user} = $ENV{"DBICTEST_${_}_USER"};
-  $dsns->{$_}{password} = $ENV{"DBICTEST_${_}_PASS"};
+  (my $dep_group = lc "rdbms_$_") =~ s/mssql$/mssql_sybase/;
+  if (!DBIx::Class::Optional::Dependencies->req_ok_for($dep_group)) {
+      diag 'You need to install ' . DBIx::Class::Optional::Dependencies->req_missing_for($dep_group)
+          . " to test with $_";
+      next;
+  }
+
+  $dsns{$_}{dsn} = $ENV{"DBICTEST_${_}_DSN"};
+  $dsns{$_}{user} = $ENV{"DBICTEST_${_}_USER"};
+  $dsns{$_}{password} = $ENV{"DBICTEST_${_}_PASS"};
 
   require DBI;
-  my $dbh = DBI->connect (@{$dsns->{$_}}{qw/dsn user password/}, { RaiseError => 1, PrintError => 0} );
+  my $dbh = DBI->connect (@{$dsns{$_}}{qw/dsn user password/}, { RaiseError => 1, PrintError => 0} );
   my $srv_ver = eval {
     $dbh->get_info(18)
       ||
@@ -51,7 +59,7 @@ for (qw/MSSQL MSSQL_ODBC MSSQL_ADO/) {
 }
 
 plan skip_all => 'You need to set the DBICTEST_MSSQL_DSN, _USER and _PASS and/or the DBICTEST_MSSQL_ODBC_DSN, _USER and _PASS environment variables'
-  unless $dsns;
+  unless %dsns;
 
 my $mssql_2008_new_data_types = {
   date     => { data_type => 'date' },
@@ -90,7 +98,7 @@ my $tester = dbixcsl_common_tests->new(
     vendor      => 'mssql',
     auto_inc_pk => 'INTEGER IDENTITY NOT NULL PRIMARY KEY',
     default_function_def => 'DATETIME DEFAULT getdate()',
-    connect_info => [values %$dsns],
+    connect_info => [ map { $dsns{$_} } sort keys %dsns ],
     preserve_case_mode_is_exclusive => 1,
     quote_char => [ qw/[ ]/ ],
     basic_date_datatype => ($common_version >= 10) ? 'DATE' : 'SMALLDATETIME',
@@ -527,10 +535,9 @@ EOF
 
             SKIP: {
                 # for ADO
-                my $warn_handler = $SIG{__WARN__} || sub { warn @_ };
-                local $SIG{__WARN__} = sub {
-                    $warn_handler->(@_) unless $_[0] =~ /Changed database context/;
-                };
+                local $SIG{__WARN__} = sigwarn_silencer(
+                    qr/Changed database context/
+                );
 
                 my $dbh = $schema->storage->dbh;
 
@@ -758,10 +765,9 @@ sub cleanup_databases {
     return if $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP};
 
     # for ADO
-    my $warn_handler = $SIG{__WARN__} || sub { warn @_ };
-    local $SIG{__WARN__} = sub {
-        $warn_handler->(@_) unless $_[0] =~ /Changed database context/;
-    };
+    local $SIG{__WARN__} = sigwarn_silencer(
+        qr/Changed database context/
+    );
 
     my $dbh = $schema->storage->dbh;