From: Vincent Pit Date: Tue, 14 Apr 2015 16:53:04 +0000 (-0300) Subject: Update VPIT::TestHelpers to 3edc6d15 X-Git-Tag: v0.57~6 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FVariable-Magic.git;a=commitdiff_plain;h=be3665d8224dfbb9cff5f53796500821d9c8185a Update VPIT::TestHelpers to 3edc6d15 POSIX is now correctly required. --- diff --git a/Makefile.PL b/Makefile.PL index aa39d22..a4a665b 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -83,6 +83,7 @@ my %BUILD_REQUIRES = ( 'Carp' => 0, 'Config' => 0, 'ExtUtils::MakeMaker' => 0, + 'POSIX' => 0, 'Test::More' => 0, 'lib' => 0, %PREREQ_PM, diff --git a/t/09-load-threads.t b/t/09-load-threads.t index 91092b0..0825b27 100644 --- a/t/09-load-threads.t +++ b/t/09-load-threads.t @@ -3,9 +3,6 @@ use strict; use warnings; -use lib 't/lib'; -use VPIT::TestHelpers 'run_perl'; - my ($module, $thread_safe_var); BEGIN { $module = 'Variable::Magic'; @@ -27,29 +24,8 @@ sub load_test { # Keep the rest of the file untouched -BEGIN { - my $is_threadsafe; - - if (defined $thread_safe_var) { - my $stat = run_perl "require POSIX; require $module; exit($thread_safe_var ? POSIX::EXIT_SUCCESS() : POSIX::EXIT_FAILURE())"; - if (defined $stat) { - require POSIX; - my $res = $stat >> 8; - if ($res == POSIX::EXIT_SUCCESS()) { - $is_threadsafe = 1; - } elsif ($res == POSIX::EXIT_FAILURE()) { - $is_threadsafe = !1; - } - } - if (not defined $is_threadsafe) { - skip_all "Could not detect if $module is thread safe or not"; - } - } - - VPIT::TestHelpers->import( - threads => [ $module => $is_threadsafe ], - ) -} +use lib 't/lib'; +use VPIT::TestHelpers threads => [ $module, $thread_safe_var ]; my $could_not_create_thread = 'Could not create thread'; diff --git a/t/40-threads.t b/t/40-threads.t index 7f55f22..6e77c2f 100644 --- a/t/40-threads.t +++ b/t/40-threads.t @@ -1,4 +1,4 @@ -#!perl -T +#!perl use strict; use warnings; @@ -10,7 +10,7 @@ use Variable::Magic qw< use lib 't/lib'; use VPIT::TestHelpers ( - threads => [ 'Variable::Magic' => Variable::Magic::VMG_THREADSAFE ], + threads => [ 'Variable::Magic' => 'Variable::Magic::VMG_THREADSAFE()' ], ); use Test::Leaner 'no_plan'; diff --git a/t/41-clone.t b/t/41-clone.t index 7528bec..1efd250 100644 --- a/t/41-clone.t +++ b/t/41-clone.t @@ -1,4 +1,4 @@ -#!perl -T +#!perl use strict; use warnings; @@ -10,7 +10,7 @@ use Variable::Magic qw< use lib 't/lib'; use VPIT::TestHelpers ( - threads => [ 'Variable::Magic' => Variable::Magic::VMG_THREADSAFE ], + threads => [ 'Variable::Magic' => 'Variable::Magic::VMG_THREADSAFE()' ], ); use Test::Leaner 'no_plan'; diff --git a/t/lib/VPIT/TestHelpers.pm b/t/lib/VPIT/TestHelpers.pm index 0f37b40..e8cfa71 100644 --- a/t/lib/VPIT/TestHelpers.pm +++ b/t/lib/VPIT/TestHelpers.pm @@ -476,6 +476,15 @@ sub capture { 1; }; + if ("$]" < 5.014 and $ok and ($status >> 8) == 255 and defined $content_err + and $content_err =~ /^open3/) { + # Before perl commit 8960aa87 (between 5.12 and 5.14), exceptions in open3 + # could be reported to STDERR instead of being propagated, so work around + # this. + $ok = 0; + $@ = $content_err; + } + if ($ok) { return ($status, $content_out, $content_err); } else { @@ -525,7 +534,7 @@ sub capture_perl_failed_msg { Import : use VPIT::TestHelpers threads => [ - $pkg, $is_threadsafe, $force_var + $pkg, $threadsafe_var, $force_var ]; where : @@ -534,11 +543,11 @@ where : =item - -C<$pkg> is the target package name to be used in error messages (defaults to C<'package'>) ; +C<$pkg> is the target package name that will be exercised by this test ; =item - -C<$is_threadsafe> is a boolean telling whether the target module is thread-safe (not tested if C) ; +C<$threadsafe_var> is the name of an optional variable in C<$pkg> that evaluates to true if and only if the module claims to be thread safe (not checked if either C<$threadsafe_var> or C<$pkg> is C) ; =item - @@ -558,15 +567,15 @@ C 5.13.4 =item - -L 1.67 +L =item - -L 1.14 +L 1.67 =item - -L +L 1.14 =back @@ -587,28 +596,48 @@ C =cut sub init_threads { - my ($pkg, $threadsafe, $force_var) = @_; + my ($pkg, $threadsafe_var, $force_var) = @_; skip_all 'This perl wasn\'t built to support threads' unless $Config::Config{useithreads}; - $pkg = 'package' unless defined $pkg; - skip_all "This $pkg isn't thread safe" if defined $threadsafe and !$threadsafe; + if (defined $pkg and defined $threadsafe_var) { + my $threadsafe; + my $stat = run_perl("require POSIX; require $pkg; exit($threadsafe_var ? POSIX::EXIT_SUCCESS() : POSIX::EXIT_FAILURE())"); + if (defined $stat) { + require POSIX; + my $res = $stat >> 8; + if ($res == POSIX::EXIT_SUCCESS()) { + $threadsafe = 1; + } elsif ($res == POSIX::EXIT_FAILURE()) { + $threadsafe = !1; + } + } + if (not defined $threadsafe) { + skip_all "Could not detect if $pkg is thread safe or not"; + } elsif (not $threadsafe) { + skip_all "This $pkg is not thread safe"; + } + } $force_var = 'PERL_FORCE_TEST_THREADS' unless defined $force_var; my $force = $ENV{$force_var} ? 1 : !1; skip_all 'perl 5.13.4 required to test thread safety' unless $force or "$]" >= 5.013_004; - if (($INC{'Test/More.pm'} || $INC{'Test/Leaner.pm'}) && !$INC{'threads.pm'}) { - die 'Test::More/Test::Leaner was loaded too soon'; + unless ($INC{'threads.pm'}) { + my $test_module; + if ($INC{'Test/Leaner.pm'}) { + $test_module = 'Test::Leaner'; + } elsif ($INC{'Test/More.pm'}) { + $test_module = 'Test::More'; + } + die "$test_module was loaded too soon" if defined $test_module; } load_or_skip_all 'threads', $force ? '0' : '1.67', [ ]; load_or_skip_all 'threads::shared', $force ? '0' : '1.14', [ ]; - require Test::Leaner; - diag "Threads testing forced by \$ENV{$force_var}" if $force; return spawn => \&spawn;