Qudo
view release on metacpan or search on metacpan
lib/Qudo/Test.pm view on Meta::CPAN
package Qudo::Test;
use strict;
use warnings;
use lib qw(./lib ./t/lib);
use Carp qw(croak);
use Qudo;
use YAML;
use DBI;
use Test::More;
our @SUPPORT_DRIVER = qw/Skinny/;
sub import {
my $caller = caller(0);
strict->import;
warnings->import;
for my $func (qw/run_tests run_tests_mysql run_tests_sqlite test_master teardown_dbs dsn_for/) {
no strict 'refs'; ## no critic.
*{$caller.'::'.$func} = \&$func;
}
}
sub run_tests {
my ($n, $code) = @_;
plan tests => $n*3*scalar(@SUPPORT_DRIVER);
for my $driver (@SUPPORT_DRIVER) {
run_tests_mysql( $n, $driver, $code);
run_tests_innodb($n, $driver, $code);
run_tests_sqlite($n, $driver, $code);
}
}
sub run_tests_innodb {
my ($n, $driver, $code) = @_;
run_tests_mysql($n, $driver, $code, 1);
}
sub run_tests_mysql {
my ($n, $driver, $code, $innodb) = @_;
SKIP: {
local $ENV{USE_MYSQL} = 1;
my $dbh = eval { mysql_dbh() }; ## no critic
skip "MySQL not accessible as root on localhost", $n if $@;
skip "InnoDB not available on localhost's MySQL", $n if $innodb && ! has_innodb($dbh);
$code->($driver);
}
}
sub run_tests_sqlite {
my ($n, $driver, $code) = @_;
SKIP: {
my $rv = eval "use DBD::SQLite; 1"; ## no critic
$rv = 0 if $ENV{SKIP_SQLITE};
skip "SQLite not installed", $n if !$rv;
$code->($driver);
}
}
my $test_dbs;
sub test_master {
my %opts = @_;
my $dbs = delete $opts{dbs} || ['default'];
my $init = delete $opts{init};
$init = 1 unless defined $init;
$test_dbs = $dbs;
if ($init) {
setup_dbs($dbs);
}
( run in 2.991 seconds using v1.01-cache-2.11-cpan-5511b514fd6 )