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=ca67c9874fa21b216cb8a51c5ce935b235469acb;hpb=153a6b389e6886920ff69ce0dab0ea7ee1df2fe0;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/txn_scope_guard.t b/t/storage/txn_scope_guard.t index ca67c98..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 underdtand why but on <= 5.8.8 and $pre_poison && $post_poison passes... - $] > 5.008008 + # 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 )); is (@w, 2, "Both expected warnings found - \$\@ pre-poison: $pre_poison, post-poison: $post_poison" ); @@ -197,51 +197,50 @@ for my $post_poison (0,1) { require Text::Balanced; - my $great_success; - { - local $TODO = 'RT#74994 *STILL* not fixed'; - - lives_ok { - # this is what poisons $@ - Text::Balanced::extract_bracketed( '(foo', '()' ); - - my $s = DBICTest->init_schema( deploy => 0 ); - my $g = $s->txn_scope_guard; - $g->commit; - $great_success++; - } 'Text::Balanced is no longer screwing up $@'; - } + my @w; + local $SIG{__WARN__} = sub { + $_[0] =~ /External exception class .+? \Qimplements partial (broken) overloading/ + ? push @w, @_ + : warn @_ + }; - # delete all of this when T::B dep is bumped - unless ($great_success) { + lives_ok { + # this is what poisons $@ + Text::Balanced::extract_bracketed( '(foo', '()' ); + DBIx::Class::_Util::is_exception($@); -# hacky workaround for desperate folk -# intended to be copypasted into your app - { - require Text::Balanced; - require overload; + my $s = DBICTest::Schema->connect('dbi:SQLite::memory:'); + my $g = $s->txn_scope_guard; + $g->commit; + } 'Broken Text::Balanced is not screwing up txn_guard'; - local $@; + local $TODO = 'RT#74994 *STILL* not fixed'; + is(scalar @w, 0, 'no warnings \o/'); +} - # this is what poisons $@ - Text::Balanced::extract_bracketed( '(foo', '()' ); +# ensure Devel::StackTrace-refcapture-like effects are countered +{ + my $s = DBICTest::Schema->connect('dbi:SQLite::memory:'); + my $g = $s->txn_scope_guard; - if ($@ and overload::Overloaded($@) and ! overload::Method($@,'fallback') ) { - my $class = ref $@; - eval "package $class; overload->import(fallback => 1);" + my @arg_capture; + { + local $SIG{__WARN__} = sub { + package DB; + my $frnum; + while (my @f = CORE::caller(++$frnum) ) { + push @arg_capture, @DB::args; } - } -# end of hacky workaround - - lives_ok { - # this is what poisons $@ - Text::Balanced::extract_bracketed( '(foo', '()' ); + }; - my $s = DBICTest->init_schema( deploy => 0 ); - my $g = $s->txn_scope_guard; - $g->commit; - } 'Monkeypatched Text::Balanced is no longer screwing up $@'; + undef $g; + 1; } + + warnings_exist + { @arg_capture = () } + qr/\QPreventing *MULTIPLE* DESTROY() invocations on DBIx::Class::Storage::TxnScopeGuard/ + ; } done_testing;