Relax overly aggressive exception-well-formedness checks from 84e4e006
[dbsrgits/DBIx-Class.git] / t / storage / txn_scope_guard.t
index b2bdbe5..2df2ab6 100644 (file)
@@ -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" );
@@ -188,4 +188,59 @@ for my $post_poison (0,1) {
   $schema->storage->_dbh->disconnect;
 }}
 
+# add a TODO to catch when Text::Balanced is finally fixed
+# https://rt.cpan.org/Public/Bug/Display.html?id=74994
+#
+# while it doesn't matter much for DBIC itself, this particular bug
+# is a *BANE*, and DBIC is to bump its dep as soon as possible
+{
+
+  require Text::Balanced;
+
+  my @w;
+  local $SIG{__WARN__} = sub {
+    $_[0] =~ /External exception class .+? \Qimplements partial (broken) overloading/
+      ? push @w, @_
+      : warn @_
+  };
+
+  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;
+    $g->commit;
+  } 'Broken Text::Balanced is not screwing up txn_guard';
+
+  local $TODO = 'RT#74994 *STILL* not fixed';
+  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;