use Test::More;
use File::Path;
use IPC::Open3;
+use IO::Handle;
use DBIx::Class::Schema::Loader::Utils 'dumper_squashed';
use DBIx::Class::Schema::Loader ();
-my $DUMP_PATH = 't/_dump';
+use dbixcsl_test_dir qw/$tdir/;
+
+my $DUMP_PATH = "$tdir/dump";
sub cleanup {
rmtree($DUMP_PATH, 1, 1);
}
my @warns;
eval {
local $SIG{__WARN__} = sub { push(@warns, @_) };
- $schema_class->connect(_get_dsn(\%tdata));
+ $schema_class->connect(_get_connect_info(\%tdata));
};
my $err = $@;
+
$schema_class->storage->disconnect if !$err && $schema_class->storage;
undef *{$schema_class};
my %tdata = @_;
# use $^X so we execute ./script/dbicdump with the same perl binary that the tests were executed with
- my @cmd = ($^X, qw(./script/dbicdump));
+ my @cmd = ($^X, qw(script/dbicdump));
while (my ($opt, $val) = each(%{ $tdata{options} })) {
$val = dumper_squashed $val if ref $val;
push @cmd, '-o', "$opt=$val";
}
- push @cmd, $tdata{classname}, _get_dsn(\%tdata);
+ my @connect_info = _get_connect_info(\%tdata);
+
+ for my $info (@connect_info) {
+ $info = dumper_squashed $info if ref $info;
+ }
+
+ push @cmd, $tdata{classname}, @connect_info;
# make sure our current @INC gets used by dbicdump
use Config;
local $ENV{PERL5LIB} = join $Config{path_sep}, @INC, ($ENV{PERL5LIB} || '');
- my ($in, $out, $err);
- my $pid = open3($in, $out, $err, @cmd);
+ my $std = { map { $_ => IO::Handle->new } (qw/in out err/) };
+ my $pid = open3(@{$std}{qw/in out err/}, @cmd);
- my @out = <$out>;
waitpid($pid, 0);
- my ($error, @warns);
+ my @stdout = $std->{out}->getlines;
+ ok (!scalar @stdout, 'Silence on STDOUT');
+ my @warnings = $std->{err}->getlines;
if ($? >> 8 != 0) {
- $error = $out[0];
- _check_error($error, $tdata{error});
- }
- else {
- @warns = @out;
+ my $exception = pop @warnings;
+ _check_error($exception, $tdata{error});
}
- return @warns;
+ return @warnings;
}
-sub _get_dsn {
+sub _get_connect_info {
my $opts = shift;
my $test_db_class = $opts->{test_db_class} || 'make_dbictest_db';
${$test_db_class . '::dsn'};
};
- return $dsn;
+ return ($dsn, @{ $opts->{extra_connect_info} || [] });
}
sub _check_error {