Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PATCH] upgrade Test-Simple in perl blead #15319

Closed
p5pRT opened this issue May 10, 2016 · 23 comments
Closed

[PATCH] upgrade Test-Simple in perl blead #15319

p5pRT opened this issue May 10, 2016 · 23 comments
Labels

Comments

@p5pRT
Copy link

p5pRT commented May 10, 2016

Migrated from rt.perl.org#128113 (status was 'resolved')

Searchable as RT128113$

@p5pRT
Copy link
Author

p5pRT commented May 10, 2016

From @exodist

This patch will update perl blead to use the latest Test-Simple
distribution.

-Chad

@p5pRT
Copy link
Author

p5pRT commented May 10, 2016

@p5pRT
Copy link
Author

p5pRT commented May 11, 2016

From @jkeenan

On Tue May 10 08​:08​:00 2016, exodist7@​gmail.com wrote​:

This patch will update perl blead to use the latest Test-Simple
distribution.

-Chad

Question for porters​: > 1 year ago, at an earlier stage of exodist's work on Test-Simple, our practice was to apply his patches directly to blead. The rationale for that was that this distro was so far "upriver" that we wanted to get it smoked as widely as possible -- and blead gets smoked more than any smoke-me branch.

Shall we continue this practice with these latest patches?

Pending an answer to that question, I have created this branch for smoking​:
smoke-me/jkeenan/exodist/128113-test-simple

Thank you very much.

--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented May 11, 2016

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented May 11, 2016

From @khwilliamson

On 05/10/2016 08​:18 PM, James E Keenan via RT wrote​:

On Tue May 10 08​:08​:00 2016, exodist7@​gmail.com wrote​:

This patch will update perl blead to use the latest Test-Simple
distribution.

-Chad

Question for porters​: > 1 year ago, at an earlier stage of exodist's work on Test-Simple, our practice was to apply his patches directly to blead. The rationale for that was that this distro was so far "upriver" that we wanted to get it smoked as widely as possible -- and blead gets smoked more than any smoke-me branch.

Shall we continue this practice with these latest patches?

Pending an answer to that question, I have created this branch for smoking​:
smoke-me/jkeenan/exodist/128113-test-simple

Thank you very much.

It seems prudent, whatever the final outcome, to wait a bit for results
from your branch before doing a wider smoke. Obviously, if there are
problems, we wouldn't want to proceed with a wider net.

@p5pRT
Copy link
Author

p5pRT commented May 11, 2016

From @tonycoz

On Tue, May 10, 2016 at 07​:18​:43PM -0700, James E Keenan via RT wrote​:

On Tue May 10 08​:08​:00 2016, exodist7@​gmail.com wrote​:

This patch will update perl blead to use the latest Test-Simple
distribution.

-Chad

Question for porters​: > 1 year ago, at an earlier stage of exodist's work on Test-Simple, our practice was to apply his patches directly to blead. The rationale for that was that this distro was so far "upriver" that we wanted to get it smoked as widely as possible -- and blead gets smoked more than any smoke-me branch.

Shall we continue this practice with these latest patches?

Pending an answer to that question, I have created this branch for smoking​:
smoke-me/jkeenan/exodist/128113-test-simple

I'm planning on applying once I finish some benchmarking runs
(depending on the results.)

Tony

@p5pRT
Copy link
Author

p5pRT commented May 12, 2016

From @tonycoz

On Tue May 10 19​:24​:32 2016, public@​khwilliamson.com wrote​:

On 05/10/2016 08​:18 PM, James E Keenan via RT wrote​:

On Tue May 10 08​:08​:00 2016, exodist7@​gmail.com wrote​:

This patch will update perl blead to use the latest Test-Simple
distribution.

-Chad

Question for porters​: > 1 year ago, at an earlier stage of exodist's
work on Test-Simple, our practice was to apply his patches directly
to blead. The rationale for that was that this distro was so far
"upriver" that we wanted to get it smoked as widely as possible --
and blead gets smoked more than any smoke-me branch.

Shall we continue this practice with these latest patches?

Pending an answer to that question, I have created this branch for
smoking​:
smoke-me/jkeenan/exodist/128113-test-simple

Thank you very much.

It seems prudent, whatever the final outcome, to wait a bit for
results
from your branch before doing a wider smoke. Obviously, if there are
problems, we wouldn't want to proceed with a wider net.

The results from the smoke branch looked good - the failures were typical intermittent failures for the smokers involved (timing issues on the VMs (cygwin and solaris), the occasional free2 failure on neptune, and the speed.t failure on neptune is reasonable (neptune is a busy box.)

I benchmarked with and without the Test2 patch, and the details can be found at​:

https://docs.google.com/spreadsheets/d/1QV6g8q8FWTL_MiFsBe24bHViKCDU3x4Z5bryrDUVFs4/edit?usp=sharing

Testing perl took ~7% longer on average for non-parallel testing and 3.5% longer for 6-job parallel testing, which isn't too bad.

Testing Imager was a bit more worrying, non-parallel testing took ~16% longer and parallel testing took ~11% longer.

But I can only consider that the cost of the increased flexibility that the new Test system will provide.

In any case we're unfrozen, the extra costs aren't prohibitive, so this has been applied as b451492.

The patch updated win32/makefile.mk and win32/Makefile, but missed updating win32/GNUmakefile, which I've done in ec35cd4.

Tony

@p5pRT
Copy link
Author

p5pRT commented May 12, 2016

@tonycoz - Status changed from 'open' to 'pending release'

@p5pRT
Copy link
Author

p5pRT commented May 12, 2016

From @exodist

The change ultimately results in a much faster runtime, but a slower
startup time. Test2 takes twice as long to load, but runs twice as fast
once loaded. The number of test files vs the length of the test files
usually explains why some suites are faster or slower.

I am not familiar with imager, does it have a large number of test files?
On May 11, 2016 5​:05 PM, "Tony Cook via RT" <perlbug-followup@​perl.org>
wrote​:

On Tue May 10 19​:24​:32 2016, public@​khwilliamson.com wrote​:

On 05/10/2016 08​:18 PM, James E Keenan via RT wrote​:

On Tue May 10 08​:08​:00 2016, exodist7@​gmail.com wrote​:

This patch will update perl blead to use the latest Test-Simple
distribution.

-Chad

Question for porters​: > 1 year ago, at an earlier stage of exodist's
work on Test-Simple, our practice was to apply his patches directly
to blead. The rationale for that was that this distro was so far
"upriver" that we wanted to get it smoked as widely as possible --
and blead gets smoked more than any smoke-me branch.

Shall we continue this practice with these latest patches?

Pending an answer to that question, I have created this branch for
smoking​:
smoke-me/jkeenan/exodist/128113-test-simple

Thank you very much.

It seems prudent, whatever the final outcome, to wait a bit for
results
from your branch before doing a wider smoke. Obviously, if there are
problems, we wouldn't want to proceed with a wider net.

The results from the smoke branch looked good - the failures were typical
intermittent failures for the smokers involved (timing issues on the VMs
(cygwin and solaris), the occasional free2 failure on neptune, and the
speed.t failure on neptune is reasonable (neptune is a busy box.)

I benchmarked with and without the Test2 patch, and the details can be
found at​:

https://docs.google.com/spreadsheets/d/1QV6g8q8FWTL_MiFsBe24bHViKCDU3x4Z5bryrDUVFs4/edit?usp=sharing

Testing perl took ~7% longer on average for non-parallel testing and 3.5%
longer for 6-job parallel testing, which isn't too bad.

Testing Imager was a bit more worrying, non-parallel testing took ~16%
longer and parallel testing took ~11% longer.

But I can only consider that the cost of the increased flexibility that
the new Test system will provide.

In any case we're unfrozen, the extra costs aren't prohibitive, so this
has been applied as b451492.

The patch updated win32/makefile.mk and win32/Makefile, but missed
updating win32/GNUmakefile, which I've done in
ec35cd4.

Tony

---
via perlbug​: queue​: perl5 status​: open
https://rt-archive.perl.org/perl5/Ticket/Display.html?id=128113

@p5pRT
Copy link
Author

p5pRT commented May 12, 2016

From @tonycoz

On Wed, May 11, 2016 at 06​:38​:59PM -0700, Chad Granum wrote​:

The change ultimately results in a much faster runtime, but a slower
startup time. Test2 takes twice as long to load, but runs twice as fast
once loaded. The number of test files vs the length of the test files
usually explains why some suites are faster or slower.

I am not familiar with imager, does it have a large number of test files?

Imager has 66 test files, I'm not sure that counts as a large number.

Tony

@p5pRT
Copy link
Author

p5pRT commented May 12, 2016

From @exodist

if I am reading your timing document properly it looks like it has 66 files
that take ~20 seconds in total to run them all. I would consider that a
large number of super tiny tests, at which point the slower load time
really makes a difference. On the other hand if it took 20 seconds to run
them all, but there were only 4 files (5 seconds each to run) the startup
time would make little difference, and the faster run time would
potentially help out.

-Chad

On Wed, May 11, 2016 at 7​:16 PM, Tony Cook via RT <perlbug-followup@​perl.org

wrote​:

On Wed, May 11, 2016 at 06​:38​:59PM -0700, Chad Granum wrote​:

The change ultimately results in a much faster runtime, but a slower
startup time. Test2 takes twice as long to load, but runs twice as fast
once loaded. The number of test files vs the length of the test files
usually explains why some suites are faster or slower.

I am not familiar with imager, does it have a large number of test files?

Imager has 66 test files, I'm not sure that counts as a large number.

Tony

@p5pRT
Copy link
Author

p5pRT commented May 12, 2016

From @csjewell

You have a copy-pasta error in ec35cd4​:

-if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test

You probably want to be rmdir-ing Test2, not Test.

--Curtis

--
Curtis Jewell

@p5pRT
Copy link
Author

p5pRT commented May 12, 2016

From @exodist

That part of the change was generated via ./perl -Ilib regen/lib_cleanup.pl,
I did not touch it directly.

On Thu, May 12, 2016 at 7​:43 AM, Curtis Jewell <perl@​csjewell.fastmail.us>
wrote​:

You have a copy-pasta error in ec35cd4​:

-if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test

You probably want to be rmdir-ing Test2, not Test.

--Curtis

--
Curtis Jewell

@p5pRT
Copy link
Author

p5pRT commented May 14, 2016

From @iabyn

On Wed, May 11, 2016 at 05​:04​:58PM -0700, Tony Cook via RT wrote​:

In any case we're unfrozen, the extra costs aren't prohibitive, so this
has been applied as b451492.

Note that Test-Simple's tests now produce some noise on stderr​:

  # Testing Diag
and
  # should be a diag

Which is mildly irking, as I've spent a lot of effort over the last couple
of years on reducing the amount of noise on stderr during a perl build and
test (5.24.0 is down to 42 lines, compared several hundred a while back).
My goal is to get it down to zero eventually.

--
It's not that I'm afraid to die, I just don't want to be there when it
happens.
  -- Woody Allen

@p5pRT
Copy link
Author

p5pRT commented May 17, 2016

From dennis@kaarsemaker.net

On wo, 2016-05-11 at 17​:04 -0700, Tony Cook via RT wrote​:

 
In any case we're unfrozen, the extra costs aren't prohibitive, so
this has been applied as b451492.

The patch updated win32/makefile.mk and win32/Makefile, but missed
updating win32/GNUmakefile, which I've done in
ec35cd4.

Ever since this was applied, $TMPDIR is slowly filling up on the
jenkins nodes and smokers. Something's not cleaning up after itself.

Chad is already poking at this. Just relaying this info here as an FYI.

D.

@p5pRT
Copy link
Author

p5pRT commented May 18, 2016

From @exodist

I have attached 3 patches

* Test-Simple update - This is the latest version just put on cpan, it includes fixes to the STDERR noise.
* A patch on top of the Test-Simple update to fix a test that leaks temp files
* A fix to a Thread-Queue test that makes it stop leaking temp files (This had previously been done, but got wiped out recently)

@p5pRT
Copy link
Author

p5pRT commented May 18, 2016

From @exodist

0001-Update-to-Test-Simple-1.302019.patch
From dbf20bc3907c428c79faee97cea354b85bf6198d Mon Sep 17 00:00:00 2001
From: Chad Granum <exodist7@gmail.com>
Date: Wed, 18 May 2016 08:27:19 -0700
Subject: [PATCH 1/3] Update to Test-Simple 1.302019

---
 MANIFEST                                           |  1 +
 cpan/Test-Simple/lib/Test/Builder.pm               | 23 +++++++-------------
 cpan/Test-Simple/lib/Test/Builder/Formatter.pm     |  2 +-
 cpan/Test-Simple/lib/Test/Builder/Module.pm        |  2 +-
 cpan/Test-Simple/lib/Test/Builder/Tester.pm        |  2 +-
 cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm  |  2 +-
 cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm      |  2 +-
 cpan/Test-Simple/lib/Test/More.pm                  |  2 +-
 cpan/Test-Simple/lib/Test/Simple.pm                |  2 +-
 cpan/Test-Simple/lib/Test/Tester.pm                |  2 +-
 cpan/Test-Simple/lib/Test/Tester/Capture.pm        |  2 +-
 cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm  |  2 +-
 cpan/Test-Simple/lib/Test/Tester/Delegate.pm       |  2 +-
 cpan/Test-Simple/lib/Test/use/ok.pm                |  2 +-
 cpan/Test-Simple/lib/Test2.pm                      | 12 +++++------
 cpan/Test-Simple/lib/Test2/API.pm                  | 12 +++++------
 cpan/Test-Simple/lib/Test2/API/Breakage.pm         |  4 +++-
 cpan/Test-Simple/lib/Test2/API/Context.pm          |  4 ++--
 cpan/Test-Simple/lib/Test2/API/Instance.pm         |  6 +++---
 cpan/Test-Simple/lib/Test2/API/Stack.pm            |  4 ++--
 cpan/Test-Simple/lib/Test2/Event.pm                |  4 ++--
 cpan/Test-Simple/lib/Test2/Event/Bail.pm           |  2 +-
 cpan/Test-Simple/lib/Test2/Event/Diag.pm           |  2 +-
 cpan/Test-Simple/lib/Test2/Event/Exception.pm      |  2 +-
 cpan/Test-Simple/lib/Test2/Event/Note.pm           |  2 +-
 cpan/Test-Simple/lib/Test2/Event/Ok.pm             |  2 +-
 cpan/Test-Simple/lib/Test2/Event/Plan.pm           |  2 +-
 cpan/Test-Simple/lib/Test2/Event/Skip.pm           |  2 +-
 cpan/Test-Simple/lib/Test2/Event/Subtest.pm        |  2 +-
 cpan/Test-Simple/lib/Test2/Event/Waiting.pm        |  2 +-
 cpan/Test-Simple/lib/Test2/Formatter.pm            |  6 +++---
 cpan/Test-Simple/lib/Test2/Formatter/TAP.pm        |  4 ++--
 cpan/Test-Simple/lib/Test2/Hub.pm                  |  6 +++---
 cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm      |  2 +-
 .../lib/Test2/Hub/Interceptor/Terminator.pm        |  2 +-
 cpan/Test-Simple/lib/Test2/Hub/Subtest.pm          |  2 +-
 cpan/Test-Simple/lib/Test2/IPC.pm                  |  2 +-
 cpan/Test-Simple/lib/Test2/IPC/Driver.pm           |  4 ++--
 cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm     | 25 ++++++++++++++++++++--
 cpan/Test-Simple/lib/Test2/Transition.pod          |  8 +++----
 cpan/Test-Simple/lib/Test2/Util.pm                 | 22 ++++++++++++-------
 cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm    |  4 ++--
 cpan/Test-Simple/lib/Test2/Util/HashBase.pm        |  4 ++--
 cpan/Test-Simple/lib/Test2/Util/Trace.pm           |  4 ++--
 cpan/Test-Simple/lib/ok.pm                         |  2 +-
 cpan/Test-Simple/t/00compile.t                     |  7 +++++-
 cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t  |  1 -
 cpan/Test-Simple/t/Test2/modules/Util.t            |  5 +++++
 cpan/Test-Simple/t/regression/662-tbt-no-plan.t    | 25 ++++++++++++++++++++++
 cpan/Test-Simple/t/tools.t                         |  2 +-
 50 files changed, 153 insertions(+), 96 deletions(-)
 create mode 100644 cpan/Test-Simple/t/regression/662-tbt-no-plan.t

diff --git a/MANIFEST b/MANIFEST
index eaeb89c..706438e 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -2660,6 +2660,7 @@ cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few.plx
 cpan/Test-Simple/t/lib/Test/Simple/sample_tests/two_fail.plx
 cpan/Test-Simple/t/lib/TieOut.pm
 cpan/Test-Simple/t/regression/642_persistent_end.t
+cpan/Test-Simple/t/regression/662-tbt-no-plan.t
 cpan/Test-Simple/t/regression/no_name_in_subtest.t
 cpan/Test-Simple/t/Test2/acceptance/try_it_done_testing.t
 cpan/Test-Simple/t/Test2/acceptance/try_it_fork.t
diff --git a/cpan/Test-Simple/lib/Test/Builder.pm b/cpan/Test-Simple/lib/Test/Builder.pm
index 892d609..a7037b1 100644
--- a/cpan/Test-Simple/lib/Test/Builder.pm
+++ b/cpan/Test-Simple/lib/Test/Builder.pm
@@ -4,7 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 BEGIN {
     if( $] < 5.008 ) {
@@ -304,7 +304,7 @@ sub subtest {
         ($err, $child_error) = ($@, $?);
 
         # They might have done 'BEGIN { skip_all => "whatever" }'
-        if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/) {
+        if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/ || (blessed($err) && blessed($err) eq 'Test::Builder::Exception')) {
             $ok  = undef;
             $err = undef;
         }
@@ -486,6 +486,12 @@ sub no_plan {
 
     my $ctx = $self->ctx;
 
+    if (defined $ctx->hub->plan) {
+        warn "Plan already set, no_plan() is a no-op, this will change to a hard failure in the future.";
+        $ctx->release;
+        return;
+    }
+
     $ctx->alert("no_plan takes no arguments") if $arg;
 
     $ctx->hub->plan('NO PLAN');
@@ -1780,19 +1786,6 @@ will print the appropriate headers and take the appropriate actions.
 
 If you call C<plan()>, don't call any of the other methods below.
 
-If a child calls "skip_all" in the plan, a C<Test::Builder::Exception> is
-thrown.  Trap this error, call C<finalize()> and don't run any more tests on
-the child.
-
- my $child = $Test->child('some child');
- eval { $child->plan( $condition ? ( skip_all => $reason ) : ( tests => 3 )  ) };
- if ( eval { $@->isa('Test::Builder::Exception') } ) {
-    $child->finalize;
-    return;
- }
- # run your tests
-
-
 =item B<expected_tests>
 
     my $max = $Test->expected_tests;
diff --git a/cpan/Test-Simple/lib/Test/Builder/Formatter.pm b/cpan/Test-Simple/lib/Test/Builder/Formatter.pm
index f458f13..ac82ac9 100644
--- a/cpan/Test-Simple/lib/Test/Builder/Formatter.pm
+++ b/cpan/Test-Simple/lib/Test/Builder/Formatter.pm
@@ -2,7 +2,7 @@ package Test::Builder::Formatter;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 use base 'Test2::Formatter::TAP';
 
diff --git a/cpan/Test-Simple/lib/Test/Builder/Module.pm b/cpan/Test-Simple/lib/Test/Builder/Module.pm
index 8f30974..d74b0ce 100644
--- a/cpan/Test-Simple/lib/Test/Builder/Module.pm
+++ b/cpan/Test-Simple/lib/Test/Builder/Module.pm
@@ -7,7 +7,7 @@ use Test::Builder 1.00;
 require Exporter;
 our @ISA = qw(Exporter);
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 =head1 NAME
diff --git a/cpan/Test-Simple/lib/Test/Builder/Tester.pm b/cpan/Test-Simple/lib/Test/Builder/Tester.pm
index 3b1f53e..4abc447 100644
--- a/cpan/Test-Simple/lib/Test/Builder/Tester.pm
+++ b/cpan/Test-Simple/lib/Test/Builder/Tester.pm
@@ -1,7 +1,7 @@
 package Test::Builder::Tester;
 
 use strict;
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 use Test::Builder 0.99;
 use Symbol;
diff --git a/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm b/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
index 8913412..1645401 100644
--- a/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
+++ b/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
@@ -1,7 +1,7 @@
 package Test::Builder::Tester::Color;
 
 use strict;
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 require Test::Builder::Tester;
 
diff --git a/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm b/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
index d22fb33..9015f7e 100644
--- a/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
+++ b/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
@@ -2,7 +2,7 @@ package Test::Builder::TodoDiag;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 use base 'Test2::Event::Diag';
 
diff --git a/cpan/Test-Simple/lib/Test/More.pm b/cpan/Test-Simple/lib/Test/More.pm
index 89814bb..381be8b 100644
--- a/cpan/Test-Simple/lib/Test/More.pm
+++ b/cpan/Test-Simple/lib/Test/More.pm
@@ -17,7 +17,7 @@ sub _carp {
     return warn @_, " at $file line $line\n";
 }
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 use Test::Builder::Module 0.99;
 our @ISA    = qw(Test::Builder::Module);
diff --git a/cpan/Test-Simple/lib/Test/Simple.pm b/cpan/Test-Simple/lib/Test/Simple.pm
index f0a685f..179457c 100644
--- a/cpan/Test-Simple/lib/Test/Simple.pm
+++ b/cpan/Test-Simple/lib/Test/Simple.pm
@@ -4,7 +4,7 @@ use 5.006;
 
 use strict;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 use Test::Builder::Module 0.99;
 our @ISA    = qw(Test::Builder::Module);
diff --git a/cpan/Test-Simple/lib/Test/Tester.pm b/cpan/Test-Simple/lib/Test/Tester.pm
index e8785b0..30e9d74 100644
--- a/cpan/Test-Simple/lib/Test/Tester.pm
+++ b/cpan/Test-Simple/lib/Test/Tester.pm
@@ -18,7 +18,7 @@ require Exporter;
 
 use vars qw( @ISA @EXPORT );
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 @EXPORT = qw( run_tests check_tests check_test cmp_results show_space );
 @ISA = qw( Exporter );
diff --git a/cpan/Test-Simple/lib/Test/Tester/Capture.pm b/cpan/Test-Simple/lib/Test/Tester/Capture.pm
index 0217e98..6bd558d 100644
--- a/cpan/Test-Simple/lib/Test/Tester/Capture.pm
+++ b/cpan/Test-Simple/lib/Test/Tester/Capture.pm
@@ -2,7 +2,7 @@ use strict;
 
 package Test::Tester::Capture;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test::Builder;
diff --git a/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm b/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
index defd2f1..19e84eb 100644
--- a/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
+++ b/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
@@ -3,7 +3,7 @@ use strict;
 
 package Test::Tester::CaptureRunner;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test::Tester::Capture;
diff --git a/cpan/Test-Simple/lib/Test/Tester/Delegate.pm b/cpan/Test-Simple/lib/Test/Tester/Delegate.pm
index 6bcfc54..edf3da4 100644
--- a/cpan/Test-Simple/lib/Test/Tester/Delegate.pm
+++ b/cpan/Test-Simple/lib/Test/Tester/Delegate.pm
@@ -3,7 +3,7 @@ use warnings;
 
 package Test::Tester::Delegate;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use vars '$AUTOLOAD';
diff --git a/cpan/Test-Simple/lib/Test/use/ok.pm b/cpan/Test-Simple/lib/Test/use/ok.pm
index 40b6690..1a44566 100644
--- a/cpan/Test-Simple/lib/Test/use/ok.pm
+++ b/cpan/Test-Simple/lib/Test/use/ok.pm
@@ -1,7 +1,7 @@
 package Test::use::ok;
 use 5.005;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 __END__
diff --git a/cpan/Test-Simple/lib/Test2.pm b/cpan/Test-Simple/lib/Test2.pm
index ac12b0e..bc142f8 100644
--- a/cpan/Test-Simple/lib/Test2.pm
+++ b/cpan/Test-Simple/lib/Test2.pm
@@ -2,7 +2,7 @@ package Test2;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 1;
@@ -25,7 +25,7 @@ completely refactoring it, adding many new features and capabilities.
 =head1 GETTING STARTED
 
 If you are interested in writing tests using new tools then you should look at
-L<Test2::Suite>. L<Test::Suite> is a seperate cpan distribution that contains
+L<Test2::Suite>. L<Test::Suite> is a separate cpan distribution that contains
 many tools implemented on Test2.
 
 If you are interested in writing new tools you should take a look at
@@ -67,12 +67,12 @@ perls, or when non-essential modules have not been installed.
 =head2 Test2::Formatter::
 
 Formatters live under this namespace. L<Test2::Formatter::TAP> is the only
-formatter currently. It is acceptible for third party distributions to create
+formatter currently. It is acceptable for third party distributions to create
 new formatters under this namespace.
 
 =head2 Test2::Event::
 
-Events live under this namespace. It is considered acceptible for third party
+Events live under this namespace. It is considered acceptable for third party
 distributions to add new event types in this namespace.
 
 =head2 Test2::Hub::
@@ -102,8 +102,8 @@ This is for Test2 API and related packages.
 
 =head2 Test2::
 
-The Test2:: namespace is intended for extentions and frameworks. Tools,
-Plugins, etc should not go directly into this namespace. However extentions
+The Test2:: namespace is intended for extensions and frameworks. Tools,
+Plugins, etc should not go directly into this namespace. However extensions
 that are used to build tools and plugins may go here.
 
 In short: If the module exports anything that should be run directly by a test
diff --git a/cpan/Test-Simple/lib/Test2/API.pm b/cpan/Test-Simple/lib/Test2/API.pm
index 32cd49a..54ac9d0 100644
--- a/cpan/Test-Simple/lib/Test2/API.pm
+++ b/cpan/Test-Simple/lib/Test2/API.pm
@@ -2,7 +2,7 @@ package Test2::API;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 my $INST;
@@ -104,7 +104,7 @@ use base 'Exporter';
 # There is a use-cycle between API and API/Context. Context needs to use some
 # API functions as the package is compiling. Test2::API::context() needs
 # Test2::API::Context to be loaded, but we cannot 'require' the module there as
-# it causes a very noticable performance impact with how often context() is
+# it causes a very noticeable performance impact with how often context() is
 # called.
 #
 # This will make sure that Context.pm is loaded the first time this module is
@@ -293,7 +293,7 @@ sub context {
         delete $CONTEXTS->{$hid};
     }
 
-    # Directly bless the object here, calling new is a noticable performance
+    # Directly bless the object here, calling new is a noticeable performance
     # hit with how often this needs to be called.
     my $trace = bless(
         {
@@ -304,7 +304,7 @@ sub context {
         'Test2::Util::Trace'
     );
 
-    # Directly bless the object here, calling new is a noticable performance
+    # Directly bless the object here, calling new is a noticeable performance
     # hit with how often this needs to be called.
     my $aborted = 0;
     $current = bless(
@@ -468,7 +468,7 @@ sub run_subtest {
         $err = $@;
 
         # They might have done 'BEGIN { skip_all => "whatever" }'
-        if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/) {
+        if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/ || (blessed($err) && blessed($err) eq 'Test::Builder::Exception')) {
             $ok  = undef;
             $err = undef;
         }
@@ -579,7 +579,7 @@ The C<context()> method is your primary interface into the Test2 framework.
         return $bool;
     }
 
-See L<Test2::API::Context> for a list of methods avabilable on the context object.
+See L<Test2::API::Context> for a list of methods available on the context object.
 
 =head2 TESTING YOUR TOOLS
 
diff --git a/cpan/Test-Simple/lib/Test2/API/Breakage.pm b/cpan/Test-Simple/lib/Test2/API/Breakage.pm
index c0cbc24..d291d38 100644
--- a/cpan/Test-Simple/lib/Test2/API/Breakage.pm
+++ b/cpan/Test-Simple/lib/Test2/API/Breakage.pm
@@ -2,7 +2,7 @@ package Test2::API::Breakage;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test2::Util qw/pkg_to_file/;
@@ -139,6 +139,8 @@ version number. If the installed version of the module is at or below the
 specified one then the module will not work. A newer version may work, but is
 not tested or verified.
 
+=back
+
 =head1 SOURCE
 
 The source code repository for Test2 can be found at
diff --git a/cpan/Test-Simple/lib/Test2/API/Context.pm b/cpan/Test-Simple/lib/Test2/API/Context.pm
index 80f57b6..d09f394 100644
--- a/cpan/Test-Simple/lib/Test2/API/Context.pm
+++ b/cpan/Test-Simple/lib/Test2/API/Context.pm
@@ -2,7 +2,7 @@ package Test2::API::Context;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Carp qw/confess croak longmess/;
@@ -676,7 +676,7 @@ new one is generated, or if an existing one is returned.
 
 This object consumes L<Test2::Util::ExternalMeta> which provides a consistent
 way for you to attach meta-data to instances of this class. This is useful for
-tools, plugins, and other extentions.
+tools, plugins, and other extensions.
 
 =head1 SOURCE
 
diff --git a/cpan/Test-Simple/lib/Test2/API/Instance.pm b/cpan/Test-Simple/lib/Test2/API/Instance.pm
index f73e399..afdd454 100644
--- a/cpan/Test-Simple/lib/Test2/API/Instance.pm
+++ b/cpan/Test-Simple/lib/Test2/API/Instance.pm
@@ -2,7 +2,7 @@ package Test2::API::Instance;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 our @CARP_NOT = qw/Test2::API Test2::API::Instance Test2::IPC::Driver Test2::Formatter/;
@@ -129,7 +129,7 @@ sub _finalize {
         $self->{+FORMATTER} = $formatter;
     }
 
-    # Turn on IPC if threads are on, drivers are reigstered, or the Test2::IPC
+    # Turn on IPC if threads are on, drivers are registered, or the Test2::IPC
     # module is loaded.
     return unless USE_THREADS || $INC{'Test2/IPC.pm'} || @{$self->{+IPC_DRIVERS}};
 
@@ -547,7 +547,7 @@ Get the post-load callbacks.
 =item $obj->add_post_load_callback(sub { ... })
 
 Add a post-load callback. If C<load()> has already been called then the callback will
-be immedietly executed. If C<load()> has not been called then the callback will be
+be immediately executed. If C<load()> has not been called then the callback will be
 stored and executed later when C<load()> is called.
 
 =item $hashref = $obj->contexts()
diff --git a/cpan/Test-Simple/lib/Test2/API/Stack.pm b/cpan/Test-Simple/lib/Test2/API/Stack.pm
index 0bc25ec..ee39e87 100644
--- a/cpan/Test-Simple/lib/Test2/API/Stack.pm
+++ b/cpan/Test-Simple/lib/Test2/API/Stack.pm
@@ -2,7 +2,7 @@ package Test2::API::Stack;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test2::Hub();
@@ -110,7 +110,7 @@ instances.
 =head1 ***INTERNALS NOTE***
 
 B<The internals of this package are subject to change at any time!> The public
-methods provided will not change in backwords incompatible ways, but the
+methods provided will not change in backwards incompatible ways, but the
 underlying implementation details might. B<Do not break encapsulation here!>
 
 =head1 DESCRIPTION
diff --git a/cpan/Test-Simple/lib/Test2/Event.pm b/cpan/Test-Simple/lib/Test2/Event.pm
index 67e6f77..6847801 100644
--- a/cpan/Test-Simple/lib/Test2/Event.pm
+++ b/cpan/Test-Simple/lib/Test2/Event.pm
@@ -2,7 +2,7 @@ package Test2::Event;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test2::Util::HashBase qw/trace nested in_subtest subtest_id/;
@@ -109,7 +109,7 @@ thing to want, it is used by bail-out and skip_all to end testing.
 
 This is called B<AFTER> your event has been passed to the formatter. This
 should normally return undef, only change this if your event should cause the
-test to exit immedietly.
+test to exit immediately.
 
 If you want this event to cause the test to exit you should return the exit
 code here. Exit code of 0 means exit success, any other integer means exit with
diff --git a/cpan/Test-Simple/lib/Test2/Event/Bail.pm b/cpan/Test-Simple/lib/Test2/Event/Bail.pm
index 875ba0a..8ed6393 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Bail.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Bail.pm
@@ -2,7 +2,7 @@ package Test2::Event::Bail;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event';
diff --git a/cpan/Test-Simple/lib/Test2/Event/Diag.pm b/cpan/Test-Simple/lib/Test2/Event/Diag.pm
index af5790c..891079d 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Diag.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Diag.pm
@@ -2,7 +2,7 @@ package Test2::Event::Diag;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event';
diff --git a/cpan/Test-Simple/lib/Test2/Event/Exception.pm b/cpan/Test-Simple/lib/Test2/Event/Exception.pm
index 3504a24..a61fce5 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Exception.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Exception.pm
@@ -2,7 +2,7 @@ package Test2::Event::Exception;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event';
diff --git a/cpan/Test-Simple/lib/Test2/Event/Note.pm b/cpan/Test-Simple/lib/Test2/Event/Note.pm
index aea9951..0985a02 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Note.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Note.pm
@@ -2,7 +2,7 @@ package Test2::Event::Note;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event';
diff --git a/cpan/Test-Simple/lib/Test2/Event/Ok.pm b/cpan/Test-Simple/lib/Test2/Event/Ok.pm
index b467f70..7dbf5b9 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Ok.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Ok.pm
@@ -2,7 +2,7 @@ package Test2::Event::Ok;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event';
diff --git a/cpan/Test-Simple/lib/Test2/Event/Plan.pm b/cpan/Test-Simple/lib/Test2/Event/Plan.pm
index 12f5d6b..8e26be2 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Plan.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Plan.pm
@@ -2,7 +2,7 @@ package Test2::Event::Plan;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event';
diff --git a/cpan/Test-Simple/lib/Test2/Event/Skip.pm b/cpan/Test-Simple/lib/Test2/Event/Skip.pm
index 9f9ae92..92eb793 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Skip.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Skip.pm
@@ -2,7 +2,7 @@ package Test2::Event::Skip;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event::Ok';
diff --git a/cpan/Test-Simple/lib/Test2/Event/Subtest.pm b/cpan/Test-Simple/lib/Test2/Event/Subtest.pm
index 1784f05..8e5330b 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Subtest.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Subtest.pm
@@ -2,7 +2,7 @@ package Test2::Event::Subtest;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event::Ok';
diff --git a/cpan/Test-Simple/lib/Test2/Event/Waiting.pm b/cpan/Test-Simple/lib/Test2/Event/Waiting.pm
index c77891d..c44ada5 100644
--- a/cpan/Test-Simple/lib/Test2/Event/Waiting.pm
+++ b/cpan/Test-Simple/lib/Test2/Event/Waiting.pm
@@ -2,7 +2,7 @@ package Test2::Event::Waiting;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Event';
diff --git a/cpan/Test-Simple/lib/Test2/Formatter.pm b/cpan/Test-Simple/lib/Test2/Formatter.pm
index 0c8a09f..4e2e368 100644
--- a/cpan/Test-Simple/lib/Test2/Formatter.pm
+++ b/cpan/Test-Simple/lib/Test2/Formatter.pm
@@ -2,7 +2,7 @@ package Test2::Formatter;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 my %ADDED;
@@ -53,8 +53,8 @@ A formatter is any package or object with a C<write($event, $num)> method.
 The C<write> method is a method, so it either gets a class or instance. The 2
 arguments are the C<$event> object it should record, and the C<$assert_num>
 which is the number of the current assertion (ok), or the last assertion if
-this even is not itself an assertion. The assertion number may be any inyeger 0
-or greator, and may be undefined in some cases.
+this even is not itself an assertion. The assertion number may be any integer 0
+or greater, and may be undefined in some cases.
 
 The C<hide_buffered()> method must return a boolean. This is used to tell
 buffered subtests whether or not to send it events as they are being buffered.
diff --git a/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm b/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
index 3020b8c..6a8fd3d 100644
--- a/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
+++ b/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
@@ -2,7 +2,7 @@ package Test2::Formatter::TAP;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test2::Util::HashBase qw{
@@ -234,7 +234,7 @@ sub event_subtest {
 
     # In a verbose harness we indent the diagnostics from the 'Ok' event since
     # they will appear inside the subtest braces. This helps readability. In a
-    # non-verbose harness we do nto do this because it is less readable.
+    # non-verbose harness we do not do this because it is less readable.
     if ($ENV{HARNESS_IS_VERBOSE}) {
         # index 0 is the filehandle, index 1 is the message we want to indent.
         $_->[1] =~ s/^(.*\S.*)$/    $1/mg for @diag;
diff --git a/cpan/Test-Simple/lib/Test2/Hub.pm b/cpan/Test-Simple/lib/Test2/Hub.pm
index 1d49977..4a87913 100644
--- a/cpan/Test-Simple/lib/Test2/Hub.pm
+++ b/cpan/Test-Simple/lib/Test2/Hub.pm
@@ -2,7 +2,7 @@ package Test2::Hub;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Carp qw/carp croak confess/;
@@ -458,7 +458,7 @@ Test2::Hub - The conduit through which all events flow.
 =head1 DESCRIPTION
 
 The hub is the place where all events get processed and handed off to the
-formatter. The hub also tracks test state, and provides everal hooks into the
+formatter. The hub also tracks test state, and provides several hooks into the
 event pipeline.
 
 =head1 COMMON TASKS
@@ -636,7 +636,7 @@ an END block.
 =item $sub = $hub->add_context_acquire(sub { ... });
 
 Add a callback that will be called every time someone tries to acquire a
-context. It gets a single argument, a reference the the hash of parameters
+context. It gets a single argument, a reference of the hash of parameters
 being used the construct the context. This is your chance to change the
 parameters by directly altering the hash.
 
diff --git a/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm b/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
index df6df86..9761bb3 100644
--- a/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
+++ b/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
@@ -2,7 +2,7 @@ package Test2::Hub::Interceptor;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test2::Hub::Interceptor::Terminator();
diff --git a/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm b/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
index c79f19c..8a64074 100644
--- a/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
+++ b/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
@@ -2,7 +2,7 @@ package Test2::Hub::Interceptor::Terminator;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 1;
diff --git a/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm b/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
index 071916a..333f1fe 100644
--- a/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
+++ b/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
@@ -2,7 +2,7 @@ package Test2::Hub::Subtest;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::Hub';
diff --git a/cpan/Test-Simple/lib/Test2/IPC.pm b/cpan/Test-Simple/lib/Test2/IPC.pm
index ff8a6da..1a06758 100644
--- a/cpan/Test-Simple/lib/Test2/IPC.pm
+++ b/cpan/Test-Simple/lib/Test2/IPC.pm
@@ -2,7 +2,7 @@ package Test2::IPC;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test2::API::Instance;
diff --git a/cpan/Test-Simple/lib/Test2/IPC/Driver.pm b/cpan/Test-Simple/lib/Test2/IPC/Driver.pm
index d00fcea..c0b59c5 100644
--- a/cpan/Test-Simple/lib/Test2/IPC/Driver.pm
+++ b/cpan/Test-Simple/lib/Test2/IPC/Driver.pm
@@ -2,7 +2,7 @@ package Test2::IPC::Driver;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Carp qw/confess longmess/;
@@ -29,7 +29,7 @@ for my $meth (qw/send cull add_hub drop_hub waiting is_viable/) {
 }
 
 # Print the error and call exit. We are not using 'die' cause this is a
-# catastophic error that should never be caught. If we get here it
+# catastrophic error that should never be caught. If we get here it
 # means some serious shit has happened in a child process, the only way
 # to inform the parent may be to exit false.
 
diff --git a/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm b/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
index a449a7d..4fdc180 100644
--- a/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
+++ b/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
@@ -2,7 +2,7 @@ package Test2::IPC::Driver::Files;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use base 'Test2::IPC::Driver';
@@ -13,8 +13,9 @@ use Scalar::Util qw/blessed/;
 use File::Temp();
 use Storable();
 use File::Spec();
+use POSIX();
 
-use Test2::Util qw/try get_tid pkg_to_file/;
+use Test2::Util qw/try get_tid pkg_to_file IS_WIN32/;
 use Test2::API qw/test2_ipc_set_pending/;
 
 sub use_shm { 1 }
@@ -151,11 +152,31 @@ do so if Test::Builder is loaded for legacy reasons.
         $self->{+GLOBALS}->{$hid}->{$name}++;
     }
 
+    my ($old, $blocked);
+    unless(IS_WIN32) {
+        my $to_block = POSIX::SigSet->new(
+            POSIX::SIGINT(),
+            POSIX::SIGALRM(),
+            POSIX::SIGHUP(),
+            POSIX::SIGTERM(),
+            POSIX::SIGUSR1(),
+            POSIX::SIGUSR2(),
+        );
+        $old = POSIX::SigSet->new;
+        $blocked = POSIX::sigprocmask(POSIX::SIG_BLOCK(), $to_block, $old);
+        # Silently go on if we failed to log signals, not much we can do.
+    }
+
+    # Write and rename the file.
     my ($ok, $err) = try {
         Storable::store($e, $file);
         rename($file, $ready) or $self->abort("Could not rename file '$file' -> '$ready'");
         test2_ipc_set_pending(substr($file, -(shm_size)));
     };
+
+    # If our block was successful we want to restore the old mask.
+    POSIX::sigprocmask(POSIX::SIG_SETMASK(), $old, POSIX::SigSet->new()) if defined $blocked;
+
     if (!$ok) {
         my $src_file = __FILE__;
         $err =~ s{ at \Q$src_file\E.*$}{};
diff --git a/cpan/Test-Simple/lib/Test2/Transition.pod b/cpan/Test-Simple/lib/Test2/Transition.pod
index aceb381..41dd33d 100644
--- a/cpan/Test-Simple/lib/Test2/Transition.pod
+++ b/cpan/Test-Simple/lib/Test2/Transition.pod
@@ -7,7 +7,7 @@ Test2::Transition - Transition notes when upgrading to Test2
 =head1 DESCRIPTION
 
 This is where gotchas and breakages related to the Test2 upgrade are
-documented. The upgrade causes Test::Builder to defer to Test2 uner the hood.
+documented. The upgrade causes Test::Builder to defer to Test2 under the hood.
 This transition is mostly transparent, but there are a few cases that can trip
 you up.
 
@@ -24,14 +24,14 @@ Confusingly these were called Test::Builder2 and Test::Builder1.5, in that
 order. Many people put conditionals in their code to check the Test::Builder
 version number and adapt their code accordingly.
 
-The Test::Builder2/1.5 projects both died out. Now the conditional code poeple
+The Test::Builder2/1.5 projects both died out. Now the conditional code people
 added has become a mine field. A vast majority of modules broken by Test2 fall
 into this category.
 
 =head3 The Fix
 
 The fix is to remove all Test::Builder1.5/2 related code. Either use the
-lagacy Test::Builder API, or use Test2 directly.
+legacy Test::Builder API, or use Test2 directly.
 
 =head2 Replacing the Test::Builder singleton
 
@@ -77,7 +77,7 @@ as needed.
 
 An early change, in fact the change that made Test2 an idea, was a change to
 the indentation of the subtest note. IT was decided it would be more readable
-to outdent the subtest note instead of having it inline withthe subtest:
+to outdent the subtest note instead of having it inline with the subtest:
 
     # subtest foo
         ok 1 - blah
diff --git a/cpan/Test-Simple/lib/Test2/Util.pm b/cpan/Test-Simple/lib/Test2/Util.pm
index ed6382d..980f4e0 100644
--- a/cpan/Test-Simple/lib/Test2/Util.pm
+++ b/cpan/Test-Simple/lib/Test2/Util.pm
@@ -2,7 +2,7 @@ package Test2::Util;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Config qw/%Config/;
@@ -16,9 +16,15 @@ our @EXPORT_OK = qw{
     CAN_THREAD
     CAN_REALLY_FORK
     CAN_FORK
+
+    IS_WIN32
 };
 use base 'Exporter';
 
+BEGIN {
+    *IS_WIN32 = ($^O eq 'MSWin32') ? sub() { 1 } : sub() { 0 };
+}
+
 sub _can_thread {
     return 0 unless $] >= 5.008001;
     return 0 unless $Config{'useithreads'};
@@ -36,7 +42,7 @@ sub _can_thread {
 
 sub _can_fork {
     return 1 if $Config{d_fork};
-    return 0 unless $^O eq 'MSWin32' || $^O eq 'NetWare';
+    return 0 unless IS_WIN32 || $^O eq 'NetWare';
     return 0 unless $Config{useithreads};
     return 0 unless $Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/;
 
@@ -80,7 +86,7 @@ sub _local_try(&;@) {
 # before forking or starting a new thread. So for those systems we use the
 # non-local form. When possible though we use the faster 'local' form.
 BEGIN {
-    if ($^O eq 'MSWin32' && $] < 5.020002) {
+    if (IS_WIN32 && $] < 5.020002) {
         *try = \&_manual_try;
     }
     else {
@@ -89,17 +95,17 @@ BEGIN {
 }
 
 BEGIN {
-    if(CAN_THREAD) {
+    if (CAN_THREAD) {
         if ($INC{'threads.pm'}) {
             # Threads are already loaded, so we do not need to check if they
             # are loaded each time
             *USE_THREADS = sub() { 1 };
-            *get_tid = sub { threads->tid() };
+            *get_tid     = sub() { threads->tid() };
         }
         else {
             # :-( Need to check each time to see if they have been loaded.
-            *USE_THREADS = sub { $INC{'threads.pm'} ? 1 : 0 };
-            *get_tid = sub { $INC{'threads.pm'} ? threads->tid() : 0 };
+            *USE_THREADS = sub() { $INC{'threads.pm'} ? 1 : 0 };
+            *get_tid     = sub() { $INC{'threads.pm'} ? threads->tid() : 0 };
         }
     }
     else {
@@ -154,7 +160,7 @@ be restored, but $@ will contain the exception being thrown.
 
 =item CAN_FORK
 
-True if this system is capable of true or psuedo-fork.
+True if this system is capable of true or pseudo-fork.
 
 =item CAN_REALLY_FORK
 
diff --git a/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm b/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
index 51c1253..a7ada21 100644
--- a/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
+++ b/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
@@ -2,7 +2,7 @@ package Test2::Util::ExternalMeta;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Carp qw/croak/;
@@ -124,7 +124,7 @@ hash, then there is a conflict and you cannot use this package.
 =item $val = $obj->meta($key, $default)
 
 This will get the value for a specified meta C<$key>. Normally this will return
-C<undef> when there is no value for the C<$key>, however you can specfi a
+C<undef> when there is no value for the C<$key>, however you can specify a
 C<$default> value to set when no value is already set.
 
 =item $val = $obj->get_meta($key)
diff --git a/cpan/Test-Simple/lib/Test2/Util/HashBase.pm b/cpan/Test-Simple/lib/Test2/Util/HashBase.pm
index 42f04d9..b897390 100644
--- a/cpan/Test-Simple/lib/Test2/Util/HashBase.pm
+++ b/cpan/Test-Simple/lib/Test2/Util/HashBase.pm
@@ -2,7 +2,7 @@ package Test2::Util::HashBase;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 require Carp;
@@ -146,7 +146,7 @@ This package is used to generate classes based on hashrefs. Using this class
 will give you a C<new()> method, as well as generating accessors you request.
 Generated accessors will be getters, C<set_ACCESSOR> setters will also be
 generated for you. You also get constants for each accessor (all caps) which
-return the key into the hash for that accessor. Single inheritence is also
+return the key into the hash for that accessor. Single inheritance is also
 supported.
 
 =head1 METHODS
diff --git a/cpan/Test-Simple/lib/Test2/Util/Trace.pm b/cpan/Test-Simple/lib/Test2/Util/Trace.pm
index 7fcfcef..8a6407b 100644
--- a/cpan/Test-Simple/lib/Test2/Util/Trace.pm
+++ b/cpan/Test-Simple/lib/Test2/Util/Trace.pm
@@ -2,7 +2,7 @@ package Test2::Util::Trace;
 use strict;
 use warnings;
 
-our $VERSION = '1.302015';
+our $VERSION = '1.302019';
 
 
 use Test2::Util qw/get_tid/;
@@ -87,7 +87,7 @@ C<< at <FILE> line <LINE> >> when calling C<< $trace->debug >>.
 =item $str = $trace->debug
 
 Typically returns the string C<< at <FILE> line <LINE> >>. If C<detail> is set
-then its value wil be returned instead.
+then its value will be returned instead.
 
 =item $trace->alert($MESSAGE)
 
diff --git a/cpan/Test-Simple/lib/ok.pm b/cpan/Test-Simple/lib/ok.pm
index b632a49..9d59a57 100644
--- a/cpan/Test-Simple/lib/ok.pm
+++ b/cpan/Test-Simple/lib/ok.pm
@@ -1,5 +1,5 @@
 package ok;
-$ok::VERSION = '1.302015';
+$ok::VERSION = '1.302019';
 
 use strict;
 use Test::More ();
diff --git a/cpan/Test-Simple/t/00compile.t b/cpan/Test-Simple/t/00compile.t
index 281021b..049f989 100644
--- a/cpan/Test-Simple/t/00compile.t
+++ b/cpan/Test-Simple/t/00compile.t
@@ -34,7 +34,12 @@ foreach my $file (@modules) {
     # they're already loaded.  This avoids recompilation warnings.
     local @INC = @INC;
     unshift @INC, ".";
-    ok eval { require($file); 1 } or diag "require $file failed.\n$@";
+    my @warnings;
+    ok eval {
+        local $SIG{__WARN__} = sub { push @warnings => @_ };
+        require($file);
+        1
+    } or diag "require $file failed.", "\n", @warnings, "\n", $@;
 
     SKIP: {
         skip "Test::Pod not installed", 1 unless $Has_Test_Pod;
diff --git a/cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t b/cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t
index 5c5f694..7a7d7a1 100644
--- a/cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t
+++ b/cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t
@@ -47,6 +47,5 @@ diag "should be a note";
 test2_stack->top->unfilter($filter);
 
 ok(1, "Third");
-diag "should be a diag";
 
 done_testing;
diff --git a/cpan/Test-Simple/t/Test2/modules/Util.t b/cpan/Test-Simple/t/Test2/modules/Util.t
index 1632a95..da44ba1 100644
--- a/cpan/Test-Simple/t/Test2/modules/Util.t
+++ b/cpan/Test-Simple/t/Test2/modules/Util.t
@@ -12,6 +12,8 @@ use Test2::Util qw/
     CAN_FORK
     CAN_THREAD
     CAN_REALLY_FORK
+
+    IS_WIN32
 /;
 
 {
@@ -33,5 +35,8 @@ is(pkg_to_file('A::Package::Name'), 'A/Package/Name.pm', "Converted package to f
 CAN_THREAD();
 CAN_FORK();
 CAN_REALLY_FORK();
+IS_WIN32();
+
+is(IS_WIN32(), ($^O eq 'MSWin32') ? 1 : 0, "IS_WIN32 is correct ($^O)");
 
 done_testing;
diff --git a/cpan/Test-Simple/t/regression/662-tbt-no-plan.t b/cpan/Test-Simple/t/regression/662-tbt-no-plan.t
new file mode 100644
index 0000000..acc9c9f
--- /dev/null
+++ b/cpan/Test-Simple/t/regression/662-tbt-no-plan.t
@@ -0,0 +1,25 @@
+use Test::Builder::Tester;
+use Test::More tests => 1;
+use strict;
+use warnings;
+
+BEGIN {
+    package Example::Tester;
+
+    use base 'Test::Builder::Module';
+    $INC{'Example/Tester.pm'} = 1;
+
+    sub import {
+        my $package    = shift;
+        my %args       = @_;
+        my $callerpack = caller;
+        my $tb         = __PACKAGE__->builder;
+        $tb->exported_to($callerpack);
+        local $SIG{__WARN__} = sub { };
+        $tb->no_plan;
+    }
+}
+
+test_out('ok 1 - use Example::Tester;');
+use_ok('Example::Tester');
+test_test("use Example::Tester;");
diff --git a/cpan/Test-Simple/t/tools.t b/cpan/Test-Simple/t/tools.t
index 3a87a00..a71aff1 100644
--- a/cpan/Test-Simple/t/tools.t
+++ b/cpan/Test-Simple/t/tools.t
@@ -30,7 +30,7 @@ isnt("foo", undef, "'isnt' undef test 1");
 isnt(undef, "foo", "'isnt' undef test 2");
 like("foo", qr/o/, "'like' test");
 unlike("foo", qr/a/, "'unlike' test");
-diag("Testing Diag");
+
 note("Testing Note");
 
 my $str = "abc";
-- 
2.8.2

@p5pRT
Copy link
Author

p5pRT commented May 18, 2016

From @exodist

0002-Fix-Test-Simple-test-so-it-doesn-t-leak-temp-files.patch
From 027cda98742481afa2350a7606b6e8a582f35179 Mon Sep 17 00:00:00 2001
From: Chad Granum <exodist7@gmail.com>
Date: Wed, 18 May 2016 08:27:52 -0700
Subject: [PATCH 2/3] Fix Test-Simple test so it doesn't leak temp files

This change has been applied to Test-Simple's master branch, but is not
on cpan yet
---
 cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t b/cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
index 368bbf2..cf37479 100644
--- a/cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
+++ b/cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
@@ -152,6 +152,18 @@ ok(!-d $tmpdir, "cleaned up temp dir");
         1;
     };
 
+    my $cleanup = sub {
+        if (opendir(my $d, $tmpdir)) {
+            for my $f (readdir($d)) {
+                next if $f =~ m/^\.+$/;
+                next unless -f "$tmpdir/$f";
+                unlink("$tmpdir/$f");
+            }
+        }
+        rmdir($tmpdir) or die "$!";
+    };
+    $cleanup->();
+
     is($out->{STDOUT}, "not ok - IPC Fatal Error\nnot ok - IPC Fatal Error\n", "printed ");
 
     like($out->{STDERR}, qr/IPC Temp Dir: \Q$tmpdir\E/m, "Got temp dir path");
@@ -186,12 +198,14 @@ ok(!-d $tmpdir, "cleaned up temp dir");
 
     $out = capture {
         my $ipc = Test2::IPC::Driver::Files->new();
+        $tmpdir = $ipc->tempdir;
         $ipc->add_hub($hid);
         $ipc->send($hid, bless({ foo => 1 }, 'Foo'));
         local $@;
         eval { $ipc->drop_hub($hid) };
         print STDERR $@ unless $@ =~ m/^255/;
     };
+    $cleanup->();
     like($out->{STDERR}, qr/IPC Fatal Error: Not all files from hub '12345' have been collected/, "Leftover files");
     like($out->{STDERR}, qr/IPC Fatal Error: Leftover files in the directory \(.*\.ready\)/, "What file");
 
-- 
2.8.2

@p5pRT
Copy link
Author

p5pRT commented May 18, 2016

From @exodist

0003-Fix-Thread-Queue-test-so-it-doesn-t-leak-temp-files.patch
From 6e04c795c70a12d10fecb7cabe1b1f10525c6999 Mon Sep 17 00:00:00 2001
From: Chad Granum <exodist7@gmail.com>
Date: Wed, 18 May 2016 08:30:49 -0700
Subject: [PATCH 3/3] Fix Thread-Queue test so it doesn't leak temp files

Looks c6eacdc  did the same thing I am doing here for the exact same
reason. For some reason the commit after that blew away those changes.
---
 dist/Thread-Queue/t/07_lock.t | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/dist/Thread-Queue/t/07_lock.t b/dist/Thread-Queue/t/07_lock.t
index f9e258e..088761b 100644
--- a/dist/Thread-Queue/t/07_lock.t
+++ b/dist/Thread-Queue/t/07_lock.t
@@ -29,7 +29,7 @@ ok($q, 'New queue');
 my $sm = Thread::Semaphore->new(0);
 my $st = Thread::Semaphore->new(0);
 
-threads->create(sub {
+my $thr = threads->create(sub {
     {
         lock($q);
         $sm->up();
@@ -39,7 +39,7 @@ threads->create(sub {
         my @x = $q->extract(5,2);
         is_deeply(\@x, [6,7], 'Thread dequeues under lock');
     }
-})->detach();
+});
 
 $sm->down();
 $st->up();
@@ -47,6 +47,8 @@ my @x = $q->dequeue_nb(100);
 is_deeply(\@x, [1..5,8..10], 'Main dequeues');
 threads::yield();
 
+$thr->join;
+
 exit(0);
 
 # EOF
-- 
2.8.2

@p5pRT
Copy link
Author

p5pRT commented May 18, 2016

From @exodist

On Wed May 18 08​:49​:04 2016, exodist7@​gmail.com wrote​:

* A fix to a Thread-Queue test that makes it stop leaking temp files
(This had previously been done, but got wiped out recently)

I also pinged the Thread​::Queue RT about this​:

https://rt.cpan.org/Ticket/Display.html?id=114468

so they are also going to fix the problem.

@p5pRT
Copy link
Author

p5pRT commented May 21, 2016

From @exodist

Looks like the thread stuff got fixed on its own, so that patch is not necessary. I still think it would be good to apply the other 2 patches so that tmp stops filling up for people.

@p5pRT
Copy link
Author

p5pRT commented May 30, 2017

From @khwilliamson

Thank you for filing this report. You have helped make Perl better.

With the release today of Perl 5.26.0, this and 210 other issues have been
resolved.

Perl 5.26.0 may be downloaded via​:
https://metacpan.org/release/XSAWYERX/perl-5.26.0

If you find that the problem persists, feel free to reopen this ticket.

@p5pRT
Copy link
Author

p5pRT commented May 30, 2017

@khwilliamson - Status changed from 'pending release' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant