]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - t/lib/Variable/Magic/TestGlobalDestruction.pm
Revamp PERL_DESTRUCT_LEVEL handling
[perl/modules/Variable-Magic.git] / t / lib / Variable / Magic / TestGlobalDestruction.pm
index d4b67496686c5e6b9a0916a61250984b1c9762ed..c6639a63ba3e2d8e3e6815d0dc604be7c096af54 100644 (file)
@@ -63,23 +63,32 @@ sub is_debugging_perl {
 
 sub import {
  shift;
- my %args  = @_;
- my $level = $args{level} || 1;
+ my %args = @_;
+
+ my $level = $args{level};
+ $level    = 1 unless defined $level;
 
  if ("$]" < 5.013_004 and not $ENV{PERL_VARIABLE_MAGIC_TEST_THREADS}) {
   _diag("perl 5.13.4 required to safely test global destruction");
-  return;
+  return 0;
  }
 
- my $env_level = int($ENV{PERL_DESTRUCT_LEVEL} || 0);
- if ($env_level >= $level) {
+ my $env_level = $ENV{PERL_DESTRUCT_LEVEL};
+ if (defined $env_level) {
+  $env_level = do {
+   no warnings 'numeric';
+   int $env_level;
+  };
+
   my $is_debugging = is_debugging_perl();
-  require Test::More;
   if ($is_debugging) {
-   _diag("Global destruction level $env_level set by PERL_DESTRUCT_LEVEL (debugging perl)");
-   return;
+   my $ignoring = $env_level < $level ? ', ignoring' : '';
+   _diag("Global destruction level $env_level set by PERL_DESTRUCT_LEVEL (debugging perl)$ignoring");
+   unless ($ignoring) {
+    return 1;
+   }
   } else {
-   _diag("PERL_DESTRUCT_LEVEL is set to $env_level, but this perl doesn't seem to have debugging enabled");
+   _diag("PERL_DESTRUCT_LEVEL is set to $env_level, but this perl doesn't seem to have debugging enabled, ignoring");
   }
  }
 
@@ -91,13 +100,14 @@ sub import {
    1;
   }
  };
+
  if ($has_perl_destruct_level) {
   _diag("Global destruction level $level set by Perl::Destruct::Level");
-  return;
+  return 1;
  }
 
  _diag("Not testing global destruction");
- return;
+ return 0;
 }
 
 1;