Add an explicit deduplication of identical condition in cond normalizer
[dbsrgits/DBIx-Class.git] / t / 52leaks.t
index c6b64c2..bd159a7 100644 (file)
@@ -1,3 +1,5 @@
+BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
+
 # work around brain damage in PPerl (yes, it has to be a global)
 $SIG{__WARN__} = sub {
   warn @_ unless $_[0] =~ /\QUse of "goto" to jump into a construct is deprecated/
@@ -21,16 +23,17 @@ use strict;
 use warnings;
 use Test::More;
 
-use lib qw(t/lib);
-use DBICTest::RunMode;
-use DBICTest::Util::LeakTracer qw(populate_weakregistry assert_empty_weakregistry visit_refs);
-use Scalar::Util qw(weaken blessed reftype);
-use DBIx::Class::_Util qw(hrefaddr sigwarn_silencer modver_gt_or_eq modver_gt_or_eq_and_lt);
 BEGIN {
+  require DBICTest::Util;
   plan skip_all => "Your perl version $] appears to leak like a sieve - skipping test"
-    if DBIx::Class::_ENV_::PEEPEENESS;
+    if DBICTest::Util::PEEPEENESS();
 }
 
+use DBICTest::RunMode;
+use DBICTest::Util::LeakTracer qw(populate_weakregistry assert_empty_weakregistry visit_refs);
+use Scalar::Util qw(weaken blessed reftype);
+use DBIx::Class::_Util qw(hrefaddr sigwarn_silencer modver_gt_or_eq modver_gt_or_eq_and_lt);
+use DBIx::Class::Optional::Dependencies;
 
 my $TB = Test::More->builder;
 if ($ENV{DBICTEST_IN_PERSISTENT_ENV}) {
@@ -56,6 +59,7 @@ my $has_dt;
 
 # Skip the heavy-duty leak tracing when just doing an install
 # or when having Moose crap all over everything
+# FIXME - remove when Replicated gets off Moose
 if ( !$ENV{DBICTEST_VIA_REPLICATED} and !DBICTest::RunMode->is_plain ) {
 
   # redefine the bless override so that we can catch each and every object created
@@ -101,11 +105,10 @@ if ( !$ENV{DBICTEST_VIA_REPLICATED} and !DBICTest::RunMode->is_plain ) {
   # this loads the DT armada
   $has_dt = DBIx::Class::Optional::Dependencies->req_ok_for([qw( test_rdbms_sqlite ic_dt )]);
 
-  require Errno;
   require DBI;
   require DBD::SQLite;
-  require FileHandle;
   require Moo;
+  require Math::BigInt;
 
   %$weak_registry = ();
 }
@@ -441,6 +444,10 @@ for my $addr (keys %$weak_registry) {
     # T::B 2.0 has result objects and other fancyness
     delete $weak_registry->{$addr};
   }
+  # remove this when IO::Dir is gone from SQLT
+  elsif ($INC{"IO/Dir.pm"} and $names =~ /^Class::Struct::Tie_ISA/m) {
+    delete $weak_registry->{$addr};
+  }
   elsif ($names =~ /^Hash::Merge/m) {
     # only clear one object of a specific behavior - more would indicate trouble
     delete $weak_registry->{$addr}
@@ -454,6 +461,15 @@ for my $addr (keys %$weak_registry) {
     delete $weak_registry->{$addr}
       unless $cleared->{bheos_pptiehinthashfieldhash}++;
   }
+  elsif (
+    $names =~ /^Data::Dumper/m
+      and
+    $weak_registry->{$addr}{stacktrace} =~ /\bDBIx::Class::SQLMaker::Util::lax_serialize\b/
+  ) {
+    # only clear one object of a specific behavior - more would indicate trouble
+    delete $weak_registry->{$addr}
+      unless $cleared->{dd_lax_serializer}++;
+  }
   elsif ($names =~ /^DateTime::TimeZone::UTC/m) {
     # DT is going through a refactor it seems - let it leak zones for now
     delete $weak_registry->{$addr};
@@ -531,6 +547,9 @@ SKIP: {
     if modver_gt_or_eq_and_lt( 'Test::More', '1.200', '1.301001_099' );
 
   local $ENV{DBICTEST_IN_PERSISTENT_ENV} = 1;
+  local $ENV{DBICTEST_ANFANG_DEFANG} = 1;
+
+  require File::Spec;
 
   $persistence_tests = {
     PPerl => {