]> git.vpit.fr Git - perl/modules/indirect.git/blobdiff - t/40-threads.t
Bump copyright year
[perl/modules/indirect.git] / t / 40-threads.t
index 14fb8b25e878b13cfbc87856cac240e524882dd4..63869b816e5c644cfd4117e152a306b72755df1c 100644 (file)
@@ -3,14 +3,20 @@
 use strict;
 use warnings;
 
+sub skipall {
+ my ($msg) = @_;
+ require Test::More;
+ Test::More::plan(skip_all => $msg);
+}
+
 use Config qw/%Config/;
 
 BEGIN {
- if (!$Config{useithreads}) {
-  require Test::More;
-  Test::More->import;
-  plan(skip_all => 'This perl wasn\'t built to support threads');
- }
+ my $force = $ENV{PERL_INDIRECT_TEST_THREADS} ? 1 : !1;
+ skipall 'This perl wasn\'t built to support threads'
+                                                    unless $Config{useithreads};
+ skipall 'perl 5.13.4 required to test thread safety'
+                                                unless $force or $] >= 5.013004;
 }
 
 use threads;
@@ -18,18 +24,16 @@ use threads;
 use Test::More;
 
 BEGIN {
+ delete $ENV{PERL_INDIRECT_PM_DISABLE};
  require indirect;
- if (indirect::I_THREADSAFE()) {
-  plan tests => 10 * 2 * (2 + 3);
-  defined and diag "Using threads $_" for $threads::VERSION;
- } else {
-  plan skip_all => 'This indirect isn\'t thread safe';
- }
+ skipall 'This indirect isn\'t thread safe' unless indirect::I_THREADSAFE();
+ plan tests => 10 * 2 * (2 + 3);
+ defined and diag "Using threads $_" for $threads::VERSION;
 }
 
 sub expect {
  my ($pkg) = @_;
return qr/^Indirect\s+call\s+of\s+method\s+"new"\s+on\s+object\s+"$pkg"/;
qr/^Indirect call of method "new" on object "$pkg" at \(eval \d+\) line \d+/;
 }
 
 {
@@ -43,7 +47,7 @@ sub expect {
     my $class = "Coconut$tid";
     my @warns;
     {
-     local $SIG{__WARN__} = sub { push @warns, "@_" };
+     local $SIG{__WARN__} = sub { push @warns, @_ };
      eval 'die "the code compiled but it shouldn\'t have\n";
            no indirect ":fatal"; my $x = new ' . $class . ' 1, 2;';
     }
@@ -60,10 +64,11 @@ SKIP:
     my $class = "Pineapple$tid";
     my @warns;
     {
-     local $SIG{__WARN__} = sub { push @warns, "@_" };
-     eval 'die "ok\n"; my $y = new ' . $class . ' 1, 2;';
+     local $SIG{__WARN__} = sub { push @warns, @_ };
+     eval 'return; my $y = new ' . $class . ' 1, 2;';
     }
-    is             $@, "ok\n",
+    is $@, '',
+             "\"no indirect\" propagated into eval in thread $tid didn't croak";
     my $first = shift @warns;
     like $first || '', expect($class),
               "\"no indirect\" propagated into eval in thread $tid warned once";