#$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
);
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" );
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;