X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Flib%2FDBICTest%2FBaseSchema.pm;h=12cb5b86c7111c6b99e2c2d8579444a204f8c276;hb=b8fd17d994cb050835e2fe80d8f309fea7d167f1;hp=cdc7a02e71d126bfe860bffc0fc87b4142e5442b;hpb=4faaf174b94290230f2ebb2cc5077bc11752f69c;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/t/lib/DBICTest/BaseSchema.pm b/t/lib/DBICTest/BaseSchema.pm index cdc7a02..12cb5b8 100644 --- a/t/lib/DBICTest/BaseSchema.pm +++ b/t/lib/DBICTest/BaseSchema.pm @@ -7,6 +7,7 @@ use base qw(DBICTest::Base DBIx::Class::Schema); use Fcntl qw(:DEFAULT :seek :flock); use Time::HiRes 'sleep'; +use Scope::Guard (); use DBICTest::Util::LeakTracer qw(populate_weakregistry assert_empty_weakregistry); use DBICTest::Util 'local_umask'; use namespace::clean; @@ -23,10 +24,20 @@ sub capture_executed_sql_bind { local *DBIx::Class::Storage::DBI::_format_for_trace = sub { $_[1] }; Class::C3->reinitialize if DBIx::Class::_ENV_::OLD_MRO; + # can not use local() due to an unknown number of storages + # (think replicated) + my $orig_states = { map + { $_ => $self->storage->$_ } + qw(debugcb debugobj debug) + }; - local $self->storage->{debugcb}; - local $self->storage->{debugobj} = my $tracer_obj = DBICTest::SQLTracerObj->new; - local $self->storage->{debug} = 1; + my $sg = Scope::Guard->new(sub { + $self->storage->$_ ( $orig_states->{$_} ) for keys %$orig_states; + }); + + $self->storage->debugcb(undef); + $self->storage->debugobj( my $tracer_obj = DBICTest::SQLTracerObj->new ); + $self->storage->debug(1); local $Test::Builder::Level = $Test::Builder::Level + 2; $cref->(); @@ -257,7 +268,10 @@ sub clone { } END { - assert_empty_weakregistry($weak_registry, 'quiet'); + # Make sure we run after any cleanup in other END blocks + push @{ B::end_av()->object_2svref }, sub { + assert_empty_weakregistry($weak_registry, 'quiet'); + }; } 1;