In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/95db2efbae5edc9942892a1153e1db8056d6ca06?hp=9995b99e160dcf6aabd893a490cbc95bc736f00f>

- Log -----------------------------------------------------------------
commit 95db2efbae5edc9942892a1153e1db8056d6ca06
Author: Steve Hay <steve.m....@googlemail.com>
Date:   Tue Oct 3 08:12:02 2017 +0100

    Upgrade Test-Simple from version 1.302096 to 1.302097

M       MANIFEST
M       Porting/Maintainers.pl
M       cpan/Test-Simple/lib/Test/Builder.pm
M       cpan/Test-Simple/lib/Test/Builder/Formatter.pm
M       cpan/Test-Simple/lib/Test/Builder/Module.pm
M       cpan/Test-Simple/lib/Test/Builder/Tester.pm
M       cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
M       cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
M       cpan/Test-Simple/lib/Test/More.pm
M       cpan/Test-Simple/lib/Test/Simple.pm
M       cpan/Test-Simple/lib/Test/Tester.pm
M       cpan/Test-Simple/lib/Test/Tester/Capture.pm
M       cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
M       cpan/Test-Simple/lib/Test/Tester/Delegate.pm
M       cpan/Test-Simple/lib/Test/use/ok.pm
M       cpan/Test-Simple/lib/Test2.pm
M       cpan/Test-Simple/lib/Test2/API.pm
M       cpan/Test-Simple/lib/Test2/API/Breakage.pm
M       cpan/Test-Simple/lib/Test2/API/Context.pm
M       cpan/Test-Simple/lib/Test2/API/Instance.pm
M       cpan/Test-Simple/lib/Test2/API/Stack.pm
M       cpan/Test-Simple/lib/Test2/Event.pm
M       cpan/Test-Simple/lib/Test2/Event/Bail.pm
M       cpan/Test-Simple/lib/Test2/Event/Diag.pm
M       cpan/Test-Simple/lib/Test2/Event/Encoding.pm
M       cpan/Test-Simple/lib/Test2/Event/Exception.pm
M       cpan/Test-Simple/lib/Test2/Event/Fail.pm
M       cpan/Test-Simple/lib/Test2/Event/Generic.pm
M       cpan/Test-Simple/lib/Test2/Event/Note.pm
M       cpan/Test-Simple/lib/Test2/Event/Ok.pm
M       cpan/Test-Simple/lib/Test2/Event/Pass.pm
M       cpan/Test-Simple/lib/Test2/Event/Plan.pm
M       cpan/Test-Simple/lib/Test2/Event/Skip.pm
M       cpan/Test-Simple/lib/Test2/Event/Subtest.pm
M       cpan/Test-Simple/lib/Test2/Event/TAP/Version.pm
M       cpan/Test-Simple/lib/Test2/Event/Waiting.pm
M       cpan/Test-Simple/lib/Test2/EventFacet.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/About.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Amnesty.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Assert.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Control.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Error.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Info.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Meta.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Parent.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Plan.pm
M       cpan/Test-Simple/lib/Test2/EventFacet/Trace.pm
M       cpan/Test-Simple/lib/Test2/Formatter.pm
M       cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
M       cpan/Test-Simple/lib/Test2/Hub.pm
M       cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
M       cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
M       cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
M       cpan/Test-Simple/lib/Test2/IPC.pm
M       cpan/Test-Simple/lib/Test2/IPC/Driver.pm
M       cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
M       cpan/Test-Simple/lib/Test2/Tools/Tiny.pm
M       cpan/Test-Simple/lib/Test2/Util.pm
M       cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
M       cpan/Test-Simple/lib/Test2/Util/Facets2Legacy.pm
M       cpan/Test-Simple/lib/Test2/Util/Trace.pm
M       cpan/Test-Simple/lib/ok.pm
M       cpan/Test-Simple/t/HashBase.t
M       cpan/Test-Simple/t/Legacy/Regression/736_use_ok.t
A       cpan/Test-Simple/t/Legacy/Regression/789-read-only.t
M       cpan/Test-Simple/t/Legacy/harness_active.t
M       cpan/Test-Simple/t/Legacy/overload_threads.t
M       cpan/Test-Simple/t/Legacy/utf8.t
M       cpan/Test-Simple/t/Legacy_And_Test2/preload_diag_note.t
M       cpan/Test-Simple/t/Test2/behavior/init_croak.t
M       cpan/Test-Simple/t/Test2/behavior/nested_context_exception.t
M       cpan/Test-Simple/t/Test2/modules/API.t
M       cpan/Test-Simple/t/Test2/modules/API/Instance.t
M       cpan/Test-Simple/t/Test2/modules/Event/Exception.t
M       cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t
M       cpan/Test-Simple/t/Test2/modules/IPC/Driver.t
M       cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
M       cpan/Test-Simple/t/Test2/modules/Util.t
M       cpan/Test-Simple/t/Test2/regression/gh_16.t
M       cpan/Test-Simple/t/Test2/regression/ipc_files_abort_exit.t
A       cpan/Test-Simple/t/regression/errors_facet.t

commit 07bc328a0524ea51d473545282321341bcd61e03
Author: Steve Hay <steve.m....@googlemail.com>
Date:   Mon Oct 2 14:03:48 2017 +0100

    Upgrade Test-Simple from version 1.302073 to 1.302096
    
    (includes regen/lib_cleanup.pl)

M       MANIFEST
M       Makefile.SH
M       Porting/Maintainers.pl
M       cpan/Test-Simple/lib/Test/Builder.pm
M       cpan/Test-Simple/lib/Test/Builder/Formatter.pm
M       cpan/Test-Simple/lib/Test/Builder/Module.pm
M       cpan/Test-Simple/lib/Test/Builder/Tester.pm
M       cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
M       cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
M       cpan/Test-Simple/lib/Test/More.pm
M       cpan/Test-Simple/lib/Test/Simple.pm
M       cpan/Test-Simple/lib/Test/Tester.pm
M       cpan/Test-Simple/lib/Test/Tester/Capture.pm
M       cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
M       cpan/Test-Simple/lib/Test/Tester/Delegate.pm
M       cpan/Test-Simple/lib/Test/Tutorial.pod
M       cpan/Test-Simple/lib/Test/use/ok.pm
M       cpan/Test-Simple/lib/Test2.pm
M       cpan/Test-Simple/lib/Test2/API.pm
M       cpan/Test-Simple/lib/Test2/API/Breakage.pm
M       cpan/Test-Simple/lib/Test2/API/Context.pm
M       cpan/Test-Simple/lib/Test2/API/Instance.pm
M       cpan/Test-Simple/lib/Test2/API/Stack.pm
M       cpan/Test-Simple/lib/Test2/Event.pm
M       cpan/Test-Simple/lib/Test2/Event/Bail.pm
M       cpan/Test-Simple/lib/Test2/Event/Diag.pm
M       cpan/Test-Simple/lib/Test2/Event/Encoding.pm
M       cpan/Test-Simple/lib/Test2/Event/Exception.pm
A       cpan/Test-Simple/lib/Test2/Event/Fail.pm
M       cpan/Test-Simple/lib/Test2/Event/Generic.pm
D       cpan/Test-Simple/lib/Test2/Event/Info.pm
M       cpan/Test-Simple/lib/Test2/Event/Note.pm
M       cpan/Test-Simple/lib/Test2/Event/Ok.pm
A       cpan/Test-Simple/lib/Test2/Event/Pass.pm
M       cpan/Test-Simple/lib/Test2/Event/Plan.pm
M       cpan/Test-Simple/lib/Test2/Event/Skip.pm
M       cpan/Test-Simple/lib/Test2/Event/Subtest.pm
M       cpan/Test-Simple/lib/Test2/Event/TAP/Version.pm
M       cpan/Test-Simple/lib/Test2/Event/Waiting.pm
A       cpan/Test-Simple/lib/Test2/EventFacet.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/About.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Amnesty.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Assert.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Control.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Error.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Info.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Meta.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Parent.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Plan.pm
A       cpan/Test-Simple/lib/Test2/EventFacet/Trace.pm
M       cpan/Test-Simple/lib/Test2/Formatter.pm
M       cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
M       cpan/Test-Simple/lib/Test2/Hub.pm
M       cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
M       cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
M       cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
M       cpan/Test-Simple/lib/Test2/IPC.pm
M       cpan/Test-Simple/lib/Test2/IPC/Driver.pm
M       cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
M       cpan/Test-Simple/lib/Test2/Tools/Tiny.pm
M       cpan/Test-Simple/lib/Test2/Transition.pod
M       cpan/Test-Simple/lib/Test2/Util.pm
M       cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
A       cpan/Test-Simple/lib/Test2/Util/Facets2Legacy.pm
M       cpan/Test-Simple/lib/Test2/Util/HashBase.pm
M       cpan/Test-Simple/lib/Test2/Util/Trace.pm
M       cpan/Test-Simple/lib/ok.pm
R060    cpan/Test-Simple/t/Test2/modules/Util/HashBase.t        
cpan/Test-Simple/t/HashBase.t
M       cpan/Test-Simple/t/Legacy/Builder/done_testing_double.t
M       cpan/Test-Simple/t/Legacy/Builder/done_testing_plan_mismatch.t
M       cpan/Test-Simple/t/Legacy/Builder/fork_with_new_stdout.t
M       cpan/Test-Simple/t/Legacy/Builder/is_passing.t
M       cpan/Test-Simple/t/Legacy/Builder/no_diag.t
M       cpan/Test-Simple/t/Legacy/Regression/637.t
M       cpan/Test-Simple/t/Legacy/Tester/tbt_08subtest.t
M       cpan/Test-Simple/t/Legacy/Tester/tbt_09do.t
M       cpan/Test-Simple/t/Legacy/bail_out.t
M       cpan/Test-Simple/t/Legacy/c_flag.t
M       cpan/Test-Simple/t/Legacy/died.t
M       cpan/Test-Simple/t/Legacy/extra.t
M       cpan/Test-Simple/t/Legacy/extra_one.t
M       cpan/Test-Simple/t/Legacy/fail-like.t
M       cpan/Test-Simple/t/Legacy/fail-more.t
M       cpan/Test-Simple/t/Legacy/fail.t
M       cpan/Test-Simple/t/Legacy/fail_one.t
M       cpan/Test-Simple/t/Legacy/missing.t
A       cpan/Test-Simple/t/Legacy/no_log_results.t
M       cpan/Test-Simple/t/Legacy/no_plan.t
M       cpan/Test-Simple/t/Legacy/no_tests.t
M       cpan/Test-Simple/t/Legacy/skip.t
M       cpan/Test-Simple/t/Legacy/subtest/bail_out.t
M       cpan/Test-Simple/t/Legacy/subtest/basic.t
M       cpan/Test-Simple/t/Legacy/subtest/do.t
M       cpan/Test-Simple/t/Legacy/subtest/events.t
M       cpan/Test-Simple/t/Legacy/subtest/fork.t
M       cpan/Test-Simple/t/Legacy/undef.t
M       cpan/Test-Simple/t/Legacy/utf8.t
M       cpan/Test-Simple/t/Legacy/versions.t
M       cpan/Test-Simple/t/Legacy_And_Test2/builder_loaded_late.t
A       cpan/Test-Simple/t/Legacy_And_Test2/preload_diag_note.t
M       cpan/Test-Simple/t/Test2/behavior/Subtest_events.t
M       cpan/Test-Simple/t/Test2/behavior/Subtest_todo.t
A       cpan/Test-Simple/t/Test2/behavior/intercept.t
A       cpan/Test-Simple/t/Test2/behavior/ipc_wait_timeout.t
M       cpan/Test-Simple/t/Test2/behavior/no_load_api.t
M       cpan/Test-Simple/t/Test2/behavior/run_subtest_inherit.t
M       cpan/Test-Simple/t/Test2/behavior/special_names.t
A       cpan/Test-Simple/t/Test2/behavior/subtest_bailout.t
A       cpan/Test-Simple/t/Test2/behavior/trace_signature.t
M       cpan/Test-Simple/t/Test2/legacy/TAP.t
M       cpan/Test-Simple/t/Test2/modules/API/Context.t
M       cpan/Test-Simple/t/Test2/modules/API/Instance.t
M       cpan/Test-Simple/t/Test2/modules/Event.t
M       cpan/Test-Simple/t/Test2/modules/Event/Bail.t
M       cpan/Test-Simple/t/Test2/modules/Event/Diag.t
A       cpan/Test-Simple/t/Test2/modules/Event/Encoding.t
M       cpan/Test-Simple/t/Test2/modules/Event/Exception.t
A       cpan/Test-Simple/t/Test2/modules/Event/Fail.t
M       cpan/Test-Simple/t/Test2/modules/Event/Generic.t
D       cpan/Test-Simple/t/Test2/modules/Event/Info.t
M       cpan/Test-Simple/t/Test2/modules/Event/Note.t
M       cpan/Test-Simple/t/Test2/modules/Event/Ok.t
A       cpan/Test-Simple/t/Test2/modules/Event/Pass.t
M       cpan/Test-Simple/t/Test2/modules/Event/Plan.t
M       cpan/Test-Simple/t/Test2/modules/Event/Skip.t
M       cpan/Test-Simple/t/Test2/modules/Event/Subtest.t
A       cpan/Test-Simple/t/Test2/modules/Event/TAP/Version.t
M       cpan/Test-Simple/t/Test2/modules/Event/Waiting.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/About.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Amnesty.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Assert.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Control.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Error.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Info.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Meta.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Parent.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Plan.t
A       cpan/Test-Simple/t/Test2/modules/EventFacet/Trace.t
M       cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t
M       cpan/Test-Simple/t/Test2/modules/Hub.t
M       cpan/Test-Simple/t/Test2/modules/Hub/Subtest.t
M       cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
M       cpan/Test-Simple/t/Test2/modules/Tools/Tiny.t
M       cpan/Test-Simple/t/Test2/modules/Util.t
A       cpan/Test-Simple/t/Test2/modules/Util/Facets2Legacy.t
M       cpan/Test-Simple/t/Test2/modules/Util/Trace.t
A       cpan/Test-Simple/t/Test2/regression/746-forking-subtest.t
M       cpan/Test-Simple/t/lib/Test/Builder/NoOutput.pm
M       cpan/Test-Simple/t/lib/Test/Simple/Catch.pm
M       cpan/Test-Simple/t/regression/696-intercept_skip_all.t
M       cpan/Test-Simple/t/regression/721-nested-streamed-subtest.t
A       cpan/Test-Simple/t/regression/757-reset_in_subtest.t
A       cpan/Test-Simple/t/regression/buffered_subtest_plan_buffered.t
A       cpan/Test-Simple/t/regression/builder_does_not_init.t
M       t/porting/customized.dat
-----------------------------------------------------------------------

Summary of changes:
 MANIFEST                                           |   46 +-
 Makefile.SH                                        |   35 +-
 Porting/Maintainers.pl                             |    7 +-
 cpan/Test-Simple/lib/Test/Builder.pm               |  147 ++-
 cpan/Test-Simple/lib/Test/Builder/Formatter.pm     |   63 +-
 cpan/Test-Simple/lib/Test/Builder/Module.pm        |    4 +-
 cpan/Test-Simple/lib/Test/Builder/Tester.pm        |    4 +-
 cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm  |    2 +-
 cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm      |   11 +-
 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/Tutorial.pod             |    4 +-
 cpan/Test-Simple/lib/Test/use/ok.pm                |    2 +-
 cpan/Test-Simple/lib/Test2.pm                      |    4 +-
 cpan/Test-Simple/lib/Test2/API.pm                  |  214 +++-
 cpan/Test-Simple/lib/Test2/API/Breakage.pm         |   11 +-
 cpan/Test-Simple/lib/Test2/API/Context.pm          |  244 +++-
 cpan/Test-Simple/lib/Test2/API/Instance.pm         |  150 ++-
 cpan/Test-Simple/lib/Test2/API/Stack.pm            |    6 +-
 cpan/Test-Simple/lib/Test2/Event.pm                |  449 ++++++-
 cpan/Test-Simple/lib/Test2/Event/Bail.pm           |   27 +-
 cpan/Test-Simple/lib/Test2/Event/Diag.pm           |   20 +-
 cpan/Test-Simple/lib/Test2/Event/Encoding.pm       |   17 +-
 cpan/Test-Simple/lib/Test2/Event/Exception.pm      |   29 +-
 cpan/Test-Simple/lib/Test2/Event/Fail.pm           |  118 ++
 cpan/Test-Simple/lib/Test2/Event/Generic.pm        |   33 +-
 cpan/Test-Simple/lib/Test2/Event/Info.pm           |  127 --
 cpan/Test-Simple/lib/Test2/Event/Note.pm           |   20 +-
 cpan/Test-Simple/lib/Test2/Event/Ok.pm             |   36 +-
 cpan/Test-Simple/lib/Test2/Event/Pass.pm           |  114 ++
 cpan/Test-Simple/lib/Test2/Event/Plan.pm           |   35 +-
 cpan/Test-Simple/lib/Test2/Event/Skip.pm           |   23 +-
 cpan/Test-Simple/lib/Test2/Event/Subtest.pm        |  105 +-
 cpan/Test-Simple/lib/Test2/Event/TAP/Version.pm    |   24 +-
 cpan/Test-Simple/lib/Test2/Event/Waiting.pm        |   19 +-
 cpan/Test-Simple/lib/Test2/EventFacet.pm           |   93 ++
 .../Test2/{Event/Diag.pm => EventFacet/About.pm}   |   45 +-
 cpan/Test-Simple/lib/Test2/EventFacet/Amnesty.pm   |   91 ++
 cpan/Test-Simple/lib/Test2/EventFacet/Assert.pm    |   93 ++
 cpan/Test-Simple/lib/Test2/EventFacet/Control.pm   |  100 ++
 cpan/Test-Simple/lib/Test2/EventFacet/Error.pm     |   93 ++
 cpan/Test-Simple/lib/Test2/EventFacet/Info.pm      |  102 ++
 cpan/Test-Simple/lib/Test2/EventFacet/Meta.pm      |  104 ++
 cpan/Test-Simple/lib/Test2/EventFacet/Parent.pm    |   98 ++
 cpan/Test-Simple/lib/Test2/EventFacet/Plan.pm      |   94 ++
 .../lib/Test2/{Util => EventFacet}/Trace.pm        |  139 ++-
 cpan/Test-Simple/lib/Test2/Formatter.pm            |   23 +-
 cpan/Test-Simple/lib/Test2/Formatter/TAP.pm        |  569 ++++-----
 cpan/Test-Simple/lib/Test2/Hub.pm                  |  100 +-
 cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm      |   12 +-
 .../lib/Test2/Hub/Interceptor/Terminator.pm        |    4 +-
 cpan/Test-Simple/lib/Test2/Hub/Subtest.pm          |   59 +-
 cpan/Test-Simple/lib/Test2/IPC.pm                  |    4 +-
 cpan/Test-Simple/lib/Test2/IPC/Driver.pm           |    9 +-
 cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm     |   87 +-
 cpan/Test-Simple/lib/Test2/Tools/Tiny.pm           |   90 +-
 cpan/Test-Simple/lib/Test2/Transition.pod          |   18 +-
 cpan/Test-Simple/lib/Test2/Util.pm                 |  167 ++-
 cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm    |    4 +-
 cpan/Test-Simple/lib/Test2/Util/Facets2Legacy.pm   |  114 ++
 cpan/Test-Simple/lib/Test2/Util/HashBase.pm        |  171 ++-
 cpan/Test-Simple/lib/Test2/Util/Trace.pm           |  144 +--
 cpan/Test-Simple/lib/ok.pm                         |    2 +-
 .../t/{Test2/modules/Util => }/HashBase.t          |   85 +-
 .../t/Legacy/Builder/done_testing_double.t         |   16 +-
 .../t/Legacy/Builder/done_testing_plan_mismatch.t  |   15 +-
 .../t/Legacy/Builder/fork_with_new_stdout.t        |   29 +-
 cpan/Test-Simple/t/Legacy/Builder/is_passing.t     |   11 +-
 cpan/Test-Simple/t/Legacy/Builder/no_diag.t        |    7 +-
 cpan/Test-Simple/t/Legacy/Regression/637.t         |    6 +-
 cpan/Test-Simple/t/Legacy/Regression/736_use_ok.t  |   10 +-
 .../t/Legacy/Regression/789-read-only.t            |   37 +
 cpan/Test-Simple/t/Legacy/Tester/tbt_08subtest.t   |    1 +
 cpan/Test-Simple/t/Legacy/Tester/tbt_09do.t        |    1 +
 cpan/Test-Simple/t/Legacy/bail_out.t               |    2 +
 cpan/Test-Simple/t/Legacy/c_flag.t                 |    2 +
 cpan/Test-Simple/t/Legacy/died.t                   |    2 +
 cpan/Test-Simple/t/Legacy/extra.t                  |   19 +-
 cpan/Test-Simple/t/Legacy/extra_one.t              |    2 +
 cpan/Test-Simple/t/Legacy/fail-like.t              |    4 +-
 cpan/Test-Simple/t/Legacy/fail-more.t              |    2 +
 cpan/Test-Simple/t/Legacy/fail.t                   |   19 +-
 cpan/Test-Simple/t/Legacy/fail_one.t               |   11 +-
 cpan/Test-Simple/t/Legacy/harness_active.t         |    2 +
 cpan/Test-Simple/t/Legacy/missing.t                |    2 +
 cpan/Test-Simple/t/Legacy/no_log_results.t         |   19 +
 cpan/Test-Simple/t/Legacy/no_plan.t                |   11 +-
 cpan/Test-Simple/t/Legacy/no_tests.t               |    2 +
 cpan/Test-Simple/t/Legacy/overload_threads.t       |    6 +-
 cpan/Test-Simple/t/Legacy/skip.t                   |    2 +-
 cpan/Test-Simple/t/Legacy/subtest/bail_out.t       |   10 +-
 cpan/Test-Simple/t/Legacy/subtest/basic.t          |   88 +-
 cpan/Test-Simple/t/Legacy/subtest/do.t             |    2 +-
 cpan/Test-Simple/t/Legacy/subtest/events.t         |    2 +-
 cpan/Test-Simple/t/Legacy/subtest/fork.t           |    5 +
 cpan/Test-Simple/t/Legacy/undef.t                  |   17 +-
 cpan/Test-Simple/t/Legacy/utf8.t                   |    8 +-
 cpan/Test-Simple/t/Legacy/versions.t               |    1 +
 .../t/Legacy_And_Test2/builder_loaded_late.t       |   15 +-
 .../t/Legacy_And_Test2/preload_diag_note.t         |   42 +
 cpan/Test-Simple/t/Test2/behavior/Subtest_events.t |    4 +-
 cpan/Test-Simple/t/Test2/behavior/Subtest_todo.t   |   32 +-
 cpan/Test-Simple/t/Test2/behavior/init_croak.t     |    2 +
 cpan/Test-Simple/t/Test2/behavior/intercept.t      |   40 +
 .../t/Test2/behavior/ipc_wait_timeout.t            |   73 ++
 .../t/Test2/behavior/nested_context_exception.t    |    2 +
 cpan/Test-Simple/t/Test2/behavior/no_load_api.t    |    7 +-
 .../t/Test2/behavior/run_subtest_inherit.t         |   12 +-
 cpan/Test-Simple/t/Test2/behavior/special_names.t  |    2 +
 .../Test-Simple/t/Test2/behavior/subtest_bailout.t |   39 +
 .../Test-Simple/t/Test2/behavior/trace_signature.t |   44 +
 cpan/Test-Simple/t/Test2/legacy/TAP.t              |    4 +-
 cpan/Test-Simple/t/Test2/modules/API.t             |    7 +
 cpan/Test-Simple/t/Test2/modules/API/Context.t     |   24 +-
 cpan/Test-Simple/t/Test2/modules/API/Instance.t    |   23 +-
 cpan/Test-Simple/t/Test2/modules/Event.t           |  635 +++++++++-
 cpan/Test-Simple/t/Test2/modules/Event/Bail.t      |   61 +-
 cpan/Test-Simple/t/Test2/modules/Event/Diag.t      |   27 +-
 cpan/Test-Simple/t/Test2/modules/Event/Encoding.t  |   28 +
 cpan/Test-Simple/t/Test2/modules/Event/Exception.t |   40 +-
 cpan/Test-Simple/t/Test2/modules/Event/Fail.t      |   38 +
 cpan/Test-Simple/t/Test2/modules/Event/Generic.t   |    2 +-
 cpan/Test-Simple/t/Test2/modules/Event/Info.t      |   51 -
 cpan/Test-Simple/t/Test2/modules/Event/Note.t      |   28 +-
 cpan/Test-Simple/t/Test2/modules/Event/Ok.t        |   85 +-
 cpan/Test-Simple/t/Test2/modules/Event/Pass.t      |   37 +
 cpan/Test-Simple/t/Test2/modules/Event/Plan.t      |   87 +-
 cpan/Test-Simple/t/Test2/modules/Event/Skip.t      |   18 +-
 cpan/Test-Simple/t/Test2/modules/Event/Subtest.t   |   29 +-
 .../t/Test2/modules/Event/TAP/Version.t            |   28 +
 cpan/Test-Simple/t/Test2/modules/Event/Waiting.t   |   17 +-
 cpan/Test-Simple/t/Test2/modules/EventFacet.t      |   24 +
 .../Test-Simple/t/Test2/modules/EventFacet/About.t |   21 +
 .../t/Test2/modules/EventFacet/Amnesty.t           |   21 +
 .../t/Test2/modules/EventFacet/Assert.t            |   21 +
 .../t/Test2/modules/EventFacet/Control.t           |   24 +
 .../Test-Simple/t/Test2/modules/EventFacet/Error.t |   21 +
 cpan/Test-Simple/t/Test2/modules/EventFacet/Info.t |   21 +
 cpan/Test-Simple/t/Test2/modules/EventFacet/Meta.t |   25 +
 .../t/Test2/modules/EventFacet/Parent.t            |   22 +
 cpan/Test-Simple/t/Test2/modules/EventFacet/Plan.t |   22 +
 .../t/Test2/modules/{Util => EventFacet}/Trace.t   |   11 +-
 cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t   | 1293 +++++++++++++-------
 cpan/Test-Simple/t/Test2/modules/Hub.t             |   26 +-
 cpan/Test-Simple/t/Test2/modules/Hub/Subtest.t     |    9 +-
 cpan/Test-Simple/t/Test2/modules/IPC/Driver.t      |    3 +
 .../Test-Simple/t/Test2/modules/IPC/Driver/Files.t |    7 +-
 cpan/Test-Simple/t/Test2/modules/Tools/Tiny.t      |   32 +-
 cpan/Test-Simple/t/Test2/modules/Util.t            |   35 +
 .../t/Test2/modules/Util/Facets2Legacy.t           |  144 +++
 cpan/Test-Simple/t/Test2/modules/Util/Trace.t      |    6 +-
 .../t/Test2/regression/746-forking-subtest.t       |   37 +
 cpan/Test-Simple/t/Test2/regression/gh_16.t        |    2 +-
 .../t/Test2/regression/ipc_files_abort_exit.t      |    1 +
 cpan/Test-Simple/t/lib/Test/Builder/NoOutput.pm    |    3 +
 cpan/Test-Simple/t/lib/Test/Simple/Catch.pm        |    2 +
 .../t/regression/696-intercept_skip_all.t          |    2 +-
 .../t/regression/721-nested-streamed-subtest.t     |  151 +--
 .../t/regression/757-reset_in_subtest.t            |   20 +
 .../t/regression/buffered_subtest_plan_buffered.t  |   39 +
 .../t/regression/builder_does_not_init.t           |   18 +
 cpan/Test-Simple/t/regression/errors_facet.t       |   53 +
 t/porting/customized.dat                           |    1 -
 167 files changed, 6898 insertions(+), 2051 deletions(-)
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Fail.pm
 delete mode 100644 cpan/Test-Simple/lib/Test2/Event/Info.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Pass.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet.pm
 copy cpan/Test-Simple/lib/Test2/{Event/Diag.pm => EventFacet/About.pm} (50%)
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet/Amnesty.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet/Assert.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet/Control.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet/Error.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet/Info.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet/Meta.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet/Parent.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/EventFacet/Plan.pm
 copy cpan/Test-Simple/lib/Test2/{Util => EventFacet}/Trace.pm (52%)
 create mode 100644 cpan/Test-Simple/lib/Test2/Util/Facets2Legacy.pm
 rename cpan/Test-Simple/t/{Test2/modules/Util => }/HashBase.t (60%)
 create mode 100644 cpan/Test-Simple/t/Legacy/Regression/789-read-only.t
 create mode 100644 cpan/Test-Simple/t/Legacy/no_log_results.t
 create mode 100644 cpan/Test-Simple/t/Legacy_And_Test2/preload_diag_note.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/intercept.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/ipc_wait_timeout.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/subtest_bailout.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/trace_signature.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Encoding.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Fail.t
 delete mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Info.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Pass.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/TAP/Version.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/About.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/Amnesty.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/Assert.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/Control.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/Error.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/Info.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/Meta.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/Parent.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/EventFacet/Plan.t
 copy cpan/Test-Simple/t/Test2/modules/{Util => EventFacet}/Trace.t (78%)
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Util/Facets2Legacy.t
 create mode 100644 cpan/Test-Simple/t/Test2/regression/746-forking-subtest.t
 create mode 100644 cpan/Test-Simple/t/regression/757-reset_in_subtest.t
 create mode 100644 
cpan/Test-Simple/t/regression/buffered_subtest_plan_buffered.t
 create mode 100644 cpan/Test-Simple/t/regression/builder_does_not_init.t
 create mode 100644 cpan/Test-Simple/t/regression/errors_facet.t

diff --git a/MANIFEST b/MANIFEST
index e0997b0dd6..1d442a1673 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -2640,15 +2640,27 @@ cpan/Test-Simple/lib/Test2/Event/Bail.pm
 cpan/Test-Simple/lib/Test2/Event/Diag.pm
 cpan/Test-Simple/lib/Test2/Event/Encoding.pm
 cpan/Test-Simple/lib/Test2/Event/Exception.pm
+cpan/Test-Simple/lib/Test2/Event/Fail.pm
 cpan/Test-Simple/lib/Test2/Event/Generic.pm
-cpan/Test-Simple/lib/Test2/Event/Info.pm
 cpan/Test-Simple/lib/Test2/Event/Note.pm
 cpan/Test-Simple/lib/Test2/Event/Ok.pm
+cpan/Test-Simple/lib/Test2/Event/Pass.pm
 cpan/Test-Simple/lib/Test2/Event/Plan.pm
 cpan/Test-Simple/lib/Test2/Event/Skip.pm
 cpan/Test-Simple/lib/Test2/Event/Subtest.pm
 cpan/Test-Simple/lib/Test2/Event/TAP/Version.pm
 cpan/Test-Simple/lib/Test2/Event/Waiting.pm
+cpan/Test-Simple/lib/Test2/EventFacet.pm
+cpan/Test-Simple/lib/Test2/EventFacet/About.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Amnesty.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Assert.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Control.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Error.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Info.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Meta.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Parent.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Plan.pm
+cpan/Test-Simple/lib/Test2/EventFacet/Trace.pm
 cpan/Test-Simple/lib/Test2/Formatter.pm
 cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
 cpan/Test-Simple/lib/Test2/Hub.pm
@@ -2662,8 +2674,10 @@ cpan/Test-Simple/lib/Test2/Tools/Tiny.pm
 cpan/Test-Simple/lib/Test2/Transition.pod
 cpan/Test-Simple/lib/Test2/Util.pm
 cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
+cpan/Test-Simple/lib/Test2/Util/Facets2Legacy.pm
 cpan/Test-Simple/lib/Test2/Util/HashBase.pm
 cpan/Test-Simple/lib/Test2/Util/Trace.pm
+cpan/Test-Simple/t/HashBase.t
 cpan/Test-Simple/t/Legacy/00test_harness_check.t
 cpan/Test-Simple/t/Legacy/01-basic.t
 cpan/Test-Simple/t/Legacy/478-cmp_ok_hash.t
@@ -2731,6 +2745,7 @@ cpan/Test-Simple/t/Legacy/is_deeply_with_threads.t
 cpan/Test-Simple/t/Legacy/missing.t
 cpan/Test-Simple/t/Legacy/More.t
 cpan/Test-Simple/t/Legacy/new_ok.t
+cpan/Test-Simple/t/Legacy/no_log_results.t
 cpan/Test-Simple/t/Legacy/no_plan.t
 cpan/Test-Simple/t/Legacy/no_tests.t
 cpan/Test-Simple/t/Legacy/note.t
@@ -2746,6 +2761,7 @@ cpan/Test-Simple/t/Legacy/Regression/637.t
 cpan/Test-Simple/t/Legacy/Regression/683_thread_todo.t
 cpan/Test-Simple/t/Legacy/Regression/6_cmp_ok.t
 cpan/Test-Simple/t/Legacy/Regression/736_use_ok.t
+cpan/Test-Simple/t/Legacy/Regression/789-read-only.t
 cpan/Test-Simple/t/Legacy/require_ok.t
 cpan/Test-Simple/t/Legacy/run_test.t
 cpan/Test-Simple/t/Legacy/simple.t
@@ -2791,6 +2807,7 @@ cpan/Test-Simple/t/Legacy/utf8.t
 cpan/Test-Simple/t/Legacy/versions.t
 cpan/Test-Simple/t/Legacy_And_Test2/builder_loaded_late.t
 cpan/Test-Simple/t/Legacy_And_Test2/hidden_warnings.t
+cpan/Test-Simple/t/Legacy_And_Test2/preload_diag_note.t
 cpan/Test-Simple/t/lib/Dev/Null.pm
 cpan/Test-Simple/t/lib/Dummy.pm
 cpan/Test-Simple/t/lib/MyOverload.pm
@@ -2824,6 +2841,10 @@ cpan/Test-Simple/t/regression/684-nested_todo_diag.t
 cpan/Test-Simple/t/regression/694_note_diag_return_values.t
 cpan/Test-Simple/t/regression/696-intercept_skip_all.t
 cpan/Test-Simple/t/regression/721-nested-streamed-subtest.t
+cpan/Test-Simple/t/regression/757-reset_in_subtest.t
+cpan/Test-Simple/t/regression/buffered_subtest_plan_buffered.t
+cpan/Test-Simple/t/regression/builder_does_not_init.t
+cpan/Test-Simple/t/regression/errors_facet.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
@@ -2835,15 +2856,19 @@ cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t
 cpan/Test-Simple/t/Test2/behavior/err_var.t
 cpan/Test-Simple/t/Test2/behavior/Formatter.t
 cpan/Test-Simple/t/Test2/behavior/init_croak.t
+cpan/Test-Simple/t/Test2/behavior/intercept.t
+cpan/Test-Simple/t/Test2/behavior/ipc_wait_timeout.t
 cpan/Test-Simple/t/Test2/behavior/nested_context_exception.t
 cpan/Test-Simple/t/Test2/behavior/no_load_api.t
 cpan/Test-Simple/t/Test2/behavior/run_subtest_inherit.t
 cpan/Test-Simple/t/Test2/behavior/special_names.t
+cpan/Test-Simple/t/Test2/behavior/subtest_bailout.t
 cpan/Test-Simple/t/Test2/behavior/Subtest_buffer_formatter.t
 cpan/Test-Simple/t/Test2/behavior/Subtest_events.t
 cpan/Test-Simple/t/Test2/behavior/Subtest_plan.t
 cpan/Test-Simple/t/Test2/behavior/Subtest_todo.t
 cpan/Test-Simple/t/Test2/behavior/Taint.t
+cpan/Test-Simple/t/Test2/behavior/trace_signature.t
 cpan/Test-Simple/t/Test2/legacy/TAP.t
 cpan/Test-Simple/t/Test2/modules/API.t
 cpan/Test-Simple/t/Test2/modules/API/Breakage.t
@@ -2853,15 +2878,29 @@ cpan/Test-Simple/t/Test2/modules/API/Stack.t
 cpan/Test-Simple/t/Test2/modules/Event.t
 cpan/Test-Simple/t/Test2/modules/Event/Bail.t
 cpan/Test-Simple/t/Test2/modules/Event/Diag.t
+cpan/Test-Simple/t/Test2/modules/Event/Encoding.t
 cpan/Test-Simple/t/Test2/modules/Event/Exception.t
+cpan/Test-Simple/t/Test2/modules/Event/Fail.t
 cpan/Test-Simple/t/Test2/modules/Event/Generic.t
-cpan/Test-Simple/t/Test2/modules/Event/Info.t
 cpan/Test-Simple/t/Test2/modules/Event/Note.t
 cpan/Test-Simple/t/Test2/modules/Event/Ok.t
+cpan/Test-Simple/t/Test2/modules/Event/Pass.t
 cpan/Test-Simple/t/Test2/modules/Event/Plan.t
 cpan/Test-Simple/t/Test2/modules/Event/Skip.t
 cpan/Test-Simple/t/Test2/modules/Event/Subtest.t
+cpan/Test-Simple/t/Test2/modules/Event/TAP/Version.t
 cpan/Test-Simple/t/Test2/modules/Event/Waiting.t
+cpan/Test-Simple/t/Test2/modules/EventFacet.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/About.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Amnesty.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Assert.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Control.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Error.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Info.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Meta.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Parent.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Plan.t
+cpan/Test-Simple/t/Test2/modules/EventFacet/Trace.t
 cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t
 cpan/Test-Simple/t/Test2/modules/Hub.t
 cpan/Test-Simple/t/Test2/modules/Hub/Interceptor.t
@@ -2873,9 +2912,10 @@ cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
 cpan/Test-Simple/t/Test2/modules/Tools/Tiny.t
 cpan/Test-Simple/t/Test2/modules/Util.t
 cpan/Test-Simple/t/Test2/modules/Util/ExternalMeta.t
-cpan/Test-Simple/t/Test2/modules/Util/HashBase.t
+cpan/Test-Simple/t/Test2/modules/Util/Facets2Legacy.t
 cpan/Test-Simple/t/Test2/modules/Util/Trace.t
 cpan/Test-Simple/t/Test2/regression/693_ipc_ordering.t
+cpan/Test-Simple/t/Test2/regression/746-forking-subtest.t
 cpan/Test-Simple/t/Test2/regression/gh_16.t
 cpan/Test-Simple/t/Test2/regression/ipc_files_abort_exit.t
 cpan/Text-Balanced/lib/Text/Balanced.pm        Text::Balanced
diff --git a/Makefile.SH b/Makefile.SH
index 730dcca9e1..37f58a92ce 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -1412,23 +1412,24 @@ _cleaner2:
        -rmdir lib/Unicode/Collate/CJK lib/Unicode/Collate lib/Tie/Hash
        -rmdir lib/Thread lib/Text lib/Test2/Util lib/Test2/Tools
        -rmdir lib/Test2/IPC/Driver lib/Test2/IPC lib/Test2/Hub/Interceptor
-       -rmdir lib/Test2/Hub lib/Test2/Formatter lib/Test2/Event/TAP
-       -rmdir lib/Test2/Event lib/Test2/API lib/Test2 lib/Test/use
-       -rmdir lib/Test/Tester lib/Test/Builder/Tester lib/Test/Builder/IO
-       -rmdir lib/Test/Builder lib/Test lib/Term lib/TAP/Parser/YAMLish
-       -rmdir lib/TAP/Parser/SourceHandler lib/TAP/Parser/Scheduler
-       -rmdir lib/TAP/Parser/Result lib/TAP/Parser/Iterator lib/TAP/Parser
-       -rmdir lib/TAP/Harness lib/TAP/Formatter/File
-       -rmdir lib/TAP/Formatter/Console lib/TAP/Formatter lib/TAP
-       -rmdir lib/Sys/Syslog lib/Sys lib/Sub lib/Search lib/Scalar
-       -rmdir lib/Pod/Text lib/Pod/Simple lib/Pod/Perldoc lib/PerlIO/via
-       -rmdir lib/PerlIO lib/Perl lib/Parse/CPAN lib/Parse lib/Params
-       -rmdir lib/Net/FTP lib/Module/Load lib/Module/CoreList lib/Module
-       -rmdir lib/Memoize lib/Math/BigInt lib/Math/BigFloat lib/Math lib/MIME
-       -rmdir lib/Locale/Maketext lib/Locale/Codes lib/Locale lib/List/Util
-       -rmdir lib/List lib/JSON/PP lib/JSON lib/IPC lib/IO/Uncompress/Adapter
-       -rmdir lib/IO/Uncompress lib/IO/Socket lib/IO/Compress/Zlib
-       -rmdir lib/IO/Compress/Zip lib/IO/Compress/Gzip lib/IO/Compress/Base
+       -rmdir lib/Test2/Hub lib/Test2/Formatter lib/Test2/EventFacet
+       -rmdir lib/Test2/Event/TAP lib/Test2/Event lib/Test2/API lib/Test2
+       -rmdir lib/Test/use lib/Test/Tester lib/Test/Builder/Tester
+       -rmdir lib/Test/Builder/IO lib/Test/Builder lib/Test lib/Term
+       -rmdir lib/TAP/Parser/YAMLish lib/TAP/Parser/SourceHandler
+       -rmdir lib/TAP/Parser/Scheduler lib/TAP/Parser/Result
+       -rmdir lib/TAP/Parser/Iterator lib/TAP/Parser lib/TAP/Harness
+       -rmdir lib/TAP/Formatter/File lib/TAP/Formatter/Console
+       -rmdir lib/TAP/Formatter lib/TAP lib/Sys/Syslog lib/Sys lib/Sub
+       -rmdir lib/Search lib/Scalar lib/Pod/Text lib/Pod/Simple
+       -rmdir lib/Pod/Perldoc lib/PerlIO/via lib/PerlIO lib/Perl
+       -rmdir lib/Parse/CPAN lib/Parse lib/Params lib/Net/FTP lib/Module/Load
+       -rmdir lib/Module/CoreList lib/Module lib/Memoize lib/Math/BigInt
+       -rmdir lib/Math/BigFloat lib/Math lib/MIME lib/Locale/Maketext
+       -rmdir lib/Locale/Codes lib/Locale lib/List/Util lib/List lib/JSON/PP
+       -rmdir lib/JSON lib/IPC lib/IO/Uncompress/Adapter lib/IO/Uncompress
+       -rmdir lib/IO/Socket lib/IO/Compress/Zlib lib/IO/Compress/Zip
+       -rmdir lib/IO/Compress/Gzip lib/IO/Compress/Base
        -rmdir lib/IO/Compress/Adapter lib/IO/Compress lib/IO
        -rmdir lib/I18N/LangTags lib/I18N lib/Hash/Util lib/Hash lib/HTTP
        -rmdir lib/Filter/Util lib/Filter lib/File/Spec lib/ExtUtils/Typemaps
diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl
index 4dd14a7087..8ad3b5c205 100755
--- a/Porting/Maintainers.pl
+++ b/Porting/Maintainers.pl
@@ -1059,22 +1059,17 @@ use File::Glob qw(:case);
     },
 
     'Test::Simple' => {
-        'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302073.tar.gz',
+        'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302097.tar.gz',
         'FILES'        => q[cpan/Test-Simple],
         'EXCLUDED'     => [
             qr{^examples/},
             qr{^xt/},
             qw( appveyor.yml
-                perltidyrc
                 t/00compile.t
                 t/00-report.t
                 t/zzz-check-breaks.t
                 ),
         ],
-        'CUSTOMIZED'   => [
-            #
-            qw( t/Test2/modules/IPC/Driver/Files.t )
-        ],
     },
 
     'Text::Abbrev' => {
diff --git a/cpan/Test-Simple/lib/Test/Builder.pm 
b/cpan/Test-Simple/lib/Test/Builder.pm
index 052e2793b9..48cc04293e 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.302073';
+our $VERSION = '1.302097';
 
 BEGIN {
     if( $] < 5.008 ) {
@@ -42,6 +42,7 @@ our $Test = $ENV{TB_NO_EARLY_INIT} ? undef : 
Test::Builder->new;
 
 sub _add_ts_hooks {
     my $self = shift;
+
     my $hub = $self->{Stack}->top;
 
     # Take a reference to the hash key, we do this to avoid closing over $self
@@ -84,12 +85,26 @@ sub _add_ts_hooks {
     }, inherit => 1);
 }
 
+{
+    no warnings;
+    INIT {
+        use warnings;
+        Test2::API::test2_load() unless Test2::API::test2_in_preload();
+    }
+}
+
 sub new {
     my($class) = shift;
     unless($Test) {
-        my $ctx = context();
         $Test = $class->create(singleton => 1);
-        $ctx->release;
+
+        Test2::API::test2_add_callback_post_load(
+            sub {
+                $Test->{Original_Pid} = $$ if !$Test->{Original_Pid} || 
$Test->{Original_Pid} == 0;
+                $Test->reset(singleton => 1);
+                $Test->_add_ts_hooks;
+            }
+        );
 
         # Non-TB tools normally expect 0 added to the level. $Level is 
normally 1. So
         # we only want the level to change if $Level != 1.
@@ -117,9 +132,10 @@ sub create {
             formatter => Test::Builder::Formatter->new,
             ipc       => Test2::API::test2_ipc(),
         );
+
+        $self->reset(%params);
+        $self->_add_ts_hooks;
     }
-    $self->reset(%params);
-    $self->_add_ts_hooks;
 
     return $self;
 }
@@ -143,7 +159,8 @@ sub parent {
     my $chub = $self->{Hub} || $ctx->hub;
     $ctx->release;
 
-    my $parent = $chub->meta(__PACKAGE__, {})->{parent};
+    my $meta = $chub->meta(__PACKAGE__, {});
+    my $parent = $meta->{parent};
 
     return undef unless $parent;
 
@@ -187,7 +204,7 @@ sub child {
 
     $hub->listen(sub { push @$subevents => $_[1] });
 
-    $hub->set_nested( $parent->isa('Test2::Hub::Subtest') ? $parent->nested + 
1 : 1 );
+    $hub->set_nested( $parent->nested + 1 );
 
     my $meta = $hub->meta(__PACKAGE__, {});
     $meta->{Name} = $name;
@@ -202,7 +219,7 @@ sub child {
     $self->_add_ts_hooks;
 
     $ctx->release;
-    return bless { Original_Pid => $$, Stack => $self->{Stack}, Hub => $hub }, 
blessed($self);
+    return bless { Original_Pid => $$, Stack => $self->{Stack}, Hub => $hub, 
no_log_results => $self->{no_log_results} }, blessed($self);
 }
 
 sub finalize {
@@ -229,7 +246,7 @@ sub finalize {
     my $trace = $ctx->trace;
     delete $ctx->hub->meta(__PACKAGE__, {})->{child};
 
-    $chub->finalize($trace, 1)
+    $chub->finalize($trace->snapshot(hid => $chub->hid, nested => 
$chub->nested), 1)
         if $ok
         && $chub->count
         && !$chub->no_ending
@@ -319,7 +336,7 @@ sub subtest {
         }
     }
 
-    if ($start_pid != $$ && !$INC{'Test/Sync/IPC.pm'}) {
+    if ($start_pid != $$ && !$INC{'Test2/IPC.pm'}) {
         warn $ok ? "Forked inside subtest, but subtest never finished!\n" : 
$err;
         exit 255;
     }
@@ -372,15 +389,21 @@ sub reset {    ## no critic 
(Subroutines::ProhibitBuiltinHomonyms)
     # hash keys is just asking for pain.  Also, it was documented.
     $Level = 1;
 
-    $self->{Original_Pid} = $$;
+    $self->{no_log_results} = $ENV{TEST_NO_LOG_RESULTS} ? 1 : 0
+        unless $params{singleton};
+
+    $self->{Original_Pid} = Test2::API::test2_in_preload() ? -1 : $$;
 
     my $ctx = $self->ctx;
+    my $hub = $ctx->hub;
+    $ctx->release;
     unless ($params{singleton}) {
-        $ctx->hub->reset_state();
-        $ctx->hub->set_pid($$);
-        $ctx->hub->set_tid(get_tid);
+        $hub->reset_state();
+        $hub->_tb_reset();
     }
 
+    $ctx = $self->ctx;
+
     my $meta = $ctx->hub->meta(__PACKAGE__, {});
     %$meta = (
         Name         => $0,
@@ -388,9 +411,10 @@ sub reset {    ## no critic 
(Subroutines::ProhibitBuiltinHomonyms)
         Done_Testing => undef,
         Skip_All     => 0,
         Test_Results => [],
+        parent       => $meta->{parent},
     );
 
-    $self->{Exported_To} = undef;
+    $self->{Exported_To} = undef unless $params{singleton};
 
     $self->{Orig_Handles} ||= do {
         my $format = $ctx->hub->format;
@@ -402,8 +426,8 @@ sub reset {    ## no critic 
(Subroutines::ProhibitBuiltinHomonyms)
     };
 
     $self->use_numbers(1);
-    $self->no_header(0);
-    $self->no_ending(0);
+    $self->no_header(0) unless $params{singleton};
+    $self->no_ending(0) unless $params{singleton};
     $self->reset_outputs;
 
     $ctx->release;
@@ -629,7 +653,7 @@ sub ok {
         (name => defined($name) ? $name : ''),
     };
 
-    $hub->{_meta}->{+__PACKAGE__}->{Test_Results}[ $hub->{count} ] = $result;
+    $hub->{_meta}->{+__PACKAGE__}->{Test_Results}[ $hub->{count} ] = $result 
unless $self->{no_log_results};
 
     my $orig_name = $name;
 
@@ -644,7 +668,7 @@ sub ok {
     }
 
     my $e = bless {
-        trace => bless( {%$trace}, 'Test2::Util::Trace'),
+        trace => bless( {%$trace}, 'Test2::EventFacet::Trace'),
         pass  => $test,
         name  => $name,
         _meta => {'Test::Builder' => $result},
@@ -667,9 +691,6 @@ sub _ok_debug {
 
     my $msg = $is_todo ? "Failed (TODO)" : "Failed";
 
-    my $dfh = $self->_diag_fh;
-    print $dfh "\n" if $ENV{HARNESS_ACTIVE} && $dfh;
-
     my (undef, $file, $line) = $trace->call;
     if (defined $orig_name) {
         $self->diag(qq[  $msg test '$orig_name'\n]);
@@ -1004,7 +1025,7 @@ sub skip {
         name      => $name,
         type      => 'skip',
         reason    => $why,
-    };
+    } unless $self->{no_log_results};
 
     $name =~ s|#|\\#|g;    # # in a name can confuse Test::Harness.
     $name =~ s{\n}{\n# }sg;
@@ -1029,7 +1050,7 @@ sub todo_skip {
         name      => '',
         type      => 'todo_skip',
         reason    => $why,
-    };
+    } unless $self->{no_log_results};
 
     $why =~ s{\n}{\n# }sg;
     my $tctx = $ctx->snapshot;
@@ -1196,8 +1217,17 @@ sub diag {
     my $self = shift;
     return unless @_;
 
+    my $text = join '' => map {defined($_) ? $_ : 'undef'} @_;
+
+    if (Test2::API::test2_in_preload()) {
+        chomp($text);
+        $text =~ s/^/# /msg;
+        print STDERR $text, "\n";
+        return 0;
+    }
+
     my $ctx = $self->ctx;
-    $ctx->diag(join '' => map {defined($_) ? $_ : 'undef'} @_);
+    $ctx->diag($text);
     $ctx->release;
     return 0;
 }
@@ -1207,8 +1237,17 @@ sub note {
     my $self = shift;
     return unless @_;
 
+    my $text = join '' => map {defined($_) ? $_ : 'undef'} @_;
+
+    if (Test2::API::test2_in_preload()) {
+        chomp($text);
+        $text =~ s/^/# /msg;
+        print STDOUT $text, "\n";
+        return 0;
+    }
+
     my $ctx = $self->ctx;
-    $ctx->note(join '' => map {defined($_) ? $_ : 'undef'} @_);
+    $ctx->note($text);
     $ctx->release;
     return 0;
 }
@@ -1351,23 +1390,25 @@ sub current_test {
     if( defined $num ) {
         $hub->set_count($num);
 
-        # If the test counter is being pushed forward fill in the details.
-        my $test_results = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results};
-        if( $num > @$test_results ) {
-            my $start = @$test_results ? @$test_results : 0;
-            for( $start .. $num - 1 ) {
-                $test_results->[$_] = {
-                    'ok'      => 1,
-                    actual_ok => undef,
-                    reason    => 'incrementing test number',
-                    type      => 'unknown',
-                    name      => undef
-                };
+        unless ($self->{no_log_results}) {
+            # If the test counter is being pushed forward fill in the details.
+            my $test_results = $ctx->hub->meta(__PACKAGE__, 
{})->{Test_Results};
+            if ($num > @$test_results) {
+                my $start = @$test_results ? @$test_results : 0;
+                for ($start .. $num - 1) {
+                    $test_results->[$_] = {
+                        'ok'      => 1,
+                        actual_ok => undef,
+                        reason    => 'incrementing test number',
+                        type      => 'unknown',
+                        name      => undef
+                    };
+                }
+            }
+            # If backward, wipe history.  Its their funeral.
+            elsif ($num < @$test_results) {
+                $#{$test_results} = $num - 1;
             }
-        }
-        # If backward, wipe history.  Its their funeral.
-        elsif( $num < @$test_results ) {
-            $#{$test_results} = $num - 1;
         }
     }
     return release $ctx, $hub->count;
@@ -1393,15 +1434,20 @@ sub is_passing {
 sub summary {
     my($self) = shift;
 
+    return if $self->{no_log_results};
+
     my $ctx = $self->ctx;
     my $data = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results};
     $ctx->release;
-    return map { $_->{'ok'} } @$data;
+    return map { $_ ? $_->{'ok'} : () } @$data;
 }
 
 
 sub details {
     my $self = shift;
+
+    return if $self->{no_log_results};
+
     my $ctx = $self->ctx;
     my $data = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results};
     $ctx->release;
@@ -1702,12 +1748,15 @@ sub coordinate_forks {
     }
     Test2::IPC->import;
     Test2::API::test2_ipc_enable_polling();
+    Test2::API::test2_load();
     my $ipc = Test2::IPC::apply_ipc($self->{Stack});
     $ipc->set_no_fatal(1);
     Test2::API::test2_no_wait(1);
     Test2::API::test2_ipc_enable_shm();
 }
 
+sub no_log_results { $_[0]->{no_log_results} = 1 }
+
 1;
 
 __END__
@@ -2082,7 +2131,7 @@ test failed.
 
 Defaults to 1.
 
-Setting L<$Test::Builder::Level> overrides.  This is typically useful
+Setting C<$Test::Builder::Level> overrides.  This is typically useful
 localized:
 
     sub my_ok {
@@ -2251,6 +2300,16 @@ point where the original test function was called (C<< 
$tb->caller >>).
 
 =over 4
 
+=item B<no_log_results>
+
+This will turn off result long-term storage. Calling this method will make
+C<details> and C<summary> useless. You may want to use this if you are running
+enough tests to fill up all available memory.
+
+    Test::Builder->new->no_log_results();
+
+There is no way to turn it back on.
+
 =item B<current_test>
 
     my $curr_test = $Test->current_test;
diff --git a/cpan/Test-Simple/lib/Test/Builder/Formatter.pm 
b/cpan/Test-Simple/lib/Test/Builder/Formatter.pm
index 96571c6005..6b41d7d6b9 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.302073';
+our $VERSION = '1.302097';
 
 BEGIN { require Test2::Formatter::TAP; our @ISA = qw(Test2::Formatter::TAP) }
 
@@ -16,43 +16,42 @@ BEGIN {
     *OUT_TODO = sub() { $todo };
 }
 
-__PACKAGE__->register_event('Test::Builder::TodoDiag', 'event_todo_diag');
-
 sub init {
     my $self = shift;
     $self->SUPER::init(@_);
     $self->{+HANDLES}->[OUT_TODO] = $self->{+HANDLES}->[OUT_STD];
 }
 
-sub event_todo_diag {
-    my $self = shift;
-    my @out = $self->event_diag(@_);
-    $out[0]->[0] = OUT_TODO();
-    return @out;
+sub plan_tap {
+    my ($self, $f) = @_;
+
+    return if $self->{+NO_HEADER};
+    return $self->SUPER::plan_tap($f);
 }
 
-sub event_diag {
-    my $self = shift;
+sub debug_tap {
+    my ($self, $f, $num) = @_;
     return if $self->{+NO_DIAG};
-    return $self->SUPER::event_diag(@_);
+    my @out = $self->SUPER::debug_tap($f, $num);
+    $self->redirect(\@out) if @out && $f->{about}->{package} eq 
'Test::Builder::TodoDiag';
+    return @out;
 }
 
-sub event_plan {
-    my $self = shift;
-    return if $self->{+NO_HEADER};
-    return $self->SUPER::event_plan(@_);
+sub info_tap {
+    my ($self, $f) = @_;
+    return if $self->{+NO_DIAG};
+    my @out = $self->SUPER::info_tap($f);
+    $self->redirect(\@out) if @out && $f->{about}->{package} eq 
'Test::Builder::TodoDiag';
+    return @out;
 }
 
-sub event_ok_multiline {
-    my $self = shift;
-    my ($out, $space, @extra) = @_;
-
-    return(
-        [OUT_STD, "$out\n"],
-        map {[OUT_STD, "# $_\n"]} @extra,
-    );
+sub redirect {
+    my ($self, $out) = @_;
+    $_->[0] = OUT_TODO for @$out;
 }
 
+sub no_subtest_space { 1 }
+
 1;
 
 __END__
@@ -73,22 +72,6 @@ This is what takes events and turns them into TAP.
 
     use Test::Builder; # Loads Test::Builder::Formatter for you
 
-=head1 METHODS
-
-=over 4
-
-=item $f->event_todo_diag
-
-Additional method used to process L<Test::Builder::TodoDiag> events.
-
-=item $f->event_diag
-
-=item $f->event_plan
-
-These override the parent class methods to do nothing if C<no_header> is set.
-
-=back
-
 =head1 SOURCE
 
 The source code repository for Test2 can be found at
@@ -112,7 +95,7 @@ F<http://github.com/Test-More/test-more/>.
 
 =head1 COPYRIGHT
 
-Copyright 2016 Chad Granum E<lt>exod...@cpan.orge<gt>.
+Copyright 2017 Chad Granum E<lt>exod...@cpan.orge<gt>.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
diff --git a/cpan/Test-Simple/lib/Test/Builder/Module.pm 
b/cpan/Test-Simple/lib/Test/Builder/Module.pm
index 6fbba79fc0..857abfdf64 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;
 require Exporter;
 our @ISA = qw(Exporter);
 
-our $VERSION = '1.302073';
+our $VERSION = '1.302097';
 
 
 =head1 NAME
@@ -75,6 +75,8 @@ C<import_extra()>.
 sub import {
     my($class) = shift;
 
+    Test2::API::test2_load() unless Test2::API::test2_in_preload();
+
     # Don't run all this when loading ourself.
     return 1 if $class eq 'Test::Builder::Module';
 
diff --git a/cpan/Test-Simple/lib/Test/Builder/Tester.pm 
b/cpan/Test-Simple/lib/Test/Builder/Tester.pm
index 647ea2d371..7e551f7c01 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.302073';
+our $VERSION = '1.302097';
 
 use Test::Builder;
 use Symbol;
@@ -117,7 +117,7 @@ sub _start_testing {
     $original_harness_env = $ENV{HARNESS_ACTIVE} || 0;
     $ENV{HARNESS_ACTIVE} = 0;
 
-    my $hub = $t->{Hub} || Test2::API::test2_stack->top;
+    my $hub = $t->{Hub} || ($t->{Stack} ? $t->{Stack}->top : 
Test2::API::test2_stack->top);
     $original_formatter = $hub->format;
     unless ($original_formatter && 
$original_formatter->isa('Test::Builder::Formatter')) {
         my $fmt = Test::Builder::Formatter->new;
diff --git a/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm 
b/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
index 939e7f1cd3..8a7b73a14a 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.302073';
+our $VERSION = '1.302097';
 
 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 74ae0787b6..da60fba266 100644
--- a/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
+++ b/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
@@ -2,12 +2,19 @@ package Test::Builder::TodoDiag;
 use strict;
 use warnings;
 
-our $VERSION = '1.302073';
+our $VERSION = '1.302097';
 
 BEGIN { require Test2::Event::Diag; our @ISA = qw(Test2::Event::Diag) }
 
 sub diagnostics { 0 }
 
+sub facet_data {
+    my $self = shift;
+    my $out = $self->SUPER::facet_data();
+    $out->{info}->[0]->{debug} = 0;
+    return $out;
+}
+
 1;
 
 __END__
@@ -51,7 +58,7 @@ F<http://github.com/Test-More/test-more/>.
 
 =head1 COPYRIGHT
 
-Copyright 2016 Chad Granum E<lt>exod...@cpan.orge<gt>.
+Copyright 2017 Chad Granum E<lt>exod...@cpan.orge<gt>.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
diff --git a/cpan/Test-Simple/lib/Test/More.pm 
b/cpan/Test-Simple/lib/Test/More.pm
index 2863c1bba5..506639b48b 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.302073';
+our $VERSION = '1.302097';
 
 use Test::Builder::Module;
 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 f148fe62c9..0882f175a5 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.302073';
+our $VERSION = '1.302097';
 
 use Test::Builder::Module;
 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 a324a1bf47..786ae240dd 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.302073';
+our $VERSION = '1.302097';
 
 @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 d8eb170b6c..c4e3d00243 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.302073';
+our $VERSION = '1.302097';
 
 
 use Test::Builder;
diff --git a/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm 
b/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
index bed18e8c48..65e2e8c63f 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.302073';
+our $VERSION = '1.302097';
 
 
 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 ed627db442..71b383be0b 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.302073';
+our $VERSION = '1.302097';
 
 use Scalar::Util();
 
diff --git a/cpan/Test-Simple/lib/Test/Tutorial.pod 
b/cpan/Test-Simple/lib/Test/Tutorial.pod
index a71a9c1b3f..eb38018b8b 100644
--- a/cpan/Test-Simple/lib/Test/Tutorial.pod
+++ b/cpan/Test-Simple/lib/Test/Tutorial.pod
@@ -297,7 +297,7 @@ Now we can test bunches of dates by just adding them to
 C<%ICal_Dates>.  Now that it's less work to test with more dates, you'll
 be inclined to just throw more in as you think of them.
 Only problem is, every time we add to that we have to keep adjusting
-the L<< use Test::More tests => ## >> line.  That can rapidly get
+the C<< use Test::More tests => ## >> line.  That can rapidly get
 annoying.  There are ways to make this work better.
 
 First, we can calculate the plan dynamically using the C<plan()>
@@ -358,7 +358,7 @@ for you or for the next person who runs your test.
 
 =head2 Skipping tests
 
-Poking around in the existing Date::ICal tests, I found this in
+Poking around in the existing L<Date::ICal> tests, I found this in
 F<t/01sanity.t> [7]
 
     #!/usr/bin/perl -w
diff --git a/cpan/Test-Simple/lib/Test/use/ok.pm 
b/cpan/Test-Simple/lib/Test/use/ok.pm
index fdc7326b3d..30275e9a5d 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.302073';
+our $VERSION = '1.302097';
 
 
 __END__
diff --git a/cpan/Test-Simple/lib/Test2.pm b/cpan/Test-Simple/lib/Test2.pm
index 1b65b334b5..65578b1f89 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.302073';
+our $VERSION = '1.302097';
 
 
 1;
@@ -203,7 +203,7 @@ F<http://github.com/Test-More/test-more/>.
 
 =head1 COPYRIGHT
 
-Copyright 2016 Chad Granum E<lt>exod...@cpan.orge<gt>.
+Copyright 2017 Chad Granum E<lt>exod...@cpan.orge<gt>.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
diff --git a/cpan/Test-Simple/lib/Test2/API.pm 
b/cpan/Test-Simple/lib/Test2/API.pm
index 41cd0af209..199e3b082c 100644
--- a/cpan/Test-Simple/lib/Test2/API.pm
+++ b/cpan/Test-Simple/lib/Test2/API.pm
@@ -2,12 +2,14 @@ package Test2::API;
 use strict;
 use warnings;
 
+use Test2::Util qw/USE_THREADS/;
+
 BEGIN {
     $ENV{TEST_ACTIVE} ||= 1;
     $ENV{TEST2_ACTIVE} = 1;
 }
 
-our $VERSION = '1.302073';
+our $VERSION = '1.302097';
 
 
 my $INST;
@@ -16,12 +18,23 @@ sub test2_set_is_end { ($ENDING) = @_ ? @_ : (1) }
 sub test2_get_is_end { $ENDING }
 
 use Test2::API::Instance(\$INST);
+
 # Set the exit status
 END {
     test2_set_is_end(); # See gh #16
     $INST->set_exit();
 }
 
+sub CLONE {
+    my $init = test2_init_done();
+    my $load = test2_load_done();
+
+    return if $init && $load;
+
+    require Carp;
+    Carp::croak "Test2 must be fully loaded before you start a new thread!\n";
+}
+
 # See gh #16
 {
     no warnings;
@@ -38,7 +51,8 @@ BEGIN {
     }
 }
 
-use Test2::Util::Trace();
+use Test2::EventFacet::Trace();
+use Test2::Util::Trace(); # Legacy
 
 use Test2::Hub::Subtest();
 use Test2::Hub::Interceptor();
@@ -54,19 +68,23 @@ use Test2::Event::Waiting();
 use Test2::Event::Skip();
 use Test2::Event::Subtest();
 
-use Carp qw/carp croak confess longmess/;
+use Carp qw/carp croak confess/;
 use Scalar::Util qw/blessed weaken/;
-use Test2::Util qw/get_tid/;
+use Test2::Util qw/get_tid clone_io pkg_to_file/;
 
 our @EXPORT_OK = qw{
     context release
     context_do
     no_context
-    intercept
+    intercept intercept_deep
     run_subtest
 
     test2_init_done
     test2_load_done
+    test2_load
+    test2_start_preload
+    test2_stop_preload
+    test2_in_preload
 
     test2_set_is_end
     test2_get_is_end
@@ -97,12 +115,18 @@ our @EXPORT_OK = qw{
     test2_ipc_enable_polling
     test2_ipc_get_pending
     test2_ipc_set_pending
+    test2_ipc_get_timeout
+    test2_ipc_set_timeout
     test2_ipc_enable_shm
 
     test2_formatter
     test2_formatters
     test2_formatter_add
     test2_formatter_set
+
+    test2_stdout
+    test2_stderr
+    test2_reset_io
 };
 BEGIN { require Exporter; our @ISA = qw(Exporter) }
 
@@ -111,9 +135,29 @@ my $CONTEXTS    = $INST->contexts;
 my $INIT_CBS    = $INST->context_init_callbacks;
 my $ACQUIRE_CBS = $INST->context_acquire_callbacks;
 
+my $STDOUT = clone_io(\*STDOUT);
+my $STDERR = clone_io(\*STDERR);
+sub test2_stdout { $STDOUT ||= clone_io(\*STDOUT) }
+sub test2_stderr { $STDERR ||= clone_io(\*STDERR) }
+
+sub test2_post_preload_reset {
+    test2_reset_io();
+    $INST->post_preload_reset;
+}
+
+sub test2_reset_io {
+    $STDOUT = clone_io(\*STDOUT);
+    $STDERR = clone_io(\*STDERR);
+}
+
 sub test2_init_done { $INST->finalized }
 sub test2_load_done { $INST->loaded }
 
+sub test2_load          { $INST->load }
+sub test2_start_preload { $ENV{T2_IN_PRELOAD} = 1; $INST->start_preload }
+sub test2_stop_preload  { $ENV{T2_IN_PRELOAD} = 0; $INST->stop_preload }
+sub test2_in_preload    { $INST->preload }
+
 sub test2_pid     { $INST->pid }
 sub test2_tid     { $INST->tid }
 sub test2_stack   { $INST->stack }
@@ -143,9 +187,21 @@ sub test2_ipc_enable_polling  { $INST->enable_ipc_polling }
 sub test2_ipc_disable_polling { $INST->disable_ipc_polling }
 sub test2_ipc_get_pending     { $INST->get_ipc_pending }
 sub test2_ipc_set_pending     { $INST->set_ipc_pending(@_) }
+sub test2_ipc_set_timeout     { $INST->set_ipc_timeout(@_) }
+sub test2_ipc_get_timeout     { $INST->ipc_timeout() }
 sub test2_ipc_enable_shm      { $INST->ipc_enable_shm }
 
-sub test2_formatter     { $INST->formatter }
+sub test2_formatter     {
+    if ($ENV{T2_FORMATTER} && $ENV{T2_FORMATTER} =~ m/^(\+)?(.*)$/) {
+        my $formatter = $1 ? $2 : "Test2::Formatter::$2";
+        my $file = pkg_to_file($formatter);
+        require $file;
+        return $formatter;
+    }
+
+    return $INST->formatter;
+}
+
 sub test2_formatters    { @{$INST->formatters} }
 sub test2_formatter_add { $INST->add_formatter(@_) }
 sub test2_formatter_set {
@@ -207,10 +263,11 @@ sub no_context(&;$) {
     return;
 };
 
+my $CID = 1;
 sub context {
     # We need to grab these before anything else to ensure they are not
     # changed.
-    my ($errno, $eval_error, $child_error) = (0 + $!, $@, $?);
+    my ($errno, $eval_error, $child_error, $extended_error) = (0 + $!, $@, $?, 
$^E);
 
     my %params = (level => 0, wrapped => 0, @_);
 
@@ -252,7 +309,7 @@ sub context {
     }
 
     # I know this is ugly....
-    ($!, $@, $?) = ($errno, $eval_error, $child_error) and return bless(
+    ($!, $@, $?, $^E) = ($errno, $eval_error, $child_error, $extended_error) 
and return bless(
         {
             %$current,
             _is_canon   => undef,
@@ -283,11 +340,15 @@ sub context {
     # hit with how often this needs to be called.
     my $trace = bless(
         {
-            frame => [$pkg, $file, $line, $sub],
-            pid   => $$,
-            tid   => get_tid(),
+            frame    => [$pkg, $file, $line, $sub],
+            pid      => $$,
+            tid      => get_tid(),
+            cid      => 'C' . $CID++,
+            hid      => $hid,
+            nested   => $hub->{nested},
+            buffered => $hub->{buffered},
         },
-        'Test2::Util::Trace'
+        'Test2::EventFacet::Trace'
     );
 
     # Directly bless the object here, calling new is a noticeable performance
@@ -317,7 +378,7 @@ sub context {
 
     $params{on_init}->($current) if $params{on_init};
 
-    ($!, $@, $?) = ($errno, $eval_error, $child_error);
+    ($!, $@, $?, $^E) = ($errno, $eval_error, $child_error, $extended_error);
 
     return $current;
 }
@@ -345,7 +406,8 @@ sub _existing_error {
     my $oldframe = $ctx->{trace}->frame;
     my $olddepth = $ctx->{_depth};
 
-    my $mess = longmess();
+    # Older versions of Carp do not export longmess() function, so it needs to 
be called with package name
+    my $mess = Carp::longmess();
 
     warn <<"    EOT";
 $msg
@@ -374,7 +436,29 @@ sub release($;$) {
 
 sub intercept(&) {
     my $code = shift;
+    my $ctx = context();
+
+    my $events = _intercept($code, deep => 0);
+
+    $ctx->release;
+
+    return $events;
+}
+
+sub intercept_deep(&) {
+    my $code = shift;
+    my $ctx = context();
+
+    my $events = _intercept($code, deep => 1);
 
+    $ctx->release;
+
+    return $events;
+}
+
+sub _intercept {
+    my $code = shift;
+    my %params = @_;
     my $ctx = context();
 
     my $ipc;
@@ -389,7 +473,7 @@ sub intercept(&) {
     );
 
     my @events;
-    $hub->listen(sub { push @events => $_[1] });
+    $hub->listen(sub { push @events => $_[1] }, inherit => $params{deep});
 
     $ctx->stack->top; # Make sure there is a top hub before we begin.
     $ctx->stack->push($hub);
@@ -427,23 +511,25 @@ sub run_subtest {
     my ($name, $code, $params, @args) = @_;
 
     $params = {buffered => $params} unless ref $params;
-    my $buffered      = delete $params->{buffered};
     my $inherit_trace = delete $params->{inherit_trace};
 
     my $ctx = context();
 
-    $ctx->note($name) unless $buffered;
-
     my $parent = $ctx->hub;
 
+    # If a parent is buffered then the child must be as well.
+    my $buffered = $params->{buffered} || $parent->{buffered};
+
+    $ctx->note($name) unless $buffered;
+
     my $stack = $ctx->stack || $STACK;
     my $hub = $stack->new_hub(
         class => 'Test2::Hub::Subtest',
         %$params,
+        buffered => $buffered,
     );
 
     my @events;
-    $hub->set_nested( $parent->isa('Test2::Hub::Subtest') ? $parent->nested + 
1 : 1 );
     $hub->listen(sub { push @events => $_[1] });
 
     if ($buffered) {
@@ -452,14 +538,6 @@ sub run_subtest {
             $hub->format(undef) if $hide;
         }
     }
-    elsif (! $parent->format) {
-        # If our parent has no format that means we're in a buffered subtest
-        # and now we're trying to run a streaming subtest. There's really no
-        # way for that to work, so we need to force the use of a buffered
-        # subtest here as
-        # well. https://github.com/Test-More/test-more/issues/721
-        $buffered = 1;
-    }
 
     if ($inherit_trace) {
         my $orig = $code;
@@ -487,20 +565,44 @@ sub run_subtest {
             $finished = 1;
         }
     }
+
+    if ($params->{no_fork}) {
+        if ($$ != $ctx->trace->pid) {
+            warn $ok ? "Forked inside subtest, but subtest never finished!\n" 
: $err;
+            exit 255;
+        }
+
+        if (get_tid() != $ctx->trace->tid) {
+            warn $ok ? "Started new thread inside subtest, but thread never 
finished!\n" : $err;
+            exit 255;
+        }
+    }
+    elsif (!$parent->is_local && !$parent->ipc) {
+        warn $ok ? "A new process or thread was started inside subtest, but 
IPC is not enabled!\n" : $err;
+        exit 255;
+    }
+
     $stack->pop($hub);
 
     my $trace = $ctx->trace;
 
+    my $bailed = $hub->bailed_out;
+
     if (!$finished) {
-        if(my $bailed = $hub->bailed_out) {
+        if ($bailed && !$buffered) {
             $ctx->bail($bailed->reason);
         }
-        my $code = $hub->exit_code;
-        $ok = !$code;
-        $err = "Subtest ended with exit code $code" if $code;
+        elsif ($bailed && $buffered) {
+            $ok = 1;
+        }
+        else {
+            my $code = $hub->exit_code;
+            $ok = !$code;
+            $err = "Subtest ended with exit code $code" if $code;
+        }
     }
 
-    $hub->finalize($trace, 1)
+    $hub->finalize($trace->snapshot(hid => $hub->hid, nested => $hub->nested, 
buffered => $buffered), 1)
         if $ok
         && !$hub->no_ending
         && !$hub->ended;
@@ -526,6 +628,8 @@ sub run_subtest {
     $ctx->diag("Bad subtest plan, expected " . $hub->plan . " but ran " . 
$hub->count)
         if defined($plan_ok) && !$plan_ok;
 
+    $ctx->bail($bailed->reason) if $bailed && $buffered;
+
     $ctx->release;
     return $pass;
 }
@@ -618,6 +722,35 @@ generated by the test system:
     my_ok($events->[0]->pass, "first event passed");
     my_ok(!$events->[1]->pass, "second event failed");
 
+=head3 DEEP EVENT INTERCEPTION
+
+Normally C<intercept { ... }> only intercepts events sent to the main hub (as
+added by intercept itself). Nested hubs, such as those created by subtests,
+will not be intercepted. This is normally what you will still see the nested
+events by inspecting the subtest event. However there are times where you want
+to verify each event as it is sent, in that case use C<intercept_deep { ... }>.
+
+    my $events = intercept_Deep {
+        buffered_subtest foo => sub {
+            ok(1, "pass");
+        };
+    };
+
+C<$events> in this case will contain 3 items:
+
+=over 4
+
+=item The event from C<ok(1, "pass")>
+
+=item The plan event for the subtest
+
+=item The subtest event itself, with the first 2 events nested inside it as 
children.
+
+=back
+
+This lets you see the order in which the events were sent, unlike
+C<intercept { ... }> which only lets you see events as the main hub sees them.
+
 =head2 OTHER API FUNCTIONS
 
     use Test2::API qw{
@@ -958,6 +1091,12 @@ created for the hub that shares the same trace as the 
current context.
 Set this to true if your tool is producing subtests without user-specified
 subs.
 
+=item 'no_fork' => $bool
+
+Defaults to off. Normally forking inside a subtest will actually fork the
+subtest, resulting in 2 final subtest events. This parameter will turn off that
+behavior, only the original process/thread will return a final subtest event.
+
 =back
 
 =item @ARGS
@@ -1213,6 +1352,15 @@ This returns 0 if there are (most likely) no pending 
events.
 This returns 1 if there are (likely) pending events. Upon return it will reset,
 nothing else will be able to see that there were pending events.
 
+=item $timeout = test2_ipc_get_timeout()
+
+=item test2_ipc_set_timeout($timeout)
+
+Get/Set the timeout value for the IPC system. This timeout is how long the IPC
+system will wait for child processes and threads to finish before aborting.
+
+The default value is C<30> seconds.
+
 =back
 
 =head2 MANAGING FORMATTERS
@@ -1300,7 +1448,7 @@ F<http://github.com/Test-More/test-more/>.
 
 =head1 COPYRIGHT
 
-Copyright 2016 Chad Granum E<lt>exod...@cpan.orge<gt>.
+Copyright 2017 Chad Granum E<lt>exod...@cpan.orge<gt>.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
diff --git a/cpan/Test-Simple/lib/Test2/API/Breakage.pm 
b/cpan/Test-Simple/lib/Test2/API/Breakage.pm
index b85e4d54c9..9414df7127 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.302073';
+our $VERSION = '1.302097';
 
 
 use Test2::Util qw/pkg_to_file/;
@@ -31,7 +31,12 @@ sub upgrade_required {
         'Test::SharedFork'        => '0.34',
         'Test::Alien'             => '0.04',
         'Test::UseAllModules'     => '0.14',
+        'Test::More::Prefix'      => '0.005',
 
+        'Test2::Tools::EventDumper' => 0.000007,
+        'Test2::Harness'            => 0.000013,
+
+        'Test::DBIx::Class::Schema'    => '1.0.9',
         'Test::Clustericious::Cluster' => '0.30',
     );
 }
@@ -43,12 +48,10 @@ sub known_broken {
         'Test::Aggregate'       => '0.373',
         'Test::Flatten'         => '0.11',
         'Test::Group'           => '0.20',
-        'Test::More::Prefix'    => '0.005',
         'Test::ParallelSubtest' => '0.05',
         'Test::Pretty'          => '0.32',
         'Test::Wrapper'         => '0.3.0',
 
-        'Test::DBIx::Class::Schema'      => '1.0.9',
         'Log::Dispatch::Config::TestLog' => '0.02',
     );
 }
@@ -165,7 +168,7 @@ F<http://github.com/Test-More/test-more/>.
 
 =head1 COPYRIGHT
 
-Copyright 2016 Chad Granum E<lt>exod...@cpan.orge<gt>.
+Copyright 2017 Chad Granum E<lt>exod...@cpan.orge<gt>.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
diff --git a/cpan/Test-Simple/lib/Test2/API/Context.pm 
b/cpan/Test-Simple/lib/Test2/API/Context.pm
index 7660fa69ea..c5486e8921 100644
--- a/cpan/Test-Simple/lib/Test2/API/Context.pm
+++ b/cpan/Test-Simple/lib/Test2/API/Context.pm
@@ -2,14 +2,14 @@ package Test2::API::Context;
 use strict;
 use warnings;
 
-our $VERSION = '1.302073';
+our $VERSION = '1.302097';
 
 
-use Carp qw/confess croak longmess/;
+use Carp qw/confess croak/;
 use Scalar::Util qw/weaken blessed/;
 use Test2::Util qw/get_tid try pkg_to_file get_tid/;
 
-use Test2::Util::Trace();
+use Test2::EventFacet::Trace();
 use Test2::API();
 
 # Preload some key event types
@@ -19,7 +19,7 @@ my %LOADED = (
         my $file = "Test2/Event/$_.pm";
         require $file unless $INC{$file};
         ( $pkg => $pkg, $_ => $pkg )
-    } qw/Ok Diag Note Info Plan Bail Exception Waiting Skip Subtest/
+    } qw/Ok Diag Note Plan Bail Exception Waiting Skip Subtest Pass Fail/
 );
 
 use Test2::Util::ExternalMeta qw/meta get_meta set_meta delete_meta/;
@@ -155,9 +155,7 @@ sub do_in_context {
     # We need to update the pid/tid and error vars.
     my $clone = $self->snapshot;
     @$clone{+ERRNO, +EVAL_ERROR, +CHILD_ERROR} = ($!, $@, $?);
-    $clone->{+TRACE} = $clone->{+TRACE}->snapshot;
-    $clone->{+TRACE}->set_pid($$);
-    $clone->{+TRACE}->set_tid(get_tid());
+    $clone->{+TRACE} = $clone->{+TRACE}->snapshot(pid => $$, tid => get_tid());
 
     my $hub = $clone->{+HUB};
     my $hid = $hub->hid;
@@ -202,6 +200,13 @@ sub alert {
     $self->trace->alert($msg);
 }
 
+sub send_event_and_release {
+    my $self = shift;
+    my $out = $self->send_event(@_);
+    $self->release;
+    return $out;
+}
+
 sub send_event {
     my $self  = shift;
     my $event = shift;
@@ -209,12 +214,19 @@ sub send_event {
 
     my $pkg = $LOADED{$event} || $self->_parse_event($event);
 
-    my $e = $pkg->new(
-        trace => $self->{+TRACE}->snapshot,
-        %args,
-    );
+    my $e;
+    {
+        local $Carp::CarpLevel = $Carp::CarpLevel + 1;
+        $e = $pkg->new(
+            trace => $self->{+TRACE}->snapshot,
+            %args,
+        );
+    }
 
-    ${$self->{+_ABORTED}}++ if $self->{+_ABORTED} && defined $e->terminate;
+    if ($self->{+_ABORTED}) {
+        my $f = $e->facet_data;
+        ${$self->{+_ABORTED}}++ if $f->{control}->{halt} || 
defined($f->{control}->{terminate}) || defined($e->terminate);
+    }
     $self->{+HUB}->send($e);
 }
 
@@ -225,12 +237,81 @@ sub build_event {
 
     my $pkg = $LOADED{$event} || $self->_parse_event($event);
 
+    local $Carp::CarpLevel = $Carp::CarpLevel + 1;
     $pkg->new(
         trace => $self->{+TRACE}->snapshot,
         %args,
     );
 }
 
+sub pass {
+    my $self = shift;
+    my ($name) = @_;
+
+    my $e = bless(
+        {
+            trace => bless({%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
+            name  => $name,
+        },
+        "Test2::Event::Pass"
+    );
+
+    $self->{+HUB}->send($e);
+    return $e;
+}
+
+sub pass_and_release {
+    my $self = shift;
+    my ($name) = @_;
+
+    my $e = bless(
+        {
+            trace => bless({%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
+            name  => $name,
+        },
+        "Test2::Event::Pass"
+    );
+
+    $self->{+HUB}->send($e);
+    $self->release;
+    return 1;
+}
+
+sub fail {
+    my $self = shift;
+    my ($name, @diag) = @_;
+
+    my $e = bless(
+        {
+            trace => bless({%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
+            name  => $name,
+        },
+        "Test2::Event::Fail"
+    );
+
+    $e->add_info({tag => 'DIAG', debug => 1, details => $_}) for @diag;
+    $self->{+HUB}->send($e);
+    return $e;
+}
+
+sub fail_and_release {
+    my $self = shift;
+    my ($name, @diag) = @_;
+
+    my $e = bless(
+        {
+            trace => bless({%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
+            name  => $name,
+        },
+        "Test2::Event::Fail"
+    );
+
+    $e->add_info({tag => 'DIAG', debug => 1, details => $_}) for @diag;
+    $self->{+HUB}->send($e);
+    $self->release;
+    return 0;
+}
+
 sub ok {
     my $self = shift;
     my ($pass, $name, $on_fail) = @_;
@@ -238,7 +319,7 @@ sub ok {
     my $hub = $self->{+HUB};
 
     my $e = bless {
-        trace => bless( {%{$self->{+TRACE}}}, 'Test2::Util::Trace'),
+        trace => bless( {%{$self->{+TRACE}}}, 'Test2::EventFacet::Trace'),
         pass  => $pass,
         name  => $name,
     }, 'Test2::Event::Ok';
@@ -250,14 +331,7 @@ sub ok {
     $self->failure_diag($e);
 
     if ($on_fail && @$on_fail) {
-        for my $of (@$on_fail) {
-            if (ref($of) eq 'CODE' || (blessed($of) && $of->can('render'))) {
-                $self->info($of, diagnostics => 1);
-            }
-            else {
-                $self->diag($of);
-            }
-        }
+        $self->diag($_) for @$on_fail;
     }
 
     return $e;
@@ -267,13 +341,6 @@ sub failure_diag {
     my $self = shift;
     my ($e) = @_;
 
-    # This behavior is inherited from Test::Builder which injected a newline at
-    # the start of the first diagnostics when the harness is active, but not
-    # verbose. This is important to keep the diagnostics from showing up
-    # appended to the existing line, which is hard to read. In a verbose
-    # harness there is no need for this.
-    my $prefix = $ENV{HARNESS_ACTIVE} && !$ENV{HARNESS_IS_VERBOSE} ? "\n" : "";
-
     # Figure out the debug info, this is typically the file name and line
     # number, but can also be a custom message. If no trace object is provided
     # then we have nothing useful to display.
@@ -284,8 +351,8 @@ sub failure_diag {
     # Create the initial diagnostics. If the test has a name we put the debug
     # info on a second line, this behavior is inherited from Test::Builder.
     my $msg = defined($name)
-        ? qq[${prefix}Failed test '$name'\n$debug.\n]
-        : qq[${prefix}Failed test $debug.\n];
+        ? qq[Failed test '$name'\n$debug.\n]
+        : qq[Failed test $debug.\n];
 
     $self->diag($msg);
 }
@@ -302,12 +369,6 @@ sub skip {
     );
 }
 
-sub info {
-    my $self = shift;
-    my ($renderer, %params) = @_;
-    $self->send_event('Info', renderer => $renderer, %params);
-}
-
 sub note {
     my $self = shift;
     my ($message) = @_;
@@ -509,7 +570,7 @@ current one to which all events should be sent.
 
 =item $dbg = $ctx->trace()
 
-This will return the L<Test2::Util::Trace> instance used by the context.
+This will return the L<Test2::EventFacet::Trace> instance used by the context.
 
 =item $ctx->do_in_context(\&code, @args);
 
@@ -555,23 +616,100 @@ The value of C<$@> when the context was created.
 
 =over 4
 
+=item $event = $ctx->pass()
+
+=item $event = $ctx->pass($name)
+
+This will send and return an L<Test2::Event::Pass> event. You may optionally
+provide a C<$name> for the assertion.
+
+The L<Test2::Event::Pass> is a specially crafted and optimized event, using
+this will help the performance of passing tests.
+
+=item $true = $ctx->pass_and_release()
+
+=item $true = $ctx->pass_and_release($name)
+
+This is a combination of C<pass()> and C<release()>. You can use this if you do
+not plan to do anything with the context after sending the event. This helps
+write more clear and compact code.
+
+    sub shorthand {
+        my ($bool, $name) = @_;
+        my $ctx = context();
+        return $ctx->pass_and_release($name) if $bool;
+
+        ... Handle a failure ...
+    }
+
+    sub longform {
+        my ($bool, $name) = @_;
+        my $ctx = context();
+
+        if ($bool) {
+            $ctx->pass($name);
+            $ctx->release;
+            return 1;
+        }
+
+        ... Handle a failure ...
+    }
+
+=item my $event = $ctx->fail()
+
+=item my $event = $ctx->fail($name)
+
+=item my $event = $ctx->fail($name, @diagnostics)
+
+This lets you send an L<Test2::Event::Fail> event. You may optionally provide a
+C<$name> and C<@diagnostics> messages.
+
+=item my $false = $ctx->fail_and_release()
+
+=item my $false = $ctx->fail_and_release($name)
+
+=item my $false = $ctx->fail_and_release($name, @diagnostics)
+
+This is a combination of C<fail()> and C<release()>. This can be used to write
+clearer and shorter code.
+
+    sub shorthand {
+        my ($bool, $name) = @_;
+        my $ctx = context();
+        return $ctx->fail_and_release($name) unless $bool;
+
+        ... Handle a success ...
+    }
+
+    sub longform {
+        my ($bool, $name) = @_;
+        my $ctx = context();
+
+        unless ($bool) {
+            $ctx->pass($name);
+            $ctx->release;
+            return 1;
+        }
+
+        ... Handle a success ...
+    }
+
+
 =item $event = $ctx->ok($bool, $name)
 
 =item $event = $ctx->ok($bool, $name, \@on_fail)
 
+B<NOTE:> Use of this method is discouraged in favor of C<pass()> and C<fail()>
+which produce L<Test2::Event::Pass> and L<Test2::Event::Fail> events. These
+newer event types are faster and less crufty.
+
 This will create an L<Test2::Event::Ok> object for you. If C<$bool> is false
 then an L<Test2::Event::Diag> event will be sent as well with details about the
 failure. If you do not want automatic diagnostics you should use the
 C<send_event()> method directly.
 
 The third argument C<\@on_fail>) is an optional set of diagnostics to be sent 
in
-the event of a test failure. Plain strings will be sent as
-L<Test2::Event::Diag> events. References will be used to construct
-L<Test2::Event::Info> events with C<< diagnostics => 1 >>.
-
-=item $event = $ctx->info($renderer, diagnostics => $bool, %other_params)
-
-Send an L<Test2::Event::Info>.
+the event of a test failure.
 
 =item $event = $ctx->note($message)
 
@@ -617,6 +755,22 @@ or
 This is the same as C<send_event()>, except it builds and returns the event
 without sending it.
 
+=item $event = $ctx->send_event_and_release($Type, %parameters)
+
+This is a combination of C<send_event()> and C<release()>.
+
+    sub shorthand {
+        my $ctx = context();
+        return $ctx->send_event_and_release(Pass => { name => 'foo' });
+    }
+
+    sub longform {
+        my $ctx = context();
+        my $event = $ctx->send_event(Pass => { name => 'foo' });
+        $ctx->release;
+        return $event;
+    }
+
 =back
 
 =head1 HOOKS
@@ -729,7 +883,7 @@ F<http://github.com/Test-More/test-more/>.
 
 =head1 COPYRIGHT
 
-Copyright 2016 Chad Granum E<lt>exod...@cpan.orge<gt>.
+Copyright 2017 Chad Granum E<lt>exod...@cpan.orge<gt>.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
diff --git a/cpan/Test-Simple/lib/Test2/API/Instance.pm 
b/cpan/Test-Simple/lib/Test2/API/Instance.pm
index 70d4cd7bb7..e946d035f9 100644
--- a/cpan/Test-Simple/lib/Test2/API/Instance.pm
+++ b/cpan/Test-Simple/lib/Test2/API/Instance.pm
@@ -2,16 +2,16 @@ package Test2::API::Instance;
 use strict;
 use warnings;
 
-our $VERSION = '1.302073';
+our $VERSION = '1.302097';
 
 
 our @CARP_NOT = qw/Test2::API Test2::API::Instance Test2::IPC::Driver 
Test2::Formatter/;
 use Carp qw/confess carp/;
 use Scalar::Util qw/reftype/;
 
-use Test2::Util qw/get_tid USE_THREADS CAN_FORK pkg_to_file try/;
+use Test2::Util qw/get_tid USE_THREADS CAN_FORK pkg_to_file try CAN_SIGSYS/;
 
-use Test2::Util::Trace();
+use Test2::EventFacet::Trace();
 use Test2::API::Stack();
 
 use Test2::Util::HashBase qw{
@@ -21,11 +21,14 @@ use Test2::Util::HashBase qw{
     ipc stack formatter
     contexts
 
+    -preload
+
     ipc_shm_size
     ipc_shm_last
     ipc_shm_id
     ipc_polling
     ipc_drivers
+    ipc_timeout
     formatters
 
     exit_callbacks
@@ -35,8 +38,10 @@ use Test2::Util::HashBase qw{
     context_release_callbacks
 };
 
-sub pid { $_[0]->{+_PID} ||= $$ }
-sub tid { $_[0]->{+_TID} ||= get_tid() }
+sub DEFAULT_IPC_TIMEOUT() { 30 }
+
+sub pid { $_[0]->{+_PID} }
+sub tid { $_[0]->{+_TID} }
 
 # Wrap around the getters that should call _finalize.
 BEGIN {
@@ -63,6 +68,46 @@ sub import {
 
 sub init { $_[0]->reset }
 
+sub start_preload {
+    my $self = shift;
+
+    confess "preload cannot be started, Test2::API has already been 
initialized"
+        if $self->{+FINALIZED} || $self->{+LOADED};
+
+    return $self->{+PRELOAD} = 1;
+}
+
+sub stop_preload {
+    my $self = shift;
+
+    return 0 unless $self->{+PRELOAD};
+    $self->{+PRELOAD} = 0;
+
+    $self->post_preload_reset();
+
+    return 1;
+}
+
+sub post_preload_reset {
+    my $self = shift;
+
+    delete $self->{+_PID};
+    delete $self->{+_TID};
+
+    $self->{+CONTEXTS} = {};
+
+    $self->{+FORMATTERS} = [];
+
+    $self->{+FINALIZED} = undef;
+    $self->{+IPC}       = undef;
+
+    $self->{+IPC_TIMEOUT} = DEFAULT_IPC_TIMEOUT() unless defined 
$self->{+IPC_TIMEOUT};
+
+    $self->{+LOADED} = 0;
+
+    $self->{+STACK} ||= Test2::API::Stack->new;
+}
+
 sub reset {
     my $self = shift;
 
@@ -80,6 +125,8 @@ sub reset {
     $self->{+FINALIZED} = undef;
     $self->{+IPC}       = undef;
 
+    $self->{+IPC_TIMEOUT} = DEFAULT_IPC_TIMEOUT() unless defined 
$self->{+IPC_TIMEOUT};
+
     $self->{+NO_WAIT} = 0;
     $self->{+LOADED}  = 0;
 
@@ -97,6 +144,9 @@ sub _finalize {
     my ($caller) = @_;
     $caller ||= [caller(1)];
 
+    confess "Attempt to initialize Test2::API during preload"
+        if $self->{+PRELOAD};
+
     $self->{+FINALIZED} = $caller;
 
     $self->{+_PID} = $$        unless defined $self->{+_PID};
@@ -227,6 +277,9 @@ sub add_post_load_callback {
 sub load {
     my $self = shift;
     unless ($self->{+LOADED}) {
+        confess "Attempt to initialize Test2::API during preload"
+            if $self->{+PRELOAD};
+
         $self->{+_PID} = $$        unless defined $self->{+_PID};
         $self->{+_TID} = get_tid() unless defined $self->{+_TID};
 
@@ -309,7 +362,7 @@ sub ipc_enable_shm {
         # In some systems (*BSD) accessing the SysV IPC APIs without
         # them being enabled can cause a SIGSYS.  We suppress the SIGSYS
         # and then get ENOSYS from the calls.
-        local $SIG{SYS} = 'IGNORE';
+        local $SIG{SYS} = 'IGNORE' if CAN_SIGSYS;
 
         require IPC::SysV;
 
@@ -367,41 +420,66 @@ sub disable_ipc_polling {
 }
 
 sub _ipc_wait {
+    my ($timeout) = @_;
     my $fail = 0;
 
-    if (CAN_FORK) {
-        while (1) {
-            my $pid = CORE::wait();
-            my $err = $?;
-            last if $pid == -1;
-            next unless $err;
-            $fail++;
-            $err = $err >> 8;
-            warn "Process $pid did not exit cleanly (status: $err)\n";
+    $timeout = DEFAULT_IPC_TIMEOUT() unless defined $timeout;
+
+    my $ok = eval {
+        if (CAN_FORK) {
+            local $SIG{ALRM} = sub { die "Timeout waiting on child processes" 
};
+            alarm $timeout;
+
+            while (1) {
+                my $pid = CORE::wait();
+                my $err = $?;
+                last if $pid == -1;
+                next unless $err;
+                $fail++;
+                $err = $err >> 8;
+                warn "Process $pid did not exit cleanly (status: $err)\n";
+            }
+
+            alarm 0;
         }
-    }
 
-    if (USE_THREADS) {
-        for my $t (threads->list()) {
-            $t->join;
-            # In older threads we cannot check if a thread had an error unless
-            # we control it and its return.
-            my $err = $t->can('error') ? $t->error : undef;
-            next unless $err;
-            my $tid = $t->tid();
-            $fail++;
-            chomp($err);
-            warn "Thread $tid did not end cleanly: $err\n";
+        if (USE_THREADS) {
+            my $start = time;
+
+            while (1) {
+                last unless threads->list();
+                die "Timeout waiting on child thread" if time - $start >= 
$timeout;
+                sleep 1;
+                for my $t (threads->list) {
+                    # threads older than 1.34 do not have this :-(
+                    next if $t->can('is_joinable') && !$t->is_joinable;
+                    $t->join;
+                    # In older threads we cannot check if a thread had an 
error unless
+                    # we control it and its return.
+                    my $err = $t->can('error') ? $t->error : undef;
+                    next unless $err;
+                    my $tid = $t->tid();
+                    $fail++;
+                    chomp($err);
+                    warn "Thread $tid did not end cleanly: $err\n";
+                }
+            }
         }
-    }
 
-    return 0 unless $fail;
+        1;
+    };
+    my $error = $@;
+
+    return 0 if $ok && !$fail;
+    warn $error unless $ok;
     return 255;
 }
 
 sub DESTROY {
     my $self = shift;
 
+    return if $self->{+PRELOAD};
+
     return unless defined($self->{+_PID}) && $self->{+_PID} == $$;
     return unless defined($self->{+_TID}) && $self->{+_TID} == get_tid();
 
@@ -412,6 +490,8 @@ sub DESTROY {
 sub set_exit {
     my $self = shift;
 
+    return if $self->{+PRELOAD};
+
     my $exit     = $?;
     my $new_exit = $exit;
 
@@ -470,13 +550,13 @@ This is not a supported configuration, you will have 
problems.
             $ipc->waiting();
         }
 
-        my $ipc_exit = _ipc_wait();
+        my $ipc_exit = _ipc_wait($self->{+IPC_TIMEOUT});
         $new_exit ||= $ipc_exit;
     }
 
     # None of this is necessary if we never got a root hub
**** PATCH TRUNCATED AT 2000 LINES -- 11336 NOT SHOWN ****

--
Perl5 Master Repository

Reply via email to