X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fstorage%2Ftxn_scope_guard.t;h=2df2ab6156d470f90a692ce01cd5241dd4b6fa8b;hb=35cf7d1af;hp=2f6a00d796ee03bad5990a475efe77269f5557ee;hpb=9bea2000ccd0828327e98c3e17c0be3e7df5c593;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/txn_scope_guard.t b/t/storage/txn_scope_guard.t index 2f6a00d..2df2ab6 100644 --- a/t/storage/txn_scope_guard.t +++ b/t/storage/txn_scope_guard.t @@ -106,7 +106,7 @@ use DBICTest; #$schema->storage->_dbh( $schema->storage->_dbh->clone ); die 'Deliberate exception'; - }, ($] >= 5.013008 ) + }, ( "$]" >= 5.013008 ) ? qr/Deliberate exception/s # temporary until we get the generic exception wrapper rolling : qr/Deliberate exception.+Rollback failed/s ); @@ -173,13 +173,13 @@ for my $post_poison (0,1) { local $TODO = 'Do not know how to deal with trapped exceptions occuring after guard instantiation...' if ( $post_poison and ( # take no chances on installation - ( DBICTest::RunMode->is_plain and ($ENV{TRAVIS}||'') ne 'true' ) + DBICTest::RunMode->is_plain or # this always fails ! $pre_poison or # I do not understand why but on <= 5.8.8 and on 5.10.0 "$pre_poison && $post_poison" passes... - ($] > 5.008008 and $] < 5.010000 ) or $] > 5.010000 + ( "$]" > 5.008008 and "$]" < 5.010000 ) or "$]" > 5.010000 )); is (@w, 2, "Both expected warnings found - \$\@ pre-poison: $pre_poison, post-poison: $post_poison" ); @@ -207,6 +207,7 @@ for my $post_poison (0,1) { lives_ok { # this is what poisons $@ Text::Balanced::extract_bracketed( '(foo', '()' ); + DBIx::Class::_Util::is_exception($@); my $s = DBICTest::Schema->connect('dbi:SQLite::memory:'); my $g = $s->txn_scope_guard; @@ -217,4 +218,29 @@ for my $post_poison (0,1) { is(scalar @w, 0, 'no warnings \o/'); } +# ensure Devel::StackTrace-refcapture-like effects are countered +{ + my $s = DBICTest::Schema->connect('dbi:SQLite::memory:'); + my $g = $s->txn_scope_guard; + + my @arg_capture; + { + local $SIG{__WARN__} = sub { + package DB; + my $frnum; + while (my @f = CORE::caller(++$frnum) ) { + push @arg_capture, @DB::args; + } + }; + + undef $g; + 1; + } + + warnings_exist + { @arg_capture = () } + qr/\QPreventing *MULTIPLE* DESTROY() invocations on DBIx::Class::Storage::TxnScopeGuard/ + ; +} + done_testing;