package dbixcsl_test_dir;
-use warnings;
use strict;
+use warnings;
+use File::Path 'rmtree';
+use Scalar::Util 'weaken';
+use namespace::clean;
+use DBI ();
our $tdir = 't/var';
mkdir $tdir or die "Unable to create $tdir: $!\n";
}
+# We need to disconnect all active DBI handles before deleting the directory,
+# otherwise the SQLite .db files cannot be deleted on Win32 (file in use) since
+# END does not run in any sort of order.
+
+no warnings 'redefine';
+
+my $connect = \&DBI::connect;
+
+my @handles;
+
+*DBI::connect = sub {
+ my $dbh = $connect->(@_);
+ push @handles, $dbh;
+ weaken $handles[-1];
+ return $dbh;
+};
+
+END {
+ if (not $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}) {
+ foreach my $dbh (@handles) {
+ $dbh->disconnect if $dbh;
+ }
+
+ rmtree($tdir, 1, 1)
+ }
+}
+
1;