In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/ec35cd4c022dea519712ce60efb24e281b048471?hp=b25b06cfba95499e3ff101909adcc2c23aea0d58>

- Log -----------------------------------------------------------------
commit ec35cd4c022dea519712ce60efb24e281b048471
Author: Tony Cook <[email protected]>
Date:   Wed May 11 14:54:02 2016 +1000

    update GNUmakefile for Test2 too

M       win32/GNUmakefile

commit b4514920cd5cabccad6add35edf1bef258070a11
Author: Chad Granum <[email protected]>
Date:   Tue May 10 07:44:27 2016 -0700

    Update to the latest Test-Simple cpan dist

M       MANIFEST
M       Makefile.SH
M       cpan/Test-Simple/lib/Test/Builder.pm
A       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
A       cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
A       cpan/Test-Simple/lib/Test/FAQ.pod
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
A       cpan/Test-Simple/lib/Test2.pm
A       cpan/Test-Simple/lib/Test2/API.pm
A       cpan/Test-Simple/lib/Test2/API/Breakage.pm
A       cpan/Test-Simple/lib/Test2/API/Context.pm
A       cpan/Test-Simple/lib/Test2/API/Instance.pm
A       cpan/Test-Simple/lib/Test2/API/Stack.pm
A       cpan/Test-Simple/lib/Test2/Event.pm
A       cpan/Test-Simple/lib/Test2/Event/Bail.pm
A       cpan/Test-Simple/lib/Test2/Event/Diag.pm
A       cpan/Test-Simple/lib/Test2/Event/Exception.pm
A       cpan/Test-Simple/lib/Test2/Event/Note.pm
A       cpan/Test-Simple/lib/Test2/Event/Ok.pm
A       cpan/Test-Simple/lib/Test2/Event/Plan.pm
A       cpan/Test-Simple/lib/Test2/Event/Skip.pm
A       cpan/Test-Simple/lib/Test2/Event/Subtest.pm
A       cpan/Test-Simple/lib/Test2/Event/Waiting.pm
A       cpan/Test-Simple/lib/Test2/Formatter.pm
A       cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
A       cpan/Test-Simple/lib/Test2/Hub.pm
A       cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
A       cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
A       cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
A       cpan/Test-Simple/lib/Test2/IPC.pm
A       cpan/Test-Simple/lib/Test2/IPC/Driver.pm
A       cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
A       cpan/Test-Simple/lib/Test2/Transition.pod
A       cpan/Test-Simple/lib/Test2/Util.pm
A       cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
A       cpan/Test-Simple/lib/Test2/Util/HashBase.pm
A       cpan/Test-Simple/lib/Test2/Util/Trace.pm
M       cpan/Test-Simple/lib/ok.pm
A       cpan/Test-Simple/t/00compile.t
D       cpan/Test-Simple/t/Builder/fork_with_new_stdout.t
R100    cpan/Test-Simple/t/00test_harness_check.t       
cpan/Test-Simple/t/Legacy/00test_harness_check.t
R100    cpan/Test-Simple/t/01-basic.t   cpan/Test-Simple/t/Legacy/01-basic.t
R100    cpan/Test-Simple/t/478-cmp_ok_hash.t    
cpan/Test-Simple/t/Legacy/478-cmp_ok_hash.t
R100    cpan/Test-Simple/t/BEGIN_require_ok.t   
cpan/Test-Simple/t/Legacy/BEGIN_require_ok.t
R100    cpan/Test-Simple/t/BEGIN_use_ok.t       
cpan/Test-Simple/t/Legacy/BEGIN_use_ok.t
A       cpan/Test-Simple/t/Legacy/Bugs/600.t
A       cpan/Test-Simple/t/Legacy/Bugs/629.t
R100    cpan/Test-Simple/t/Builder/Builder.t    
cpan/Test-Simple/t/Legacy/Builder/Builder.t
R100    cpan/Test-Simple/t/Builder/carp.t       
cpan/Test-Simple/t/Legacy/Builder/carp.t
R100    cpan/Test-Simple/t/Builder/create.t     
cpan/Test-Simple/t/Legacy/Builder/create.t
R100    cpan/Test-Simple/t/Builder/current_test.t       
cpan/Test-Simple/t/Legacy/Builder/current_test.t
R100    cpan/Test-Simple/t/Builder/current_test_without_plan.t  
cpan/Test-Simple/t/Legacy/Builder/current_test_without_plan.t
R100    cpan/Test-Simple/t/Builder/details.t    
cpan/Test-Simple/t/Legacy/Builder/details.t
R100    cpan/Test-Simple/t/Builder/done_testing.t       
cpan/Test-Simple/t/Legacy/Builder/done_testing.t
R100    cpan/Test-Simple/t/Builder/done_testing_double.t        
cpan/Test-Simple/t/Legacy/Builder/done_testing_double.t
R100    cpan/Test-Simple/t/Builder/done_testing_plan_mismatch.t 
cpan/Test-Simple/t/Legacy/Builder/done_testing_plan_mismatch.t
R100    cpan/Test-Simple/t/Builder/done_testing_with_no_plan.t  
cpan/Test-Simple/t/Legacy/Builder/done_testing_with_no_plan.t
R100    cpan/Test-Simple/t/Builder/done_testing_with_number.t   
cpan/Test-Simple/t/Legacy/Builder/done_testing_with_number.t
R100    cpan/Test-Simple/t/Builder/done_testing_with_plan.t     
cpan/Test-Simple/t/Legacy/Builder/done_testing_with_plan.t
A       cpan/Test-Simple/t/Legacy/Builder/fork_with_new_stdout.t
R100    cpan/Test-Simple/t/Builder/has_plan.t   
cpan/Test-Simple/t/Legacy/Builder/has_plan.t
R100    cpan/Test-Simple/t/Builder/has_plan2.t  
cpan/Test-Simple/t/Legacy/Builder/has_plan2.t
R100    cpan/Test-Simple/t/Builder/is_fh.t      
cpan/Test-Simple/t/Legacy/Builder/is_fh.t
R100    cpan/Test-Simple/t/Builder/is_passing.t 
cpan/Test-Simple/t/Legacy/Builder/is_passing.t
R100    cpan/Test-Simple/t/Builder/maybe_regex.t        
cpan/Test-Simple/t/Legacy/Builder/maybe_regex.t
R100    cpan/Test-Simple/t/Builder/no_diag.t    
cpan/Test-Simple/t/Legacy/Builder/no_diag.t
R100    cpan/Test-Simple/t/Builder/no_ending.t  
cpan/Test-Simple/t/Legacy/Builder/no_ending.t
R100    cpan/Test-Simple/t/Builder/no_header.t  
cpan/Test-Simple/t/Legacy/Builder/no_header.t
R100    cpan/Test-Simple/t/Builder/no_plan_at_all.t     
cpan/Test-Simple/t/Legacy/Builder/no_plan_at_all.t
R100    cpan/Test-Simple/t/Builder/ok_obj.t     
cpan/Test-Simple/t/Legacy/Builder/ok_obj.t
R100    cpan/Test-Simple/t/Builder/output.t     
cpan/Test-Simple/t/Legacy/Builder/output.t
R100    cpan/Test-Simple/t/Builder/reset.t      
cpan/Test-Simple/t/Legacy/Builder/reset.t
R100    cpan/Test-Simple/t/Builder/reset_outputs.t      
cpan/Test-Simple/t/Legacy/Builder/reset_outputs.t
R100    cpan/Test-Simple/t/Builder/try.t        
cpan/Test-Simple/t/Legacy/Builder/try.t
R100    cpan/Test-Simple/t/More.t       cpan/Test-Simple/t/Legacy/More.t
A       cpan/Test-Simple/t/Legacy/Regression/637.t
R100    cpan/Test-Simple/t/Simple/load.t        
cpan/Test-Simple/t/Legacy/Simple/load.t
A       cpan/Test-Simple/t/Legacy/Test2/Subtest.t
R100    cpan/Test-Simple/t/Tester/tbt_01basic.t 
cpan/Test-Simple/t/Legacy/Tester/tbt_01basic.t
R100    cpan/Test-Simple/t/Tester/tbt_02fhrestore.t     
cpan/Test-Simple/t/Legacy/Tester/tbt_02fhrestore.t
R100    cpan/Test-Simple/t/Tester/tbt_03die.t   
cpan/Test-Simple/t/Legacy/Tester/tbt_03die.t
R100    cpan/Test-Simple/t/Tester/tbt_04line_num.t      
cpan/Test-Simple/t/Legacy/Tester/tbt_04line_num.t
R100    cpan/Test-Simple/t/Tester/tbt_05faildiag.t      
cpan/Test-Simple/t/Legacy/Tester/tbt_05faildiag.t
R100    cpan/Test-Simple/t/Tester/tbt_06errormess.t     
cpan/Test-Simple/t/Legacy/Tester/tbt_06errormess.t
R100    cpan/Test-Simple/t/Tester/tbt_07args.t  
cpan/Test-Simple/t/Legacy/Tester/tbt_07args.t
R100    cpan/Test-Simple/t/Tester/tbt_08subtest.t       
cpan/Test-Simple/t/Legacy/Tester/tbt_08subtest.t
R100    cpan/Test-Simple/t/Tester/tbt_09do.t    
cpan/Test-Simple/t/Legacy/Tester/tbt_09do.t
R100    cpan/Test-Simple/t/Tester/tbt_09do_script.pl    
cpan/Test-Simple/t/Legacy/Tester/tbt_09do_script.pl
R096    cpan/Test-Simple/t/auto.t       cpan/Test-Simple/t/Legacy/auto.t
R100    cpan/Test-Simple/t/bad_plan.t   cpan/Test-Simple/t/Legacy/bad_plan.t
R081    cpan/Test-Simple/t/bail_out.t   cpan/Test-Simple/t/Legacy/bail_out.t
R100    cpan/Test-Simple/t/buffer.t     cpan/Test-Simple/t/Legacy/buffer.t
R100    cpan/Test-Simple/t/c_flag.t     cpan/Test-Simple/t/Legacy/c_flag.t
R100    cpan/Test-Simple/t/capture.t    cpan/Test-Simple/t/Legacy/capture.t
R100    cpan/Test-Simple/t/check_tests.t        
cpan/Test-Simple/t/Legacy/check_tests.t
R100    cpan/Test-Simple/t/circular_data.t      
cpan/Test-Simple/t/Legacy/circular_data.t
R100    cpan/Test-Simple/t/cmp_ok.t     cpan/Test-Simple/t/Legacy/cmp_ok.t
R095    cpan/Test-Simple/t/depth.t      cpan/Test-Simple/t/Legacy/depth.t
R093    cpan/Test-Simple/t/diag.t       cpan/Test-Simple/t/Legacy/diag.t
R095    cpan/Test-Simple/t/died.t       cpan/Test-Simple/t/Legacy/died.t
R073    cpan/Test-Simple/t/dont_overwrite_die_handler.t 
cpan/Test-Simple/t/Legacy/dont_overwrite_die_handler.t
R100    cpan/Test-Simple/t/eq_set.t     cpan/Test-Simple/t/Legacy/eq_set.t
R100    cpan/Test-Simple/t/exit.t       cpan/Test-Simple/t/Legacy/exit.t
R100    cpan/Test-Simple/t/explain.t    cpan/Test-Simple/t/Legacy/explain.t
A       cpan/Test-Simple/t/Legacy/explain_err_vars.t
R100    cpan/Test-Simple/t/extra.t      cpan/Test-Simple/t/Legacy/extra.t
R100    cpan/Test-Simple/t/extra_one.t  cpan/Test-Simple/t/Legacy/extra_one.t
R097    cpan/Test-Simple/t/fail-like.t  cpan/Test-Simple/t/Legacy/fail-like.t
R100    cpan/Test-Simple/t/fail-more.t  cpan/Test-Simple/t/Legacy/fail-more.t
R100    cpan/Test-Simple/t/fail.t       cpan/Test-Simple/t/Legacy/fail.t
R100    cpan/Test-Simple/t/fail_one.t   cpan/Test-Simple/t/Legacy/fail_one.t
R100    cpan/Test-Simple/t/filehandles.t        
cpan/Test-Simple/t/Legacy/filehandles.t
A       cpan/Test-Simple/t/Legacy/fork.t
R100    cpan/Test-Simple/t/harness_active.t     
cpan/Test-Simple/t/Legacy/harness_active.t
R100    cpan/Test-Simple/t/import.t     cpan/Test-Simple/t/Legacy/import.t
R100    cpan/Test-Simple/t/is_deeply_dne_bug.t  
cpan/Test-Simple/t/Legacy/is_deeply_dne_bug.t
R100    cpan/Test-Simple/t/is_deeply_fail.t     
cpan/Test-Simple/t/Legacy/is_deeply_fail.t
R085    cpan/Test-Simple/t/is_deeply_with_threads.t     
cpan/Test-Simple/t/Legacy/is_deeply_with_threads.t
R100    cpan/Test-Simple/t/missing.t    cpan/Test-Simple/t/Legacy/missing.t
R100    cpan/Test-Simple/t/new_ok.t     cpan/Test-Simple/t/Legacy/new_ok.t
R100    cpan/Test-Simple/t/no_plan.t    cpan/Test-Simple/t/Legacy/no_plan.t
R095    cpan/Test-Simple/t/no_tests.t   cpan/Test-Simple/t/Legacy/no_tests.t
R100    cpan/Test-Simple/t/note.t       cpan/Test-Simple/t/Legacy/note.t
R100    cpan/Test-Simple/t/overload.t   cpan/Test-Simple/t/Legacy/overload.t
R091    cpan/Test-Simple/t/overload_threads.t   
cpan/Test-Simple/t/Legacy/overload_threads.t
R100    cpan/Test-Simple/t/plan.t       cpan/Test-Simple/t/Legacy/plan.t
R100    cpan/Test-Simple/t/plan_bad.t   cpan/Test-Simple/t/Legacy/plan_bad.t
R100    cpan/Test-Simple/t/plan_is_noplan.t     
cpan/Test-Simple/t/Legacy/plan_is_noplan.t
R100    cpan/Test-Simple/t/plan_no_plan.t       
cpan/Test-Simple/t/Legacy/plan_no_plan.t
R100    cpan/Test-Simple/t/plan_shouldnt_import.t       
cpan/Test-Simple/t/Legacy/plan_shouldnt_import.t
R100    cpan/Test-Simple/t/plan_skip_all.t      
cpan/Test-Simple/t/Legacy/plan_skip_all.t
R100    cpan/Test-Simple/t/require_ok.t cpan/Test-Simple/t/Legacy/require_ok.t
R100    cpan/Test-Simple/t/run_test.t   cpan/Test-Simple/t/Legacy/run_test.t
R100    cpan/Test-Simple/t/simple.t     cpan/Test-Simple/t/Legacy/simple.t
R100    cpan/Test-Simple/t/skip.t       cpan/Test-Simple/t/Legacy/skip.t
R100    cpan/Test-Simple/t/skipall.t    cpan/Test-Simple/t/Legacy/skipall.t
A       cpan/Test-Simple/t/Legacy/strays.t
R080    cpan/Test-Simple/t/subtest/args.t       
cpan/Test-Simple/t/Legacy/subtest/args.t
R084    cpan/Test-Simple/t/subtest/bail_out.t   
cpan/Test-Simple/t/Legacy/subtest/bail_out.t
R087    cpan/Test-Simple/t/subtest/basic.t      
cpan/Test-Simple/t/Legacy/subtest/basic.t
R100    cpan/Test-Simple/t/subtest/die.t        
cpan/Test-Simple/t/Legacy/subtest/die.t
R083    cpan/Test-Simple/t/subtest/do.t cpan/Test-Simple/t/Legacy/subtest/do.t
A       cpan/Test-Simple/t/Legacy/subtest/events.t
R100    cpan/Test-Simple/t/subtest/for_do_t.test        
cpan/Test-Simple/t/Legacy/subtest/for_do_t.test
R057    cpan/Test-Simple/t/subtest/fork.t       
cpan/Test-Simple/t/Legacy/subtest/fork.t
R100    cpan/Test-Simple/t/subtest/implicit_done.t      
cpan/Test-Simple/t/Legacy/subtest/implicit_done.t
R094    cpan/Test-Simple/t/subtest/line_numbers.t       
cpan/Test-Simple/t/Legacy/subtest/line_numbers.t
R100    cpan/Test-Simple/t/subtest/plan.t       
cpan/Test-Simple/t/Legacy/subtest/plan.t
R095    cpan/Test-Simple/t/subtest/predicate.t  
cpan/Test-Simple/t/Legacy/subtest/predicate.t
R100    cpan/Test-Simple/t/subtest/singleton.t  
cpan/Test-Simple/t/Legacy/subtest/singleton.t
R056    cpan/Test-Simple/t/subtest/threads.t    
cpan/Test-Simple/t/Legacy/subtest/threads.t
R098    cpan/Test-Simple/t/subtest/todo.t       
cpan/Test-Simple/t/Legacy/subtest/todo.t
R100    cpan/Test-Simple/t/subtest/wstat.t      
cpan/Test-Simple/t/Legacy/subtest/wstat.t
R100    cpan/Test-Simple/t/tbm_doesnt_set_exported_to.t 
cpan/Test-Simple/t/Legacy/tbm_doesnt_set_exported_to.t
R100    cpan/Test-Simple/t/thread_taint.t       
cpan/Test-Simple/t/Legacy/thread_taint.t
R067    cpan/Test-Simple/t/threads.t    cpan/Test-Simple/t/Legacy/threads.t
R099    cpan/Test-Simple/t/todo.t       cpan/Test-Simple/t/Legacy/todo.t
R100    cpan/Test-Simple/t/undef.t      cpan/Test-Simple/t/Legacy/undef.t
R100    cpan/Test-Simple/t/use_ok.t     cpan/Test-Simple/t/Legacy/use_ok.t
R100    cpan/Test-Simple/t/useing.t     cpan/Test-Simple/t/Legacy/useing.t
R098    cpan/Test-Simple/t/utf8.t       cpan/Test-Simple/t/Legacy/utf8.t
R100    cpan/Test-Simple/t/versions.t   cpan/Test-Simple/t/Legacy/versions.t
A       cpan/Test-Simple/t/Legacy_And_Test2/builder_loaded_late.t
A       cpan/Test-Simple/t/Test2/acceptance/try_it_done_testing.t
A       cpan/Test-Simple/t/Test2/acceptance/try_it_fork.t
A       cpan/Test-Simple/t/Test2/acceptance/try_it_no_plan.t
A       cpan/Test-Simple/t/Test2/acceptance/try_it_plan.t
A       cpan/Test-Simple/t/Test2/acceptance/try_it_skip.t
A       cpan/Test-Simple/t/Test2/acceptance/try_it_threads.t
A       cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t
A       cpan/Test-Simple/t/Test2/behavior/Subtest_buffer_formatter.t
A       cpan/Test-Simple/t/Test2/behavior/Subtest_events.t
A       cpan/Test-Simple/t/Test2/behavior/Subtest_plan.t
A       cpan/Test-Simple/t/Test2/behavior/Taint.t
A       cpan/Test-Simple/t/Test2/behavior/err_var.t
A       cpan/Test-Simple/t/Test2/behavior/init_croak.t
A       cpan/Test-Simple/t/Test2/behavior/nested_context_exception.t
A       cpan/Test-Simple/t/Test2/behavior/no_load_api.t
A       cpan/Test-Simple/t/Test2/legacy/TAP.t
A       cpan/Test-Simple/t/Test2/modules/API.t
A       cpan/Test-Simple/t/Test2/modules/API/Breakage.t
A       cpan/Test-Simple/t/Test2/modules/API/Context.t
A       cpan/Test-Simple/t/Test2/modules/API/Instance.t
A       cpan/Test-Simple/t/Test2/modules/API/Stack.t
A       cpan/Test-Simple/t/Test2/modules/Event.t
A       cpan/Test-Simple/t/Test2/modules/Event/Bail.t
A       cpan/Test-Simple/t/Test2/modules/Event/Diag.t
A       cpan/Test-Simple/t/Test2/modules/Event/Exception.t
A       cpan/Test-Simple/t/Test2/modules/Event/Note.t
A       cpan/Test-Simple/t/Test2/modules/Event/Ok.t
A       cpan/Test-Simple/t/Test2/modules/Event/Plan.t
A       cpan/Test-Simple/t/Test2/modules/Event/Skip.t
A       cpan/Test-Simple/t/Test2/modules/Event/Subtest.t
A       cpan/Test-Simple/t/Test2/modules/Event/Waiting.t
A       cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t
A       cpan/Test-Simple/t/Test2/modules/Hub.t
A       cpan/Test-Simple/t/Test2/modules/Hub/Interceptor.t
A       cpan/Test-Simple/t/Test2/modules/Hub/Interceptor/Terminator.t
A       cpan/Test-Simple/t/Test2/modules/Hub/Subtest.t
A       cpan/Test-Simple/t/Test2/modules/IPC.t
A       cpan/Test-Simple/t/Test2/modules/IPC/Driver.t
A       cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
A       cpan/Test-Simple/t/Test2/modules/Util.t
A       cpan/Test-Simple/t/Test2/modules/Util/ExternalMeta.t
A       cpan/Test-Simple/t/Test2/modules/Util/HashBase.t
A       cpan/Test-Simple/t/Test2/modules/Util/Trace.t
A       cpan/Test-Simple/t/Test2/regression/gh_16.t
A       cpan/Test-Simple/t/Test2/regression/ipc_files_abort_exit.t
D       cpan/Test-Simple/t/dependents.t
D       cpan/Test-Simple/t/fork.t
R100    cpan/Test-Simple/t/MyTest.pm    cpan/Test-Simple/t/lib/MyTest.pm
R100    cpan/Test-Simple/t/SmallTest.pm cpan/Test-Simple/t/lib/SmallTest.pm
A       cpan/Test-Simple/t/regression/642_persistent_end.t
A       cpan/Test-Simple/t/regression/no_name_in_subtest.t
D       cpan/Test-Simple/t/subtest/exceptions.t
A       cpan/Test-Simple/t/tools.pl
A       cpan/Test-Simple/t/tools.t
M       ext/XS-APItest/t/svpeek.t
M       lib/.gitignore
M       win32/Makefile
M       win32/makefile.mk
-----------------------------------------------------------------------

Summary of changes:
 MANIFEST                                           |  327 ++-
 Makefile.SH                                        |   35 +-
 cpan/Test-Simple/lib/Test/Builder.pm               | 3030 +++++++++-----------
 cpan/Test-Simple/lib/Test/Builder/Formatter.pm     |  112 +
 cpan/Test-Simple/lib/Test/Builder/Module.pm        |    5 +-
 cpan/Test-Simple/lib/Test/Builder/Tester.pm        |   50 +-
 cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm  |    2 +-
 cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm      |   61 +
 cpan/Test-Simple/lib/Test/FAQ.pod                  |  371 +++
 cpan/Test-Simple/lib/Test/More.pm                  |   14 +-
 cpan/Test-Simple/lib/Test/Simple.pm                |    3 +-
 cpan/Test-Simple/lib/Test/Tester.pm                |    5 +-
 cpan/Test-Simple/lib/Test/Tester/Capture.pm        |   18 +-
 cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm  |    3 +
 cpan/Test-Simple/lib/Test/Tester/Delegate.pm       |    3 +
 cpan/Test-Simple/lib/Test/use/ok.pm                |    4 +-
 cpan/Test-Simple/lib/Test2.pm                      |  157 +
 cpan/Test-Simple/lib/Test2/API.pm                  | 1275 ++++++++
 cpan/Test-Simple/lib/Test2/API/Breakage.pm         |  172 ++
 cpan/Test-Simple/lib/Test2/API/Context.pm          |  713 +++++
 cpan/Test-Simple/lib/Test2/API/Instance.pm         |  729 +++++
 cpan/Test-Simple/lib/Test2/API/Stack.pm            |  220 ++
 cpan/Test-Simple/lib/Test2/Event.pm                |  215 ++
 cpan/Test-Simple/lib/Test2/Event/Bail.pm           |  102 +
 cpan/Test-Simple/lib/Test2/Event/Diag.pm           |   83 +
 cpan/Test-Simple/lib/Test2/Event/Exception.pm      |   88 +
 cpan/Test-Simple/lib/Test2/Event/Note.pm           |   81 +
 cpan/Test-Simple/lib/Test2/Event/Ok.pm             |  149 +
 cpan/Test-Simple/lib/Test2/Event/Plan.pm           |  160 ++
 cpan/Test-Simple/lib/Test2/Event/Skip.pm           |  108 +
 cpan/Test-Simple/lib/Test2/Event/Subtest.pm        |   97 +
 cpan/Test-Simple/lib/Test2/Event/Waiting.pm        |   61 +
 cpan/Test-Simple/lib/Test2/Formatter.pm            |   94 +
 cpan/Test-Simple/lib/Test2/Formatter/TAP.pm        |  501 ++++
 cpan/Test-Simple/lib/Test2/Hub.pm                  |  800 ++++++
 cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm      |   72 +
 .../lib/Test2/Hub/Interceptor/Terminator.pm        |   51 +
 cpan/Test-Simple/lib/Test2/Hub/Subtest.pm          |  123 +
 cpan/Test-Simple/lib/Test2/IPC.pm                  |  139 +
 cpan/Test-Simple/lib/Test2/IPC/Driver.pm           |  292 ++
 cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm     |  378 +++
 cpan/Test-Simple/lib/Test2/Transition.pod          |  504 ++++
 cpan/Test-Simple/lib/Test2/Util.pm                 |  232 ++
 cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm    |  182 ++
 cpan/Test-Simple/lib/Test2/Util/HashBase.pm        |  264 ++
 cpan/Test-Simple/lib/Test2/Util/Trace.pm           |  159 +
 cpan/Test-Simple/lib/ok.pm                         |    4 +-
 cpan/Test-Simple/t/00compile.t                     |   43 +
 cpan/Test-Simple/t/Builder/fork_with_new_stdout.t  |   54 -
 .../t/{ => Legacy}/00test_harness_check.t          |    0
 cpan/Test-Simple/t/{ => Legacy}/01-basic.t         |    0
 cpan/Test-Simple/t/{ => Legacy}/478-cmp_ok_hash.t  |    0
 cpan/Test-Simple/t/{ => Legacy}/BEGIN_require_ok.t |    0
 cpan/Test-Simple/t/{ => Legacy}/BEGIN_use_ok.t     |    0
 cpan/Test-Simple/t/Legacy/Bugs/600.t               |   16 +
 cpan/Test-Simple/t/Legacy/Bugs/629.t               |   49 +
 cpan/Test-Simple/t/{ => Legacy}/Builder/Builder.t  |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/carp.t     |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/create.t   |    0
 .../t/{ => Legacy}/Builder/current_test.t          |    0
 .../Builder/current_test_without_plan.t            |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/details.t  |    0
 .../t/{ => Legacy}/Builder/done_testing.t          |    0
 .../t/{ => Legacy}/Builder/done_testing_double.t   |    0
 .../Builder/done_testing_plan_mismatch.t           |    0
 .../Builder/done_testing_with_no_plan.t            |    0
 .../Builder/done_testing_with_number.t             |    0
 .../{ => Legacy}/Builder/done_testing_with_plan.t  |    0
 .../t/Legacy/Builder/fork_with_new_stdout.t        |   51 +
 cpan/Test-Simple/t/{ => Legacy}/Builder/has_plan.t |    0
 .../Test-Simple/t/{ => Legacy}/Builder/has_plan2.t |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/is_fh.t    |    0
 .../t/{ => Legacy}/Builder/is_passing.t            |    0
 .../t/{ => Legacy}/Builder/maybe_regex.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/no_diag.t  |    0
 .../Test-Simple/t/{ => Legacy}/Builder/no_ending.t |    0
 .../Test-Simple/t/{ => Legacy}/Builder/no_header.t |    0
 .../t/{ => Legacy}/Builder/no_plan_at_all.t        |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/ok_obj.t   |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/output.t   |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/reset.t    |    0
 .../t/{ => Legacy}/Builder/reset_outputs.t         |    0
 cpan/Test-Simple/t/{ => Legacy}/Builder/try.t      |    0
 cpan/Test-Simple/t/{ => Legacy}/More.t             |    0
 cpan/Test-Simple/t/Legacy/Regression/637.t         |   49 +
 cpan/Test-Simple/t/{ => Legacy}/Simple/load.t      |    0
 cpan/Test-Simple/t/Legacy/Test2/Subtest.t          |   31 +
 .../t/{ => Legacy}/Tester/tbt_01basic.t            |    0
 .../t/{ => Legacy}/Tester/tbt_02fhrestore.t        |    0
 cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_03die.t |    0
 .../t/{ => Legacy}/Tester/tbt_04line_num.t         |    0
 .../t/{ => Legacy}/Tester/tbt_05faildiag.t         |    0
 .../t/{ => Legacy}/Tester/tbt_06errormess.t        |    0
 .../Test-Simple/t/{ => Legacy}/Tester/tbt_07args.t |    0
 .../t/{ => Legacy}/Tester/tbt_08subtest.t          |    0
 cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_09do.t  |    0
 .../t/{ => Legacy}/Tester/tbt_09do_script.pl       |    0
 cpan/Test-Simple/t/{ => Legacy}/auto.t             |    2 +-
 cpan/Test-Simple/t/{ => Legacy}/bad_plan.t         |    0
 cpan/Test-Simple/t/{ => Legacy}/bail_out.t         |    3 +
 cpan/Test-Simple/t/{ => Legacy}/buffer.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/c_flag.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/capture.t          |    0
 cpan/Test-Simple/t/{ => Legacy}/check_tests.t      |    0
 cpan/Test-Simple/t/{ => Legacy}/circular_data.t    |    0
 cpan/Test-Simple/t/{ => Legacy}/cmp_ok.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/depth.t            |    2 +-
 cpan/Test-Simple/t/{ => Legacy}/diag.t             |   26 +-
 cpan/Test-Simple/t/{ => Legacy}/died.t             |    2 +-
 .../t/{ => Legacy}/dont_overwrite_die_handler.t    |    6 +-
 cpan/Test-Simple/t/{ => Legacy}/eq_set.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/exit.t             |    0
 cpan/Test-Simple/t/{ => Legacy}/explain.t          |    0
 cpan/Test-Simple/t/Legacy/explain_err_vars.t       |    9 +
 cpan/Test-Simple/t/{ => Legacy}/extra.t            |    0
 cpan/Test-Simple/t/{ => Legacy}/extra_one.t        |    0
 cpan/Test-Simple/t/{ => Legacy}/fail-like.t        |    2 +-
 cpan/Test-Simple/t/{ => Legacy}/fail-more.t        |    0
 cpan/Test-Simple/t/{ => Legacy}/fail.t             |    0
 cpan/Test-Simple/t/{ => Legacy}/fail_one.t         |    0
 cpan/Test-Simple/t/{ => Legacy}/filehandles.t      |    0
 cpan/Test-Simple/t/Legacy/fork.t                   |   29 +
 cpan/Test-Simple/t/{ => Legacy}/harness_active.t   |    0
 cpan/Test-Simple/t/{ => Legacy}/import.t           |    0
 .../Test-Simple/t/{ => Legacy}/is_deeply_dne_bug.t |    0
 cpan/Test-Simple/t/{ => Legacy}/is_deeply_fail.t   |    0
 .../t/{ => Legacy}/is_deeply_with_threads.t        |   16 +-
 cpan/Test-Simple/t/{ => Legacy}/missing.t          |    0
 cpan/Test-Simple/t/{ => Legacy}/new_ok.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/no_plan.t          |    0
 cpan/Test-Simple/t/{ => Legacy}/no_tests.t         |    2 +-
 cpan/Test-Simple/t/{ => Legacy}/note.t             |    0
 cpan/Test-Simple/t/{ => Legacy}/overload.t         |    0
 cpan/Test-Simple/t/{ => Legacy}/overload_threads.t |    3 +-
 cpan/Test-Simple/t/{ => Legacy}/plan.t             |    0
 cpan/Test-Simple/t/{ => Legacy}/plan_bad.t         |    0
 cpan/Test-Simple/t/{ => Legacy}/plan_is_noplan.t   |    0
 cpan/Test-Simple/t/{ => Legacy}/plan_no_plan.t     |    0
 .../t/{ => Legacy}/plan_shouldnt_import.t          |    0
 cpan/Test-Simple/t/{ => Legacy}/plan_skip_all.t    |    0
 cpan/Test-Simple/t/{ => Legacy}/require_ok.t       |    0
 cpan/Test-Simple/t/{ => Legacy}/run_test.t         |    0
 cpan/Test-Simple/t/{ => Legacy}/simple.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/skip.t             |    0
 cpan/Test-Simple/t/{ => Legacy}/skipall.t          |    0
 cpan/Test-Simple/t/Legacy/strays.t                 |   27 +
 cpan/Test-Simple/t/{ => Legacy}/subtest/args.t     |   10 +-
 cpan/Test-Simple/t/{ => Legacy}/subtest/bail_out.t |   10 +-
 cpan/Test-Simple/t/{ => Legacy}/subtest/basic.t    |   12 +-
 cpan/Test-Simple/t/{ => Legacy}/subtest/die.t      |    0
 cpan/Test-Simple/t/{ => Legacy}/subtest/do.t       |    2 +-
 cpan/Test-Simple/t/Legacy/subtest/events.t         |   20 +
 .../t/{ => Legacy}/subtest/for_do_t.test           |    0
 cpan/Test-Simple/t/{ => Legacy}/subtest/fork.t     |   33 +-
 .../t/{ => Legacy}/subtest/implicit_done.t         |    0
 .../t/{ => Legacy}/subtest/line_numbers.t          |   10 +-
 cpan/Test-Simple/t/{ => Legacy}/subtest/plan.t     |    0
 .../Test-Simple/t/{ => Legacy}/subtest/predicate.t |   12 +-
 .../Test-Simple/t/{ => Legacy}/subtest/singleton.t |    0
 cpan/Test-Simple/t/{ => Legacy}/subtest/threads.t  |   11 +-
 cpan/Test-Simple/t/{ => Legacy}/subtest/todo.t     |    5 +-
 cpan/Test-Simple/t/{ => Legacy}/subtest/wstat.t    |    0
 .../t/{ => Legacy}/tbm_doesnt_set_exported_to.t    |    0
 cpan/Test-Simple/t/{ => Legacy}/thread_taint.t     |    0
 cpan/Test-Simple/t/{ => Legacy}/threads.t          |   19 +-
 cpan/Test-Simple/t/{ => Legacy}/todo.t             |    2 +-
 cpan/Test-Simple/t/{ => Legacy}/undef.t            |    0
 cpan/Test-Simple/t/{ => Legacy}/use_ok.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/useing.t           |    0
 cpan/Test-Simple/t/{ => Legacy}/utf8.t             |    6 +-
 cpan/Test-Simple/t/{ => Legacy}/versions.t         |    0
 .../t/Legacy_And_Test2/builder_loaded_late.t       |   35 +
 .../t/Test2/acceptance/try_it_done_testing.t       |   26 +
 cpan/Test-Simple/t/Test2/acceptance/try_it_fork.t  |   34 +
 .../t/Test2/acceptance/try_it_no_plan.t            |   24 +
 cpan/Test-Simple/t/Test2/acceptance/try_it_plan.t  |   24 +
 cpan/Test-Simple/t/Test2/acceptance/try_it_skip.t  |   16 +
 .../t/Test2/acceptance/try_it_threads.t            |   35 +
 cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t  |   52 +
 .../t/Test2/behavior/Subtest_buffer_formatter.t    |   90 +
 cpan/Test-Simple/t/Test2/behavior/Subtest_events.t |   17 +
 cpan/Test-Simple/t/Test2/behavior/Subtest_plan.t   |   19 +
 cpan/Test-Simple/t/Test2/behavior/Taint.t          |   23 +
 cpan/Test-Simple/t/Test2/behavior/err_var.t        |   15 +
 cpan/Test-Simple/t/Test2/behavior/init_croak.t     |   28 +
 .../t/Test2/behavior/nested_context_exception.t    |  111 +
 cpan/Test-Simple/t/Test2/behavior/no_load_api.t    |   49 +
 cpan/Test-Simple/t/Test2/legacy/TAP.t              |  182 ++
 cpan/Test-Simple/t/Test2/modules/API.t             |  266 ++
 cpan/Test-Simple/t/Test2/modules/API/Breakage.t    |   89 +
 cpan/Test-Simple/t/Test2/modules/API/Context.t     |  444 +++
 cpan/Test-Simple/t/Test2/modules/API/Instance.t    |  466 +++
 cpan/Test-Simple/t/Test2/modules/API/Stack.t       |   79 +
 cpan/Test-Simple/t/Test2/modules/Event.t           |   40 +
 cpan/Test-Simple/t/Test2/modules/Event/Bail.t      |   29 +
 cpan/Test-Simple/t/Test2/modules/Event/Diag.t      |   31 +
 cpan/Test-Simple/t/Test2/modules/Event/Exception.t |   17 +
 cpan/Test-Simple/t/Test2/modules/Event/Note.t      |   30 +
 cpan/Test-Simple/t/Test2/modules/Event/Ok.t        |  102 +
 cpan/Test-Simple/t/Test2/modules/Event/Plan.t      |  107 +
 cpan/Test-Simple/t/Test2/modules/Event/Skip.t      |   24 +
 cpan/Test-Simple/t/Test2/modules/Event/Subtest.t   |   30 +
 cpan/Test-Simple/t/Test2/modules/Event/Waiting.t   |   16 +
 cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t   |  464 +++
 cpan/Test-Simple/t/Test2/modules/Hub.t             |  484 ++++
 cpan/Test-Simple/t/Test2/modules/Hub/Interceptor.t |   15 +
 .../t/Test2/modules/Hub/Interceptor/Terminator.t   |    9 +
 cpan/Test-Simple/t/Test2/modules/Hub/Subtest.t     |  124 +
 cpan/Test-Simple/t/Test2/modules/IPC.t             |   19 +
 cpan/Test-Simple/t/Test2/modules/IPC/Driver.t      |   57 +
 .../Test-Simple/t/Test2/modules/IPC/Driver/Files.t |  282 ++
 cpan/Test-Simple/t/Test2/modules/Util.t            |   37 +
 .../t/Test2/modules/Util/ExternalMeta.t            |   70 +
 cpan/Test-Simple/t/Test2/modules/Util/HashBase.t   |  105 +
 cpan/Test-Simple/t/Test2/modules/Util/Trace.t      |   41 +
 cpan/Test-Simple/t/Test2/regression/gh_16.t        |   23 +
 .../t/Test2/regression/ipc_files_abort_exit.t      |   62 +
 cpan/Test-Simple/t/dependents.t                    |   44 -
 cpan/Test-Simple/t/fork.t                          |   32 -
 cpan/Test-Simple/t/{ => lib}/MyTest.pm             |    0
 cpan/Test-Simple/t/{ => lib}/SmallTest.pm          |    0
 cpan/Test-Simple/t/regression/642_persistent_end.t |   25 +
 cpan/Test-Simple/t/regression/no_name_in_subtest.t |   13 +
 cpan/Test-Simple/t/subtest/exceptions.t            |   63 -
 cpan/Test-Simple/t/tools.pl                        |  217 ++
 cpan/Test-Simple/t/tools.t                         |  210 ++
 ext/XS-APItest/t/svpeek.t                          |    6 +
 lib/.gitignore                                     |    2 +
 win32/GNUmakefile                                  |    1 +
 win32/Makefile                                     |    1 +
 win32/makefile.mk                                  |    1 +
 231 files changed, 15729 insertions(+), 2050 deletions(-)
 create mode 100644 cpan/Test-Simple/lib/Test/Builder/Formatter.pm
 create mode 100644 cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
 create mode 100644 cpan/Test-Simple/lib/Test/FAQ.pod
 create mode 100644 cpan/Test-Simple/lib/Test2.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/API.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/API/Breakage.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/API/Context.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/API/Instance.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/API/Stack.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Bail.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Diag.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Exception.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Note.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Ok.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Plan.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Skip.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Subtest.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Event/Waiting.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Formatter.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Hub.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/IPC.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/IPC/Driver.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Transition.pod
 create mode 100644 cpan/Test-Simple/lib/Test2/Util.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Util/HashBase.pm
 create mode 100644 cpan/Test-Simple/lib/Test2/Util/Trace.pm
 create mode 100644 cpan/Test-Simple/t/00compile.t
 delete mode 100644 cpan/Test-Simple/t/Builder/fork_with_new_stdout.t
 rename cpan/Test-Simple/t/{ => Legacy}/00test_harness_check.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/01-basic.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/478-cmp_ok_hash.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/BEGIN_require_ok.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/BEGIN_use_ok.t (100%)
 create mode 100644 cpan/Test-Simple/t/Legacy/Bugs/600.t
 create mode 100644 cpan/Test-Simple/t/Legacy/Bugs/629.t
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/Builder.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/carp.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/create.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/current_test.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/current_test_without_plan.t 
(100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/details.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/done_testing.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/done_testing_double.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/done_testing_plan_mismatch.t 
(100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/done_testing_with_no_plan.t 
(100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/done_testing_with_number.t 
(100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/done_testing_with_plan.t (100%)
 create mode 100644 cpan/Test-Simple/t/Legacy/Builder/fork_with_new_stdout.t
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/has_plan.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/has_plan2.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/is_fh.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/is_passing.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/maybe_regex.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/no_diag.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/no_ending.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/no_header.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/no_plan_at_all.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/ok_obj.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/output.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/reset.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/reset_outputs.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Builder/try.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/More.t (100%)
 create mode 100644 cpan/Test-Simple/t/Legacy/Regression/637.t
 rename cpan/Test-Simple/t/{ => Legacy}/Simple/load.t (100%)
 create mode 100644 cpan/Test-Simple/t/Legacy/Test2/Subtest.t
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_01basic.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_02fhrestore.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_03die.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_04line_num.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_05faildiag.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_06errormess.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_07args.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_08subtest.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_09do.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_09do_script.pl (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/auto.t (96%)
 rename cpan/Test-Simple/t/{ => Legacy}/bad_plan.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/bail_out.t (81%)
 rename cpan/Test-Simple/t/{ => Legacy}/buffer.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/c_flag.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/capture.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/check_tests.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/circular_data.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/cmp_ok.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/depth.t (95%)
 rename cpan/Test-Simple/t/{ => Legacy}/diag.t (93%)
 rename cpan/Test-Simple/t/{ => Legacy}/died.t (95%)
 rename cpan/Test-Simple/t/{ => Legacy}/dont_overwrite_die_handler.t (73%)
 rename cpan/Test-Simple/t/{ => Legacy}/eq_set.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/exit.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/explain.t (100%)
 create mode 100644 cpan/Test-Simple/t/Legacy/explain_err_vars.t
 rename cpan/Test-Simple/t/{ => Legacy}/extra.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/extra_one.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/fail-like.t (97%)
 rename cpan/Test-Simple/t/{ => Legacy}/fail-more.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/fail.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/fail_one.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/filehandles.t (100%)
 create mode 100644 cpan/Test-Simple/t/Legacy/fork.t
 rename cpan/Test-Simple/t/{ => Legacy}/harness_active.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/import.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/is_deeply_dne_bug.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/is_deeply_fail.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/is_deeply_with_threads.t (85%)
 rename cpan/Test-Simple/t/{ => Legacy}/missing.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/new_ok.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/no_plan.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/no_tests.t (95%)
 rename cpan/Test-Simple/t/{ => Legacy}/note.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/overload.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/overload_threads.t (91%)
 rename cpan/Test-Simple/t/{ => Legacy}/plan.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/plan_bad.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/plan_is_noplan.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/plan_no_plan.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/plan_shouldnt_import.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/plan_skip_all.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/require_ok.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/run_test.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/simple.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/skip.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/skipall.t (100%)
 create mode 100644 cpan/Test-Simple/t/Legacy/strays.t
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/args.t (80%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/bail_out.t (84%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/basic.t (87%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/die.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/do.t (83%)
 create mode 100644 cpan/Test-Simple/t/Legacy/subtest/events.t
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/for_do_t.test (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/fork.t (57%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/implicit_done.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/line_numbers.t (94%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/plan.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/predicate.t (95%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/singleton.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/threads.t (56%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/todo.t (98%)
 rename cpan/Test-Simple/t/{ => Legacy}/subtest/wstat.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/tbm_doesnt_set_exported_to.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/thread_taint.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/threads.t (67%)
 rename cpan/Test-Simple/t/{ => Legacy}/todo.t (99%)
 rename cpan/Test-Simple/t/{ => Legacy}/undef.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/use_ok.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/useing.t (100%)
 rename cpan/Test-Simple/t/{ => Legacy}/utf8.t (98%)
 rename cpan/Test-Simple/t/{ => Legacy}/versions.t (100%)
 create mode 100644 cpan/Test-Simple/t/Legacy_And_Test2/builder_loaded_late.t
 create mode 100644 cpan/Test-Simple/t/Test2/acceptance/try_it_done_testing.t
 create mode 100644 cpan/Test-Simple/t/Test2/acceptance/try_it_fork.t
 create mode 100644 cpan/Test-Simple/t/Test2/acceptance/try_it_no_plan.t
 create mode 100644 cpan/Test-Simple/t/Test2/acceptance/try_it_plan.t
 create mode 100644 cpan/Test-Simple/t/Test2/acceptance/try_it_skip.t
 create mode 100644 cpan/Test-Simple/t/Test2/acceptance/try_it_threads.t
 create mode 100644 cpan/Test-Simple/t/Test2/acceptance/try_it_todo.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/Subtest_buffer_formatter.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/Subtest_events.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/Subtest_plan.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/Taint.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/err_var.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/init_croak.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/nested_context_exception.t
 create mode 100644 cpan/Test-Simple/t/Test2/behavior/no_load_api.t
 create mode 100644 cpan/Test-Simple/t/Test2/legacy/TAP.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/API.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/API/Breakage.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/API/Context.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/API/Instance.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/API/Stack.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Bail.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Diag.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Exception.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Note.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Ok.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Plan.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Skip.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Subtest.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Event/Waiting.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Hub.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Hub/Interceptor.t
 create mode 100644 
cpan/Test-Simple/t/Test2/modules/Hub/Interceptor/Terminator.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Hub/Subtest.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/IPC.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/IPC/Driver.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Util.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Util/ExternalMeta.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Util/HashBase.t
 create mode 100644 cpan/Test-Simple/t/Test2/modules/Util/Trace.t
 create mode 100644 cpan/Test-Simple/t/Test2/regression/gh_16.t
 create mode 100644 cpan/Test-Simple/t/Test2/regression/ipc_files_abort_exit.t
 delete mode 100644 cpan/Test-Simple/t/dependents.t
 delete mode 100644 cpan/Test-Simple/t/fork.t
 rename cpan/Test-Simple/t/{ => lib}/MyTest.pm (100%)
 rename cpan/Test-Simple/t/{ => lib}/SmallTest.pm (100%)
 create mode 100644 cpan/Test-Simple/t/regression/642_persistent_end.t
 create mode 100644 cpan/Test-Simple/t/regression/no_name_in_subtest.t
 delete mode 100644 cpan/Test-Simple/t/subtest/exceptions.t
 create mode 100644 cpan/Test-Simple/t/tools.pl
 create mode 100644 cpan/Test-Simple/t/tools.t

diff --git a/MANIFEST b/MANIFEST
index 4d9ab9f..cc7d29c 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -2460,11 +2460,44 @@ cpan/Test-Harness/t/yamlish-output.t                    
Test::Harness test
 cpan/Test-Harness/t/yamlish.t                          Test::Harness test
 cpan/Test-Harness/t/yamlish-writer.t                   Test::Harness test
 cpan/Test-Simple/lib/ok.pm
+cpan/Test-Simple/lib/Test2/API/Breakage.pm
+cpan/Test-Simple/lib/Test2/API/Context.pm
+cpan/Test-Simple/lib/Test2/API/Instance.pm
+cpan/Test-Simple/lib/Test2/API.pm
+cpan/Test-Simple/lib/Test2/API/Stack.pm
+cpan/Test-Simple/lib/Test2/Event/Bail.pm
+cpan/Test-Simple/lib/Test2/Event/Diag.pm
+cpan/Test-Simple/lib/Test2/Event/Exception.pm
+cpan/Test-Simple/lib/Test2/Event/Note.pm
+cpan/Test-Simple/lib/Test2/Event/Ok.pm
+cpan/Test-Simple/lib/Test2/Event/Plan.pm
+cpan/Test-Simple/lib/Test2/Event.pm
+cpan/Test-Simple/lib/Test2/Event/Skip.pm
+cpan/Test-Simple/lib/Test2/Event/Subtest.pm
+cpan/Test-Simple/lib/Test2/Event/Waiting.pm
+cpan/Test-Simple/lib/Test2/Formatter.pm
+cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
+cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
+cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
+cpan/Test-Simple/lib/Test2/Hub.pm
+cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
+cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
+cpan/Test-Simple/lib/Test2/IPC/Driver.pm
+cpan/Test-Simple/lib/Test2/IPC.pm
+cpan/Test-Simple/lib/Test2.pm
+cpan/Test-Simple/lib/Test2/Transition.pod
+cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
+cpan/Test-Simple/lib/Test2/Util/HashBase.pm
+cpan/Test-Simple/lib/Test2/Util.pm
+cpan/Test-Simple/lib/Test2/Util/Trace.pm
+cpan/Test-Simple/lib/Test/Builder/Formatter.pm
 cpan/Test-Simple/lib/Test/Builder/IO/Scalar.pm
 cpan/Test-Simple/lib/Test/Builder/Module.pm
 cpan/Test-Simple/lib/Test/Builder.pm
 cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
 cpan/Test-Simple/lib/Test/Builder/Tester.pm
+cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
+cpan/Test-Simple/lib/Test/FAQ.pod
 cpan/Test-Simple/lib/Test/More.pm
 cpan/Test-Simple/lib/Test/Simple.pm
 cpan/Test-Simple/lib/Test/Tester/Capture.pm
@@ -2473,73 +2506,137 @@ cpan/Test-Simple/lib/Test/Tester/Delegate.pm
 cpan/Test-Simple/lib/Test/Tester.pm
 cpan/Test-Simple/lib/Test/Tutorial.pod
 cpan/Test-Simple/lib/Test/use/ok.pm
-cpan/Test-Simple/t/00test_harness_check.t
-cpan/Test-Simple/t/01-basic.t
-cpan/Test-Simple/t/478-cmp_ok_hash.t
-cpan/Test-Simple/t/auto.t
-cpan/Test-Simple/t/bad_plan.t
-cpan/Test-Simple/t/bail_out.t
-cpan/Test-Simple/t/BEGIN_require_ok.t
-cpan/Test-Simple/t/BEGIN_use_ok.t
-cpan/Test-Simple/t/buffer.t
-cpan/Test-Simple/t/Builder/Builder.t
-cpan/Test-Simple/t/Builder/carp.t
-cpan/Test-Simple/t/Builder/create.t
-cpan/Test-Simple/t/Builder/current_test.t
-cpan/Test-Simple/t/Builder/current_test_without_plan.t
-cpan/Test-Simple/t/Builder/details.t
-cpan/Test-Simple/t/Builder/done_testing_double.t
-cpan/Test-Simple/t/Builder/done_testing_plan_mismatch.t
-cpan/Test-Simple/t/Builder/done_testing.t
-cpan/Test-Simple/t/Builder/done_testing_with_no_plan.t
-cpan/Test-Simple/t/Builder/done_testing_with_number.t
-cpan/Test-Simple/t/Builder/done_testing_with_plan.t
-cpan/Test-Simple/t/Builder/fork_with_new_stdout.t
-cpan/Test-Simple/t/Builder/has_plan2.t
-cpan/Test-Simple/t/Builder/has_plan.t
-cpan/Test-Simple/t/Builder/is_fh.t
-cpan/Test-Simple/t/Builder/is_passing.t
-cpan/Test-Simple/t/Builder/maybe_regex.t
-cpan/Test-Simple/t/Builder/no_diag.t
-cpan/Test-Simple/t/Builder/no_ending.t
-cpan/Test-Simple/t/Builder/no_header.t
-cpan/Test-Simple/t/Builder/no_plan_at_all.t
-cpan/Test-Simple/t/Builder/ok_obj.t
-cpan/Test-Simple/t/Builder/output.t
-cpan/Test-Simple/t/Builder/reset_outputs.t
-cpan/Test-Simple/t/Builder/reset.t
-cpan/Test-Simple/t/Builder/try.t
-cpan/Test-Simple/t/capture.t
-cpan/Test-Simple/t/c_flag.t
-cpan/Test-Simple/t/check_tests.t
-cpan/Test-Simple/t/circular_data.t
-cpan/Test-Simple/t/cmp_ok.t
-cpan/Test-Simple/t/dependents.t
-cpan/Test-Simple/t/depth.t
-cpan/Test-Simple/t/diag.t
-cpan/Test-Simple/t/died.t
-cpan/Test-Simple/t/dont_overwrite_die_handler.t
-cpan/Test-Simple/t/eq_set.t
-cpan/Test-Simple/t/exit.t
-cpan/Test-Simple/t/explain.t
-cpan/Test-Simple/t/extra_one.t
-cpan/Test-Simple/t/extra.t
-cpan/Test-Simple/t/fail-like.t
-cpan/Test-Simple/t/fail-more.t
-cpan/Test-Simple/t/fail_one.t
-cpan/Test-Simple/t/fail.t
-cpan/Test-Simple/t/filehandles.t
-cpan/Test-Simple/t/fork.t
-cpan/Test-Simple/t/harness_active.t
-cpan/Test-Simple/t/import.t
-cpan/Test-Simple/t/is_deeply_dne_bug.t
-cpan/Test-Simple/t/is_deeply_fail.t
-cpan/Test-Simple/t/is_deeply_with_threads.t
+cpan/Test-Simple/t/00compile.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
+cpan/Test-Simple/t/Legacy_And_Test2/builder_loaded_late.t
+cpan/Test-Simple/t/Legacy/auto.t
+cpan/Test-Simple/t/Legacy/bad_plan.t
+cpan/Test-Simple/t/Legacy/bail_out.t
+cpan/Test-Simple/t/Legacy/BEGIN_require_ok.t
+cpan/Test-Simple/t/Legacy/BEGIN_use_ok.t
+cpan/Test-Simple/t/Legacy/buffer.t
+cpan/Test-Simple/t/Legacy/Bugs/600.t
+cpan/Test-Simple/t/Legacy/Bugs/629.t
+cpan/Test-Simple/t/Legacy/Builder/Builder.t
+cpan/Test-Simple/t/Legacy/Builder/carp.t
+cpan/Test-Simple/t/Legacy/Builder/create.t
+cpan/Test-Simple/t/Legacy/Builder/current_test.t
+cpan/Test-Simple/t/Legacy/Builder/current_test_without_plan.t
+cpan/Test-Simple/t/Legacy/Builder/details.t
+cpan/Test-Simple/t/Legacy/Builder/done_testing_double.t
+cpan/Test-Simple/t/Legacy/Builder/done_testing_plan_mismatch.t
+cpan/Test-Simple/t/Legacy/Builder/done_testing.t
+cpan/Test-Simple/t/Legacy/Builder/done_testing_with_no_plan.t
+cpan/Test-Simple/t/Legacy/Builder/done_testing_with_number.t
+cpan/Test-Simple/t/Legacy/Builder/done_testing_with_plan.t
+cpan/Test-Simple/t/Legacy/Builder/fork_with_new_stdout.t
+cpan/Test-Simple/t/Legacy/Builder/has_plan2.t
+cpan/Test-Simple/t/Legacy/Builder/has_plan.t
+cpan/Test-Simple/t/Legacy/Builder/is_fh.t
+cpan/Test-Simple/t/Legacy/Builder/is_passing.t
+cpan/Test-Simple/t/Legacy/Builder/maybe_regex.t
+cpan/Test-Simple/t/Legacy/Builder/no_diag.t
+cpan/Test-Simple/t/Legacy/Builder/no_ending.t
+cpan/Test-Simple/t/Legacy/Builder/no_header.t
+cpan/Test-Simple/t/Legacy/Builder/no_plan_at_all.t
+cpan/Test-Simple/t/Legacy/Builder/ok_obj.t
+cpan/Test-Simple/t/Legacy/Builder/output.t
+cpan/Test-Simple/t/Legacy/Builder/reset_outputs.t
+cpan/Test-Simple/t/Legacy/Builder/reset.t
+cpan/Test-Simple/t/Legacy/Builder/try.t
+cpan/Test-Simple/t/Legacy/capture.t
+cpan/Test-Simple/t/Legacy/c_flag.t
+cpan/Test-Simple/t/Legacy/check_tests.t
+cpan/Test-Simple/t/Legacy/circular_data.t
+cpan/Test-Simple/t/Legacy/cmp_ok.t
+cpan/Test-Simple/t/Legacy/depth.t
+cpan/Test-Simple/t/Legacy/diag.t
+cpan/Test-Simple/t/Legacy/died.t
+cpan/Test-Simple/t/Legacy/dont_overwrite_die_handler.t
+cpan/Test-Simple/t/Legacy/eq_set.t
+cpan/Test-Simple/t/Legacy/exit.t
+cpan/Test-Simple/t/Legacy/explain_err_vars.t
+cpan/Test-Simple/t/Legacy/explain.t
+cpan/Test-Simple/t/Legacy/extra_one.t
+cpan/Test-Simple/t/Legacy/extra.t
+cpan/Test-Simple/t/Legacy/fail-like.t
+cpan/Test-Simple/t/Legacy/fail-more.t
+cpan/Test-Simple/t/Legacy/fail_one.t
+cpan/Test-Simple/t/Legacy/fail.t
+cpan/Test-Simple/t/Legacy/filehandles.t
+cpan/Test-Simple/t/Legacy/fork.t
+cpan/Test-Simple/t/Legacy/harness_active.t
+cpan/Test-Simple/t/Legacy/import.t
+cpan/Test-Simple/t/Legacy/is_deeply_dne_bug.t
+cpan/Test-Simple/t/Legacy/is_deeply_fail.t
+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_plan.t
+cpan/Test-Simple/t/Legacy/no_tests.t
+cpan/Test-Simple/t/Legacy/note.t
+cpan/Test-Simple/t/Legacy/overload.t
+cpan/Test-Simple/t/Legacy/overload_threads.t
+cpan/Test-Simple/t/Legacy/plan_bad.t
+cpan/Test-Simple/t/Legacy/plan_is_noplan.t
+cpan/Test-Simple/t/Legacy/plan_no_plan.t
+cpan/Test-Simple/t/Legacy/plan_shouldnt_import.t
+cpan/Test-Simple/t/Legacy/plan_skip_all.t
+cpan/Test-Simple/t/Legacy/plan.t
+cpan/Test-Simple/t/Legacy/Regression/637.t
+cpan/Test-Simple/t/Legacy/require_ok.t
+cpan/Test-Simple/t/Legacy/run_test.t
+cpan/Test-Simple/t/Legacy/Simple/load.t
+cpan/Test-Simple/t/Legacy/simple.t
+cpan/Test-Simple/t/Legacy/skipall.t
+cpan/Test-Simple/t/Legacy/skip.t
+cpan/Test-Simple/t/Legacy/strays.t
+cpan/Test-Simple/t/Legacy/subtest/args.t
+cpan/Test-Simple/t/Legacy/subtest/bail_out.t
+cpan/Test-Simple/t/Legacy/subtest/basic.t
+cpan/Test-Simple/t/Legacy/subtest/die.t
+cpan/Test-Simple/t/Legacy/subtest/do.t
+cpan/Test-Simple/t/Legacy/subtest/events.t
+cpan/Test-Simple/t/Legacy/subtest/for_do_t.test
+cpan/Test-Simple/t/Legacy/subtest/fork.t
+cpan/Test-Simple/t/Legacy/subtest/implicit_done.t
+cpan/Test-Simple/t/Legacy/subtest/line_numbers.t
+cpan/Test-Simple/t/Legacy/subtest/plan.t
+cpan/Test-Simple/t/Legacy/subtest/predicate.t
+cpan/Test-Simple/t/Legacy/subtest/singleton.t
+cpan/Test-Simple/t/Legacy/subtest/threads.t
+cpan/Test-Simple/t/Legacy/subtest/todo.t
+cpan/Test-Simple/t/Legacy/subtest/wstat.t
+cpan/Test-Simple/t/Legacy/tbm_doesnt_set_exported_to.t
+cpan/Test-Simple/t/Legacy/Test2/Subtest.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_01basic.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_02fhrestore.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_03die.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_04line_num.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_05faildiag.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_06errormess.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_07args.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_08subtest.t
+cpan/Test-Simple/t/Legacy/Tester/tbt_09do_script.pl
+cpan/Test-Simple/t/Legacy/Tester/tbt_09do.t
+cpan/Test-Simple/t/Legacy/threads.t
+cpan/Test-Simple/t/Legacy/thread_taint.t
+cpan/Test-Simple/t/Legacy/todo.t
+cpan/Test-Simple/t/Legacy/undef.t
+cpan/Test-Simple/t/Legacy/useing.t
+cpan/Test-Simple/t/Legacy/use_ok.t
+cpan/Test-Simple/t/Legacy/utf8.t
+cpan/Test-Simple/t/Legacy/versions.t
 cpan/Test-Simple/t/lib/Dev/Null.pm
 cpan/Test-Simple/t/lib/Dummy.pm
 cpan/Test-Simple/t/lib/MyOverload.pm
+cpan/Test-Simple/t/lib/MyTest.pm
 cpan/Test-Simple/t/lib/NoExporter.pm
 cpan/Test-Simple/t/lib/SigDie.pm
+cpan/Test-Simple/t/lib/SmallTest.pm
 cpan/Test-Simple/t/lib/Test/Builder/NoOutput.pm
 cpan/Test-Simple/t/lib/Test/Simple/Catch.pm
 cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_in_eval.plx
@@ -2559,63 +2656,55 @@ 
cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few_fail.plx
 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/missing.t
-cpan/Test-Simple/t/More.t
-cpan/Test-Simple/t/MyTest.pm
-cpan/Test-Simple/t/new_ok.t
-cpan/Test-Simple/t/no_plan.t
-cpan/Test-Simple/t/no_tests.t
-cpan/Test-Simple/t/note.t
-cpan/Test-Simple/t/overload.t
-cpan/Test-Simple/t/overload_threads.t
-cpan/Test-Simple/t/plan_bad.t
-cpan/Test-Simple/t/plan_is_noplan.t
-cpan/Test-Simple/t/plan_no_plan.t
-cpan/Test-Simple/t/plan_shouldnt_import.t
-cpan/Test-Simple/t/plan_skip_all.t
-cpan/Test-Simple/t/plan.t
-cpan/Test-Simple/t/require_ok.t
-cpan/Test-Simple/t/run_test.t
-cpan/Test-Simple/t/Simple/load.t
-cpan/Test-Simple/t/simple.t
-cpan/Test-Simple/t/skipall.t
-cpan/Test-Simple/t/skip.t
-cpan/Test-Simple/t/SmallTest.pm
-cpan/Test-Simple/t/subtest/args.t
-cpan/Test-Simple/t/subtest/bail_out.t
-cpan/Test-Simple/t/subtest/basic.t
-cpan/Test-Simple/t/subtest/die.t
-cpan/Test-Simple/t/subtest/do.t
-cpan/Test-Simple/t/subtest/exceptions.t
-cpan/Test-Simple/t/subtest/for_do_t.test
-cpan/Test-Simple/t/subtest/fork.t
-cpan/Test-Simple/t/subtest/implicit_done.t
-cpan/Test-Simple/t/subtest/line_numbers.t
-cpan/Test-Simple/t/subtest/plan.t
-cpan/Test-Simple/t/subtest/predicate.t
-cpan/Test-Simple/t/subtest/singleton.t
-cpan/Test-Simple/t/subtest/threads.t
-cpan/Test-Simple/t/subtest/todo.t
-cpan/Test-Simple/t/subtest/wstat.t
-cpan/Test-Simple/t/tbm_doesnt_set_exported_to.t
-cpan/Test-Simple/t/Tester/tbt_01basic.t
-cpan/Test-Simple/t/Tester/tbt_02fhrestore.t
-cpan/Test-Simple/t/Tester/tbt_03die.t
-cpan/Test-Simple/t/Tester/tbt_04line_num.t
-cpan/Test-Simple/t/Tester/tbt_05faildiag.t
-cpan/Test-Simple/t/Tester/tbt_06errormess.t
-cpan/Test-Simple/t/Tester/tbt_07args.t
-cpan/Test-Simple/t/Tester/tbt_08subtest.t
-cpan/Test-Simple/t/Tester/tbt_09do_script.pl
-cpan/Test-Simple/t/Tester/tbt_09do.t
-cpan/Test-Simple/t/threads.t
-cpan/Test-Simple/t/thread_taint.t
-cpan/Test-Simple/t/todo.t
-cpan/Test-Simple/t/undef.t
-cpan/Test-Simple/t/useing.t
-cpan/Test-Simple/t/use_ok.t
-cpan/Test-Simple/t/utf8.t
-cpan/Test-Simple/t/versions.t
+cpan/Test-Simple/t/regression/642_persistent_end.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
+cpan/Test-Simple/t/Test2/acceptance/try_it_no_plan.t
+cpan/Test-Simple/t/Test2/acceptance/try_it_plan.t
+cpan/Test-Simple/t/Test2/acceptance/try_it_skip.t
+cpan/Test-Simple/t/Test2/acceptance/try_it_threads.t
+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/init_croak.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/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/Taint.t
+cpan/Test-Simple/t/Test2/legacy/TAP.t
+cpan/Test-Simple/t/Test2/modules/API/Breakage.t
+cpan/Test-Simple/t/Test2/modules/API/Context.t
+cpan/Test-Simple/t/Test2/modules/API/Instance.t
+cpan/Test-Simple/t/Test2/modules/API/Stack.t
+cpan/Test-Simple/t/Test2/modules/API.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/Exception.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/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.t
+cpan/Test-Simple/t/Test2/modules/Event/Waiting.t
+cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t
+cpan/Test-Simple/t/Test2/modules/Hub/Interceptor.t
+cpan/Test-Simple/t/Test2/modules/Hub/Interceptor/Terminator.t
+cpan/Test-Simple/t/Test2/modules/Hub/Subtest.t
+cpan/Test-Simple/t/Test2/modules/Hub.t
+cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t
+cpan/Test-Simple/t/Test2/modules/IPC/Driver.t
+cpan/Test-Simple/t/Test2/modules/IPC.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.t
+cpan/Test-Simple/t/Test2/modules/Util/Trace.t
+cpan/Test-Simple/t/Test2/regression/gh_16.t
+cpan/Test-Simple/t/Test2/regression/ipc_files_abort_exit.t
+cpan/Test-Simple/t/tools.pl
+cpan/Test-Simple/t/tools.t
 cpan/Text-Balanced/lib/Text/Balanced.pm        Text::Balanced
 cpan/Text-Balanced/t/01_compile.t      See if Text::Balanced works
 cpan/Text-Balanced/t/02_extbrk.t       See if Text::Balanced works
diff --git a/Makefile.SH b/Makefile.SH
index 2a50977..f398359 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -1375,22 +1375,25 @@ _cleaner2:
        -rmdir lib/autodie/exception lib/autodie/Scope lib/autodie lib/XS
        -rmdir lib/Win32API lib/VMS lib/Unicode/Collate/Locale
        -rmdir lib/Unicode/Collate/CJK lib/Unicode/Collate lib/Tie/Hash
-       -rmdir lib/Thread lib/Text lib/Test/use lib/Test/Tester
-       -rmdir lib/Test/Builder/Tester lib/Test/Builder/IO lib/Test/Builder
-       -rmdir 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/Thread lib/Text lib/Test2/Util lib/Test2/IPC/Driver
+       -rmdir lib/Test2/IPC lib/Test2/Hub/Interceptor lib/Test2/Hub
+       -rmdir lib/Test2/Formatter 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/cpan/Test-Simple/lib/Test/Builder.pm 
b/cpan/Test-Simple/lib/Test/Builder.pm
index a8e7bd9..892d609 100644
--- a/cpan/Test-Simple/lib/Test/Builder.pm
+++ b/cpan/Test-Simple/lib/Test/Builder.pm
@@ -4,8 +4,7 @@ use 5.006;
 use strict;
 use warnings;
 
-our $VERSION = '1.001014';
-$VERSION = eval $VERSION;    ## no critic 
(BuiltinFunctions::ProhibitStringyEval)
+our $VERSION = '1.302015';
 
 BEGIN {
     if( $] < 5.008 ) {
@@ -13,516 +12,404 @@ BEGIN {
     }
 }
 
+use overload();
 
+use Scalar::Util qw/blessed reftype weaken/;
+
+use Test2::Util qw/USE_THREADS try get_tid/;
+use Test2::API qw/context release/;
 # Make Test::Builder thread-safe for ithreads.
 BEGIN {
-    use Config;
-    # Load threads::shared when threads are turned on.
-    # 5.8.0's threads are so busted we no longer support them.
-    if( $] >= 5.008001 && $Config{useithreads} && $INC{'threads.pm'} ) {
-        require threads::shared;
-
-        # Hack around YET ANOTHER threads::shared bug.  It would
-        # occasionally forget the contents of the variable when sharing it.
-        # So we first copy the data, then share, then put our copy back.
-        *share = sub (\[$@%]) {
-            my $type = ref $_[0];
-            my $data;
-
-            if( $type eq 'HASH' ) {
-                %$data = %{ $_[0] };
-            }
-            elsif( $type eq 'ARRAY' ) {
-                @$data = @{ $_[0] };
-            }
-            elsif( $type eq 'SCALAR' ) {
-                $$data = ${ $_[0] };
-            }
-            else {
-                die( "Unknown type: " . $type );
-            }
-
-            $_[0] = &threads::shared::share( $_[0] );
-
-            if( $type eq 'HASH' ) {
-                %{ $_[0] } = %$data;
-            }
-            elsif( $type eq 'ARRAY' ) {
-                @{ $_[0] } = @$data;
-            }
-            elsif( $type eq 'SCALAR' ) {
-                ${ $_[0] } = $$data;
-            }
-            else {
-                die( "Unknown type: " . $type );
-            }
+    warn "Test::Builder was loaded after Test2 initialization, this is not 
recommended."
+        if Test2::API::test2_init_done() || Test2::API::test2_load_done();
 
-            return $_[0];
-        };
-    }
-    # 5.8.0's threads::shared is busted when threads are off
-    # and earlier Perls just don't have that module at all.
-    else {
-        *share = sub { return $_[0] };
-        *lock  = sub { 0 };
+    if (USE_THREADS) {
+        require Test2::IPC;
+        require Test2::IPC::Driver::Files;
+        Test2::IPC::Driver::Files->import;
+        Test2::API::test2_ipc_enable_polling();
+        Test2::API::test2_no_wait(1);
+        Test2::API::test2_ipc_enable_shm();
     }
 }
 
-=head1 NAME
-
-Test::Builder - Backend for building test libraries
+use Test2::Event::Subtest;
+use Test2::Hub::Subtest;
 
-=head1 SYNOPSIS
+use Test::Builder::Formatter;
+use Test::Builder::TodoDiag;
 
-  package My::Test::Module;
-  use base 'Test::Builder::Module';
+our $Level = 1;
+our $Test = Test::Builder->new;
 
-  my $CLASS = __PACKAGE__;
+# 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.
+# TB->ctx compensates for this later.
+Test2::API::test2_add_callback_context_aquire(sub {$_[0]->{level} += $Level - 
1});
 
-  sub ok {
-      my($test, $name) = @_;
-      my $tb = $CLASS->builder;
+Test2::API::test2_add_callback_exit(sub { $Test->_ending(@_) });
 
-      $tb->ok($test, $name);
-  }
+Test2::API::test2_ipc()->set_no_fatal(1) if USE_THREADS;
 
+sub _add_ts_hooks {
+    my $self = shift;
+    my $hub = $self->{Stack}->top;
 
-=head1 DESCRIPTION
+    # Take a reference to the hash key, we do this to avoid closing over $self
+    # which is the singleton. We use a reference because the value could change
+    # in rare cases.
+    my $epkgr = \$self->{Exported_To};
 
-L<Test::Simple> and L<Test::More> have proven to be popular testing modules,
-but they're not always flexible enough.  Test::Builder provides a
-building block upon which to write your own test libraries I<which can
-work together>.
+    #$hub->add_context_aquire(sub {$_[0]->{level} += $Level - 1});
 
-=head2 Construction
+    $hub->filter(sub {
+        my ($active_hub, $e) = @_;
 
-=over 4
+        my $epkg = $$epkgr;
+        my $cpkg = $e->{trace} ? $e->{trace}->{frame}->[0] : undef;
 
-=item B<new>
+        no strict 'refs';
+        no warnings 'once';
+        my $todo;
+        $todo = ${"$cpkg\::TODO"} if $cpkg;
+        $todo = ${"$epkg\::TODO"} if $epkg && !$todo;
 
-  my $Test = Test::Builder->new;
+        return $e unless $todo;
 
-Returns a Test::Builder object representing the current state of the
-test.
 
-Since you only run one test per program C<new> always returns the same
-Test::Builder object.  No matter how many times you call C<new()>, you're
-getting the same object.  This is called a singleton.  This is done so that
-multiple modules share such global information as the test counter and
-where test output is going.
+        # Turn a diag into a todo diag
+        return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 
'Test2::Event::Diag';
 
-If you want a completely new Test::Builder object different from the
-singleton, use C<create>.
+        # Set todo on ok's
+        if ($hub == $active_hub && $e->isa('Test2::Event::Ok')) {
+            $e->set_todo($todo);
+            $e->set_effective_pass(1);
 
-=cut
+            if (my $result = $e->get_meta(__PACKAGE__)) {
+                $result->{reason} ||= $todo;
+                $result->{type}   ||= 'todo';
+                $result->{ok}       = 1;
+            }
+        }
 
-our $Test = Test::Builder->new;
+        return $e;
+    });
+}
 
 sub new {
     my($class) = shift;
-    $Test ||= $class->create;
+    unless($Test) {
+        my $ctx = context();
+        $Test = $class->create(singleton => 1);
+        $ctx->release;
+    }
     return $Test;
 }
 
-=item B<create>
-
-  my $Test = Test::Builder->create;
-
-Ok, so there can be more than one Test::Builder object and this is how
-you get it.  You might use this instead of C<new()> if you're testing
-a Test::Builder based module, but otherwise you probably want C<new>.
-
-B<NOTE>: the implementation is not complete.  C<level>, for example, is
-still shared amongst B<all> Test::Builder objects, even ones created using
-this method.  Also, the method name may change in the future.
-
-=cut
-
 sub create {
     my $class = shift;
+    my %params = @_;
 
     my $self = bless {}, $class;
-    $self->reset;
+    if ($params{singleton}) {
+        $self->{Stack} = Test2::API::test2_stack();
+    }
+    else {
+        $self->{Stack} = Test2::API::Stack->new;
+        $self->{Stack}->new_hub(
+            formatter => Test::Builder::Formatter->new,
+            ipc       => Test2::API::test2_ipc(),
+        );
+    }
+    $self->reset(%params);
+    $self->_add_ts_hooks;
 
     return $self;
 }
 
-
-# Copy an object, currently a shallow.
-# This does *not* bless the destination.  This keeps the destructor from
-# firing when we're just storing a copy of the object to restore later.
-sub _copy {
-    my($src, $dest) = @_;
-
-    %$dest = %$src;
-    _share_keys($dest);
-
-    return;
+sub ctx {
+    my $self = shift;
+    context(
+        # 1 for our frame, another for the -1 off of $Level in our hook at the 
top.
+        level   => 2,
+        fudge   => 1,
+        stack   => $self->{Stack},
+        hub     => $self->{Hub},
+        wrapped => 1,
+        @_
+    );
 }
 
+sub parent {
+    my $self = shift;
+    my $ctx = $self->ctx;
+    my $chub = $self->{Hub} || $ctx->hub;
+    $ctx->release;
 
-=item B<child>
-
-  my $child = $builder->child($name_of_child);
-  $child->plan( tests => 4 );
-  $child->ok(some_code());
-  ...
-  $child->finalize;
-
-Returns a new instance of C<Test::Builder>.  Any output from this child will
-be indented four spaces more than the parent's indentation.  When done, the
-C<finalize> method I<must> be called explicitly.
-
-Trying to create a new child with a previous child still active (i.e.,
-C<finalize> not called) will C<croak>.
+    my $parent = $chub->meta(__PACKAGE__, {})->{parent};
 
-Trying to run a test when you have an open child will also C<croak> and cause
-the test suite to fail.
+    return undef unless $parent;
 
-=cut
+    return bless {
+        Original_Pid => $$,
+        Stack => $self->{Stack},
+        Hub => $parent,
+    }, blessed($self);
+}
 
 sub child {
     my( $self, $name ) = @_;
 
-    if( $self->{Child_Name} ) {
-        $self->croak("You already have a child named ($self->{Child_Name}) 
running");
-    }
+    $name ||= "Child of " . $self->name;
+    my $ctx = $self->ctx;
 
-    my $parent_in_todo = $self->in_todo;
+    my $parent = $ctx->hub;
+    my $pmeta = $parent->meta(__PACKAGE__, {});
+    $self->croak("You already have a child named ($pmeta->{child}) running")
+        if $pmeta->{child};
+
+    $pmeta->{child} = $name;
 
     # Clear $TODO for the child.
     my $orig_TODO = $self->find_TODO(undef, 1, undef);
 
-    my $class = ref $self;
-    my $child = $class->create;
-
-    # Add to our indentation
-    $child->_indent( $self->_indent . '    ' );
+    my $subevents = [];
 
-    # Make the child use the same outputs as the parent
-    for my $method (qw(output failure_output todo_output)) {
-        $child->$method( $self->$method );
-    }
+    my $hub = $ctx->stack->new_hub(
+        class => 'Test2::Hub::Subtest',
+    );
 
-    # Ensure the child understands if they're inside a TODO
-    if( $parent_in_todo ) {
-        $child->failure_output( $self->todo_output );
-    }
+    $hub->filter(sub {
+        my ($active_hub, $e) = @_;
 
-    # This will be reset in finalize. We do this here lest one child failure
-    # cause all children to fail.
-    $child->{Child_Error} = $?;
-    $?                    = 0;
-    $child->{Parent}      = $self;
-    $child->{Parent_TODO} = $orig_TODO;
-    $child->{Name}        = $name || "Child of " . $self->name;
-    $self->{Child_Name}   = $child->name;
-    return $child;
-}
+        # Turn a diag into a todo diag
+        return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 
'Test2::Event::Diag';
 
+        return $e;
+    }) if $orig_TODO;
 
-=item B<subtest>
+    $hub->listen(sub { push @$subevents => $_[1] });
 
-    $builder->subtest($name, \&subtests, @args);
+    $hub->set_nested( $parent->isa('Test2::Hub::Subtest') ? $parent->nested + 
1 : 1 );
 
-See documentation of C<subtest> in Test::More.  
+    my $meta = $hub->meta(__PACKAGE__, {});
+    $meta->{Name} = $name;
+    $meta->{TODO} = $orig_TODO;
+    $meta->{TODO_PKG} = $ctx->trace->package;
+    $meta->{parent} = $parent;
+    $meta->{Test_Results} = [];
+    $meta->{subevents} = $subevents;
+    $meta->{subtest_id} = $hub->id;
 
-C<subtest> also, and optionally, accepts arguments which will be passed to the
-subtests reference.
+    $self->_add_ts_hooks;
 
-=cut
+    $ctx->release;
+    return bless { Original_Pid => $$, Stack => $self->{Stack}, Hub => $hub }, 
blessed($self);
+}
 
-sub subtest {
+sub finalize {
     my $self = shift;
-    my($name, $subtests, @args) = @_;
-
-    if ('CODE' ne ref $subtests) {
-        $self->croak("subtest()'s second argument must be a code ref");
-    }
-
-    # Turn the child into the parent so anyone who has stored a copy of
-    # the Test::Builder singleton will get the child.
-    my $error;
-    my $child;
-    my $parent = {};
-    {
-        # child() calls reset() which sets $Level to 1, so we localize
-        # $Level first to limit the scope of the reset to the subtest.
-        local $Test::Builder::Level = $Test::Builder::Level + 1;
+    my $ok = 1;
+    ($ok) = @_ if @_;
 
-        # Store the guts of $self as $parent and turn $child into $self.
-        $child  = $self->child($name);
-        _copy($self,  $parent);
-        _copy($child, $self);
-
-        my $run_the_subtests = sub {
-            # Add subtest name for clarification of starting point
-            $self->note("Subtest: $name");
-            $subtests->(@args);
-            $self->done_testing unless $self->_plan_handled;
-            1;
-        };
+    my $st_ctx = $self->ctx;
+    my $chub = $self->{Hub} || return $st_ctx->release;
 
-        if( !eval { $run_the_subtests->() } ) {
-            $error = $@;
-        }
+    my $meta = $chub->meta(__PACKAGE__, {});
+    if ($meta->{child}) {
+        $self->croak("Can't call finalize() with child ($meta->{child}) 
active");
     }
 
-    # Restore the parent and the copied child.
-    _copy($self,   $child);
-    _copy($parent, $self);
-
-    # Restore the parent's $TODO
-    $self->find_TODO(undef, 1, $child->{Parent_TODO});
-
-    # Die *after* we restore the parent.
-    die $error if $error and !eval { $error->isa('Test::Builder::Exception') };
-
-    local $Test::Builder::Level = $Test::Builder::Level + 1;
-    my $finalize = $child->finalize;
-
-    $self->BAIL_OUT($child->{Bailed_Out_Reason}) if $child->{Bailed_Out};
-
-    return $finalize;
-}
-
-=begin _private
-
-=item B<_plan_handled>
-
-    if ( $Test->_plan_handled ) { ... }
-
-Returns true if the developer has explicitly handled the plan via:
-
-=over 4
-
-=item * Explicitly setting the number of tests
-
-=item * Setting 'no_plan'
-
-=item * Set 'skip_all'.
-
-=back
-
-This is currently used in subtests when we implicitly call C<< 
$Test->done_testing >>
-if the developer has not set a plan.
-
-=end _private
-
-=cut
-
-sub _plan_handled {
-    my $self = shift;
-    return $self->{Have_Plan} || $self->{No_Plan} || $self->{Skip_All};
-}
-
-
-=item B<finalize>
+    local $? = 0;     # don't fail if $subtests happened to set $? nonzero
 
-  my $ok = $child->finalize;
+    $self->{Stack}->pop($chub);
 
-When your child is done running tests, you must call C<finalize> to clean up
-and tell the parent your pass/fail status.
+    $self->find_TODO($meta->{TODO_PKG}, 1, $meta->{TODO});
 
-Calling C<finalize> on a child with open children will C<croak>.
+    my $parent = $self->parent;
+    my $ctx = $parent->ctx;
+    my $trace = $ctx->trace;
+    delete $ctx->hub->meta(__PACKAGE__, {})->{child};
 
-If the child falls out of scope before C<finalize> is called, a failure
-diagnostic will be issued and the child is considered to have failed.
+    $chub->finalize($trace, 1)
+        if $ok
+        && $chub->count
+        && !$chub->no_ending
+        && !$chub->ended;
 
-No attempt to call methods on a child after C<finalize> is called is
-guaranteed to succeed.
+    my $plan   = $chub->plan || 0;
+    my $count  = $chub->count;
+    my $failed = $chub->failed;
 
-Calling this on the root builder is a no-op.
+    my $num_extra = $plan =~ m/\D/ ? 0 : $count - $plan;
+    if ($count && $num_extra != 0) {
+        my $s = $plan == 1 ? '' : 's';
+        $st_ctx->diag(<<"FAIL");
+Looks like you planned $plan test$s but ran $count.
+FAIL
+    }
 
-=cut
+    if ($failed) {
+        my $s = $failed == 1 ? '' : 's';
 
-sub finalize {
-    my $self = shift;
+        my $qualifier = $num_extra == 0 ? '' : ' run';
 
-    return unless $self->parent;
-    if( $self->{Child_Name} ) {
-        $self->croak("Can't call finalize() with child ($self->{Child_Name}) 
active");
+        $st_ctx->diag(<<"FAIL");
+Looks like you failed $failed test$s of $count$qualifier.
+FAIL
     }
 
-    local $? = 0;     # don't fail if $subtests happened to set $? nonzero
-    $self->_ending;
-
-    # XXX This will only be necessary for TAP envelopes (we think)
-    #$self->_print( $self->is_passing ? "PASS\n" : "FAIL\n" );
+    $st_ctx->release;
 
-    local $Test::Builder::Level = $Test::Builder::Level + 1;
-    my $ok = 1;
-    $self->parent->{Child_Name} = undef;
-    unless ($self->{Bailed_Out}) {
-        if ( $self->{Skip_All} ) {
-            $self->parent->skip($self->{Skip_All}, $self->name);
+    unless ($chub->bailed_out) {
+        my $plan = $chub->plan;
+        if ( $plan && $plan eq 'SKIP' ) {
+            $parent->skip($chub->skip_reason, $meta->{Name});
         }
-        elsif ( not @{ $self->{Test_Results} } ) {
-            $self->parent->ok( 0, sprintf q[No tests run for subtest "%s"], 
$self->name );
+        elsif ( !$chub->count ) {
+            $parent->ok( 0, sprintf q[No tests run for subtest "%s"], 
$meta->{Name} );
         }
         else {
-            $self->parent->ok( $self->is_passing, $self->name );
+            $parent->{subevents}  = $meta->{subevents};
+            $parent->{subtest_id} = $meta->{subtest_id};
+            $parent->ok( $chub->is_passing, $meta->{Name} );
         }
     }
-    $? = $self->{Child_Error};
-    delete $self->{Parent};
 
-    return $self->is_passing;
+    $ctx->release;
+    return $chub->is_passing;
 }
 
-sub _indent      {
+sub subtest {
     my $self = shift;
-
-    if( @_ ) {
-        $self->{Indent} = shift;
+    my ($name, $code, @args) = @_;
+    my $ctx = $self->ctx;
+    $ctx->throw("subtest()'s second argument must be a code ref")
+        unless $code && reftype($code) eq 'CODE';
+
+    $name ||= "Child of " . $self->name;
+
+    $ctx->note("Subtest: $name");
+
+    my $child = $self->child($name);
+
+    my $start_pid = $$;
+    my $st_ctx;
+    my ($ok, $err, $finished, $child_error);
+    T2_SUBTEST_WRAPPER: {
+        my $ctx = $self->ctx;
+        $st_ctx = $ctx->snapshot;
+        $ctx->release;
+        $ok = eval { local $Level = 1; $code->(@args); 1 };
+        ($err, $child_error) = ($@, $?);
+
+        # They might have done 'BEGIN { skip_all => "whatever" }'
+        if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/) {
+            $ok  = undef;
+            $err = undef;
+        }
+        else {
+            $finished = 1;
+        }
     }
 
-    return $self->{Indent};
-}
-
-=item B<parent>
+    if ($start_pid != $$ && !$INC{'Test/Sync/IPC.pm'}) {
+        warn $ok ? "Forked inside subtest, but subtest never finished!\n" : 
$err;
+        exit 255;
+    }
 
- if ( my $parent = $builder->parent ) {
-     ...
- }
+    my $trace = $ctx->trace;
 
-Returns the parent C<Test::Builder> instance, if any.  Only used with child
-builders for nested TAP.
+    if (!$finished) {
+        if(my $bailed = $st_ctx->hub->bailed_out) {
+            my $chub = $child->{Hub};
+            $self->{Stack}->pop($chub);
+            $ctx->bail($bailed->reason);
+        }
+        my $code = $st_ctx->hub->exit_code;
+        $ok = !$code;
+        $err = "Subtest ended with exit code $code" if $code;
+    }
 
-=cut
+    my $st_hub  = $st_ctx->hub;
+    my $plan  = $st_hub->plan;
+    my $count = $st_hub->count;
 
-sub parent { shift->{Parent} }
+    if (!$count && (!defined($plan) || "$plan" ne 'SKIP')) {
+        $st_ctx->plan(0) unless defined $plan;
+        $st_ctx->diag('No tests run!');
+    }
 
-=item B<name>
+    $child->finalize($ok);
 
- diag $builder->name;
+    $ctx->release;
 
-Returns the name of the current builder.  Top level builders default to C<$0>
-(the name of the executable).  Child builders are named via the C<child>
-method.  If no name is supplied, will be named "Child of $parent->name".
+    die $err unless $ok;
 
-=cut
+    $? = $child_error if defined $child_error;
 
-sub name { shift->{Name} }
+    return $st_hub->is_passing;
+}
 
-sub DESTROY {
+sub name {
     my $self = shift;
-    if ( $self->parent and $$ == $self->{Original_Pid} ) {
-        my $name = $self->name;
-        $self->diag(<<"FAIL");
-Child ($name) exited without calling finalize()
-FAIL
-        $self->parent->{In_Destroy} = 1;
-        $self->parent->ok(0, $name);
-    }
+    my $ctx = $self->ctx;
+    release $ctx, $ctx->hub->meta(__PACKAGE__, {})->{Name};
 }
 
-=item B<reset>
-
-  $Test->reset;
-
-Reinitializes the Test::Builder singleton to its original state.
-Mostly useful for tests run in persistent environments where the same
-test might be run multiple times in the same process.
-
-=cut
-
-our $Level;
-
 sub reset {    ## no critic (Subroutines::ProhibitBuiltinHomonyms)
-    my($self) = @_;
+    my ($self, %params) = @_;
+
+    Test2::API::test2_set_is_end(0);
 
     # We leave this a global because it has to be localized and localizing
     # hash keys is just asking for pain.  Also, it was documented.
     $Level = 1;
 
-    $self->{Name}         = $0;
-    $self->is_passing(1);
-    $self->{Ending}       = 0;
-    $self->{Have_Plan}    = 0;
-    $self->{No_Plan}      = 0;
-    $self->{Have_Output_Plan} = 0;
-    $self->{Done_Testing} = 0;
-
     $self->{Original_Pid} = $$;
-    $self->{Child_Name}   = undef;
-    $self->{Indent}     ||= '';
-
-    $self->{Curr_Test} = 0;
-    $self->{Test_Results} = &share( [] );
-
-    $self->{Exported_To}    = undef;
-    $self->{Expected_Tests} = 0;
 
-    $self->{Skip_All} = 0;
-
-    $self->{Use_Nums} = 1;
-
-    $self->{No_Header} = 0;
-    $self->{No_Ending} = 0;
-
-    $self->{Todo}       = undef;
-    $self->{Todo_Stack} = [];
-    $self->{Start_Todo} = 0;
-    $self->{Opened_Testhandles} = 0;
+    my $ctx = $self->ctx;
+    unless ($params{singleton}) {
+        $ctx->hub->reset_state();
+        $ctx->hub->set_pid($$);
+        $ctx->hub->set_tid(get_tid);
+    }
 
-    $self->_share_keys;
-    $self->_dup_stdhandles;
+    my $meta = $ctx->hub->meta(__PACKAGE__, {});
+    %$meta = (
+        Name         => $0,
+        Ending       => 0,
+        Done_Testing => undef,
+        Skip_All     => 0,
+        Test_Results => [],
+    );
 
-    return;
-}
+    $self->{Exported_To} = undef;
 
+    $self->{Orig_Handles} ||= do {
+        my $format = $ctx->hub->format;
+        my $out;
+        if ($format && $format->isa('Test2::Formatter::TAP')) {
+            $out = $format->handles;
+        }
+        $out ? [@$out] : [];
+    };
 
-# Shared scalar values are lost when a hash is copied, so we have
-# a separate method to restore them.
-# Shared references are retained across copies.
-sub _share_keys {
-    my $self = shift;
+    $self->use_numbers(1);
+    $self->no_header(0);
+    $self->no_ending(0);
+    $self->reset_outputs;
 
-    share( $self->{Curr_Test} );
+    $ctx->release;
 
     return;
 }
 
 
-=back
-
-=head2 Setting up tests
-
-These methods are for setting up tests and declaring how many there
-are.  You usually only want to call one of these methods.
-
-=over 4
-
-=item B<plan>
-
-  $Test->plan('no_plan');
-  $Test->plan( skip_all => $reason );
-  $Test->plan( tests => $num_tests );
-
-A convenient way to set up your tests.  Call this and Test::Builder
-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
-
-=cut
-
 my %plan_cmds = (
-    no_plan     => \&no_plan,
-    skip_all    => \&skip_all,
-    tests       => \&_plan_tests,
+    no_plan  => \&no_plan,
+    skip_all => \&skip_all,
+    tests    => \&_plan_tests,
 );
 
 sub plan {
@@ -530,9 +417,12 @@ sub plan {
 
     return unless $cmd;
 
-    local $Level = $Level + 1;
+    my $ctx = $self->ctx;
+    my $hub = $ctx->hub;
 
-    $self->croak("You tried to plan twice") if $self->{Have_Plan};
+    $ctx->throw("You tried to plan twice") if $hub->plan;
+
+    local $Level = $Level + 1;
 
     if( my $method = $plan_cmds{$cmd} ) {
         local $Level = $Level + 1;
@@ -540,241 +430,150 @@ sub plan {
     }
     else {
         my @args = grep { defined } ( $cmd, $arg );
-        $self->croak("plan() doesn't understand @args");
+        $ctx->throw("plan() doesn't understand @args");
     }
 
-    return 1;
+    release $ctx, 1;
 }
 
 
 sub _plan_tests {
     my($self, $arg) = @_;
 
+    my $ctx = $self->ctx;
+
     if($arg) {
         local $Level = $Level + 1;
-        return $self->expected_tests($arg);
+        $self->expected_tests($arg);
     }
     elsif( !defined $arg ) {
-        $self->croak("Got an undefined number of tests");
+        $ctx->throw("Got an undefined number of tests");
     }
     else {
-        $self->croak("You said to run 0 tests");
+        $ctx->throw("You said to run 0 tests");
     }
 
-    return;
+    $ctx->release;
 }
 
-=item B<expected_tests>
-
-    my $max = $Test->expected_tests;
-    $Test->expected_tests($max);
-
-Gets/sets the number of tests we expect this test to run and prints out
-the appropriate headers.
-
-=cut
 
 sub expected_tests {
     my $self = shift;
     my($max) = @_;
 
+    my $ctx = $self->ctx;
+
     if(@_) {
         $self->croak("Number of tests must be a positive integer.  You gave it 
'$max'")
           unless $max =~ /^\+?\d+$/;
 
-        $self->{Expected_Tests} = $max;
-        $self->{Have_Plan}      = 1;
-
-        $self->_output_plan($max) unless $self->no_header;
+        $ctx->plan($max);
     }
-    return $self->{Expected_Tests};
-}
 
-=item B<no_plan>
+    my $hub = $ctx->hub;
 
-  $Test->no_plan;
+    $ctx->release;
 
-Declares that this test will run an indeterminate number of tests.
+    my $plan = $hub->plan;
+    return 0 unless $plan;
+    return 0 if $plan =~ m/\D/;
+    return $plan;
+}
 
-=cut
 
 sub no_plan {
     my($self, $arg) = @_;
 
-    $self->carp("no_plan takes no arguments") if $arg;
+    my $ctx = $self->ctx;
 
-    $self->{No_Plan}   = 1;
-    $self->{Have_Plan} = 1;
+    $ctx->alert("no_plan takes no arguments") if $arg;
 
-    return 1;
-}
+    $ctx->hub->plan('NO PLAN');
 
-=begin private
+    release $ctx, 1;
+}
 
-=item B<_output_plan>
 
-  $tb->_output_plan($max);
-  $tb->_output_plan($max, $directive);
-  $tb->_output_plan($max, $directive => $reason);
+sub done_testing {
+    my($self, $num_tests) = @_;
 
-Handles displaying the test plan.
+    my $ctx = $self->ctx;
 
-If a C<$directive> and/or C<$reason> are given they will be output with the
-plan.  So here's what skipping all tests looks like:
+    my $meta = $ctx->hub->meta(__PACKAGE__, {});
 
-    $tb->_output_plan(0, "SKIP", "Because I said so");
+    if ($meta->{Done_Testing}) {
+        my ($file, $line) = @{$meta->{Done_Testing}}[1,2];
+        local $ctx->hub->{ended}; # OMG This is awful.
+        $self->ok(0, "done_testing() was already called at $file line $line");
+        $ctx->release;
+        return;
+    }
+    $meta->{Done_Testing} = [$ctx->trace->call];
 
-It sets C<< $tb->{Have_Output_Plan} >> and will croak if the plan was already
-output.
+    my $plan = $ctx->hub->plan;
+    my $count = $ctx->hub->count;
 
-=end private
-
-=cut
-
-sub _output_plan {
-    my($self, $max, $directive, $reason) = @_;
-
-    $self->carp("The plan was already output") if $self->{Have_Output_Plan};
-
-    my $plan = "1..$max";
-    $plan .= " # $directive" if defined $directive;
-    $plan .= " $reason"      if defined $reason;
-
-    $self->_print("$plan\n");
-
-    $self->{Have_Output_Plan} = 1;
-
-    return;
-}
-
-
-=item B<done_testing>
-
-  $Test->done_testing();
-  $Test->done_testing($num_tests);
-
-Declares that you are done testing, no more tests will be run after this point.
-
-If a plan has not yet been output, it will do so.
-
-$num_tests is the number of tests you planned to run.  If a numbered
-plan was already declared, and if this contradicts, a failing test
-will be run to reflect the planning mistake.  If C<no_plan> was declared,
-this will override.
-
-If C<done_testing()> is called twice, the second call will issue a
-failing test.
-
-If C<$num_tests> is omitted, the number of tests run will be used, like
-no_plan.
-
-C<done_testing()> is, in effect, used when you'd want to use C<no_plan>, but
-safer. You'd use it like so:
-
-    $Test->ok($a == $b);
-    $Test->done_testing();
-
-Or to plan a variable number of tests:
-
-    for my $test (@tests) {
-        $Test->ok($test);
-    }
-    $Test->done_testing(scalar @tests);
-
-=cut
-
-sub done_testing {
-    my($self, $num_tests) = @_;
-
-    # If done_testing() specified the number of tests, shut off no_plan.
+    # If done_testing() specified the number of tests, shut off no_plan
     if( defined $num_tests ) {
-        $self->{No_Plan} = 0;
+        $ctx->plan($num_tests) if !$plan || $plan eq 'NO PLAN';
+    }
+    elsif ($count && defined $num_tests && $count != $num_tests) {
+        $self->ok(0, "planned to run @{[ $self->expected_tests ]} but 
done_testing() expects $num_tests");
     }
     else {
         $num_tests = $self->current_test;
     }
 
-    if( $self->{Done_Testing} ) {
-        my($file, $line) = @{$self->{Done_Testing}}[1,2];
-        $self->ok(0, "done_testing() was already called at $file line $line");
-        return;
-    }
-
-    $self->{Done_Testing} = [caller];
-
     if( $self->expected_tests && $num_tests != $self->expected_tests ) {
         $self->ok(0, "planned to run @{[ $self->expected_tests ]} ".
                      "but done_testing() expects $num_tests");
     }
-    else {
-        $self->{Expected_Tests} = $num_tests;
-    }
-
-    $self->_output_plan($num_tests) unless $self->{Have_Output_Plan};
-
-    $self->{Have_Plan} = 1;
 
-    # The wrong number of tests were run
-    $self->is_passing(0) if $self->{Expected_Tests} != $self->{Curr_Test};
+    $ctx->plan($num_tests) if $ctx->hub->plan && $ctx->hub->plan eq 'NO PLAN';
 
-    # No tests were run
-    $self->is_passing(0) if $self->{Curr_Test} == 0;
+    $ctx->hub->finalize($ctx->trace, 1);
 
-    return 1;
+    release $ctx, 1;
 }
 
 
-=item B<has_plan>
-
-  $plan = $Test->has_plan
-
-Find out whether a plan has been defined. C<$plan> is either C<undef> (no plan
-has been set), C<no_plan> (indeterminate # of tests) or an integer (the number
-of expected tests).
-
-=cut
-
 sub has_plan {
     my $self = shift;
 
-    return( $self->{Expected_Tests} ) if $self->{Expected_Tests};
-    return('no_plan') if $self->{No_Plan};
+    my $ctx = $self->ctx;
+    my $plan = $ctx->hub->plan;
+    $ctx->release;
+
+    return( $plan ) if $plan && $plan !~ m/\D/;
+    return('no_plan') if $plan && $plan eq 'NO PLAN';
     return(undef);
 }
 
-=item B<skip_all>
-
-  $Test->skip_all;
-  $Test->skip_all($reason);
-
-Skips all the tests, using the given C<$reason>.  Exits immediately with 0.
-
-=cut
 
 sub skip_all {
     my( $self, $reason ) = @_;
 
-    $self->{Skip_All} = $self->parent ? $reason : 1;
+    my $ctx = $self->ctx;
 
-    $self->_output_plan(0, "SKIP", $reason) unless $self->no_header;
-    if ( $self->parent ) {
-        die bless {} => 'Test::Builder::Exception';
-    }
-    exit(0);
-}
-
-=item B<exported_to>
+    $ctx->hub->meta(__PACKAGE__, {})->{Skip_All} = $reason || 1;
 
-  my $pack = $Test->exported_to;
-  $Test->exported_to($pack);
-
-Tells Test::Builder what package you exported your functions to.
+    # Work around old perl bug
+    if ($] < 5.020000) {
+        my $begin = 0;
+        my $level = 0;
+        while (my @call = caller($level++)) {
+            last unless @call && $call[0];
+            next unless $call[3] =~ m/::BEGIN$/;
+            $begin++;
+            last;
+        }
+        # HACK!
+        die 'Label not found for "last T2_SUBTEST_WRAPPER"' if $begin && 
$ctx->hub->meta(__PACKAGE__, {})->{parent};
+    }
 
-This method isn't terribly useful since modules which share the same
-Test::Builder object might get exported to different packages and only
-the last one will be honored.
+    $ctx->plan(0, SKIP => $reason);
+}
 
-=cut
 
 sub exported_to {
     my( $self, $pack ) = @_;
@@ -785,171 +584,126 @@ sub exported_to {
     return $self->{Exported_To};
 }
 
-=back
-
-=head2 Running tests
-
-These actually run the tests, analogous to the functions in Test::More.
-
-They all return true if the test passed, false if the test failed.
-
-C<$name> is always optional.
-
-=over 4
-
-=item B<ok>
-
-  $Test->ok($test, $name);
-
-Your basic test.  Pass if C<$test> is true, fail if $test is false.  Just
-like Test::Simple's C<ok()>.
-
-=cut
 
 sub ok {
     my( $self, $test, $name ) = @_;
 
-    if ( $self->{Child_Name} and not $self->{In_Destroy} ) {
-        $name = 'unnamed test' unless defined $name;
-        $self->is_passing(0);
-        $self->croak("Cannot run test ($name) with active children");
-    }
+    my $ctx = $self->ctx;
+
     # $test might contain an object which we don't want to accidentally
     # store, so we turn it into a boolean.
     $test = $test ? 1 : 0;
 
-    lock $self->{Curr_Test};
-    $self->{Curr_Test}++;
-
     # In case $name is a string overloaded object, force it to stringify.
-    $self->_unoverload_str( \$name );
+    no  warnings qw/uninitialized numeric/;
+    $name = "$name" if defined $name;
 
-    $self->diag(<<"ERR") if defined $name and $name =~ /^[\d\s]+$/;
+    # Profiling showed that the regex here was a huge time waster, doing the
+    # numeric addition first cuts our profile time from ~300ms to ~50ms
+    $self->diag(<<"    ERR") if 0 + $name && $name =~ /^[\d\s]+$/;
     You named your test '$name'.  You shouldn't use numbers for your test 
names.
     Very confusing.
-ERR
-
-    # Capture the value of $TODO for the rest of this ok() call
-    # so it can more easily be found by other routines.
-    my $todo    = $self->todo();
-    my $in_todo = $self->in_todo;
-    local $self->{Todo} = $todo if $in_todo;
-
-    $self->_unoverload_str( \$todo );
-
-    my $out;
-    my $result = &share( {} );
-
-    unless($test) {
-        $out .= "not ";
-        @$result{ 'ok', 'actual_ok' } = ( ( $self->in_todo ? 1 : 0 ), 0 );
-    }
-    else {
-        @$result{ 'ok', 'actual_ok' } = ( 1, $test );
-    }
-
-    $out .= "ok";
-    $out .= " $self->{Curr_Test}" if $self->use_numbers;
-
-    if( defined $name ) {
-        $name =~ s|#|\\#|g;    # # in a name can confuse Test::Harness.
-        $out .= " - $name";
-        $result->{name} = $name;
-    }
-    else {
-        $result->{name} = '';
-    }
-
-    if( $self->in_todo ) {
-        $out .= " # TODO $todo";
-        $result->{reason} = $todo;
-        $result->{type}   = 'todo';
-    }
-    else {
-        $result->{reason} = '';
-        $result->{type}   = '';
-    }
+    ERR
+    use warnings qw/uninitialized numeric/;
+
+    my $trace = $ctx->{trace};
+    my $hub   = $ctx->{hub};
+
+    my $result = {
+        ok => $test,
+        actual_ok => $test,
+        reason => '',
+        type => '',
+        (name => defined($name) ? $name : ''),
+    };
 
-    $self->{Test_Results}[ $self->{Curr_Test} - 1 ] = $result;
-    $out .= "\n";
+    $hub->{_meta}->{+__PACKAGE__}->{Test_Results}[ $hub->{count} ] = $result;
 
-    $self->_print($out);
+    my $orig_name = $name;
 
-    unless($test) {
-        my $msg = $self->in_todo ? "Failed (TODO)" : "Failed";
-        $self->_print_to_fh( $self->_diag_fh, "\n" ) if $ENV{HARNESS_ACTIVE};
+    # The regex form is ~250ms, the index form is ~50ms
+    #$name && $name =~ m/(?:#|\n)/ && ($name =~ s|#|\\#|g, $name =~ s{\n}{\n# 
}sg);
+    $name && (
+        (index($name, "#" ) >= 0 && $name =~ s|#|\\#|g),
+        (index($name, "\n") >= 0 && $name =~ s{\n}{\n# }sg)
+    );
 
-        my( undef, $file, $line ) = $self->caller;
-        if( defined $name ) {
-            $self->diag(qq[  $msg test '$name'\n]);
-            $self->diag(qq[  at $file line $line.\n]);
-        }
-        else {
-            $self->diag(qq[  $msg test at $file line $line.\n]);
-        }
+    my @attrs;
+    my $subevents  = delete $self->{subevents};
+    my $subtest_id = delete $self->{subtest_id};
+    my $epkg = 'Test2::Event::Ok';
+    if ($subevents) {
+        $epkg = 'Test2::Event::Subtest';
+        push @attrs => (subevents => $subevents, subtest_id => $subtest_id);
     }
 
-    $self->is_passing(0) unless $test || $self->in_todo;
+    my $e = bless {
+        trace => bless( {%$trace}, 'Test2::Util::Trace'),
+        pass  => $test,
+        name  => $name,
+        _meta => {'Test::Builder' => $result},
+        effective_pass => $test,
+        @attrs,
+    }, $epkg;
+    $hub->send($e);
 
-    # Check that we haven't violated the plan
-    $self->_check_is_passing_plan();
+    $self->_ok_debug($trace, $orig_name) unless($test);
 
-    return $test ? 1 : 0;
+    $ctx->release;
+    return $test;
 }
 
-
-# Check that we haven't yet violated the plan and set
-# is_passing() accordingly
-sub _check_is_passing_plan {
+sub _ok_debug {
     my $self = shift;
+    my ($trace, $orig_name) = @_;
 
-    my $plan = $self->has_plan;
-    return unless defined $plan;        # no plan yet defined
-    return unless $plan !~ /\D/;        # no numeric plan
-    $self->is_passing(0) if $plan < $self->{Curr_Test};
-}
-
+    my $is_todo = defined($self->todo);
 
-sub _unoverload {
-    my $self = shift;
-    my $type = shift;
+    my $msg = $is_todo ? "Failed (TODO)" : "Failed";
 
-    $self->_try(sub { require overload; }, die_on_fail => 1);
+    my $dfh = $self->_diag_fh;
+    print $dfh "\n" if $ENV{HARNESS_ACTIVE} && $dfh;
 
-    foreach my $thing (@_) {
-        if( $self->_is_object($$thing) ) {
-            if( my $string_meth = overload::Method( $$thing, $type ) ) {
-                $$thing = $$thing->$string_meth();
-            }
-        }
+    my (undef, $file, $line) = $trace->call;
+    if (defined $orig_name) {
+        $self->diag(qq[  $msg test '$orig_name'\n]);
+        $self->diag(qq[  at $file line $line.\n]);
+    }
+    else {
+        $self->diag(qq[  $msg test at $file line $line.\n]);
     }
+}
 
-    return;
+sub _diag_fh {
+    my $self = shift;
+    local $Level = $Level + 1;
+    return $self->in_todo ? $self->todo_output : $self->failure_output;
 }
 
-sub _is_object {
-    my( $self, $thing ) = @_;
+sub _unoverload {
+    my ($self, $type, $thing) = @_;
 
-    return $self->_try( sub { ref $thing && $thing->isa('UNIVERSAL') } ) ? 1 : 
0;
+    return unless ref $$thing;
+    return unless blessed($$thing) || scalar $self->_try(sub{ 
$$thing->isa('UNIVERSAL') });
+    my $string_meth = overload::Method( $$thing, $type ) || return;
+    $$thing = $$thing->$string_meth();
 }
 
 sub _unoverload_str {
     my $self = shift;
 
-    return $self->_unoverload( q[""], @_ );
+    $self->_unoverload( q[""], $_ ) for @_;
 }
 
 sub _unoverload_num {
     my $self = shift;
 
-    $self->_unoverload( '0+', @_ );
+    $self->_unoverload( '0+', $_ ) for @_;
 
     for my $val (@_) {
         next unless $self->_is_dualvar($$val);
         $$val = $$val + 0;
     }
-
-    return;
 }
 
 # This is a hack to detect a dualvar such as $!
@@ -964,28 +718,12 @@ sub _is_dualvar {
     return ($numval != 0 and $numval ne $val ? 1 : 0);
 }
 
-=item B<is_eq>
-
-  $Test->is_eq($got, $expected, $name);
-
-Like Test::More's C<is()>.  Checks if C<$got eq $expected>.  This is the
-string version.
-
-C<undef> only ever matches another C<undef>.
-
-=item B<is_num>
-
-  $Test->is_num($got, $expected, $name);
-
-Like Test::More's C<is()>.  Checks if C<$got == $expected>.  This is the
-numeric version.
-
-C<undef> only ever matches another C<undef>.
-
-=cut
 
 sub is_eq {
     my( $self, $got, $expect, $name ) = @_;
+
+    my $ctx = $self->ctx;
+
     local $Level = $Level + 1;
 
     if( !defined $got || !defined $expect ) {
@@ -994,14 +732,17 @@ sub is_eq {
 
         $self->ok( $test, $name );
         $self->_is_diag( $got, 'eq', $expect ) unless $test;
+        $ctx->release;
         return $test;
     }
 
-    return $self->cmp_ok( $got, 'eq', $expect, $name );
+    release $ctx, $self->cmp_ok( $got, 'eq', $expect, $name );
 }
 
+
 sub is_num {
     my( $self, $got, $expect, $name ) = @_;
+    my $ctx = $self->ctx;
     local $Level = $Level + 1;
 
     if( !defined $got || !defined $expect ) {
@@ -1010,12 +751,14 @@ sub is_num {
 
         $self->ok( $test, $name );
         $self->_is_diag( $got, '==', $expect ) unless $test;
+        $ctx->release;
         return $test;
     }
 
-    return $self->cmp_ok( $got, '==', $expect, $name );
+    release $ctx, $self->cmp_ok( $got, '==', $expect, $name );
 }
 
+
 sub _diag_fmt {
     my( $self, $type, $val ) = @_;
 
@@ -1036,6 +779,7 @@ sub _diag_fmt {
     return;
 }
 
+
 sub _is_diag {
     my( $self, $got, $type, $expect ) = @_;
 
@@ -1061,24 +805,10 @@ sub _isnt_diag {
 DIAGNOSTIC
 }
 
-=item B<isnt_eq>
-
-  $Test->isnt_eq($got, $dont_expect, $name);
-
-Like L<Test::More>'s C<isnt()>.  Checks if C<$got ne $dont_expect>.  This is
-the string version.
-
-=item B<isnt_num>
-
-  $Test->isnt_num($got, $dont_expect, $name);
-
-Like L<Test::More>'s C<isnt()>.  Checks if C<$got ne $dont_expect>.  This is
-the numeric version.
-
-=cut
 
 sub isnt_eq {
     my( $self, $got, $dont_expect, $name ) = @_;
+    my $ctx = $self->ctx;
     local $Level = $Level + 1;
 
     if( !defined $got || !defined $dont_expect ) {
@@ -1087,14 +817,16 @@ sub isnt_eq {
 
         $self->ok( $test, $name );
         $self->_isnt_diag( $got, 'ne' ) unless $test;
+        $ctx->release;
         return $test;
     }
 
-    return $self->cmp_ok( $got, 'ne', $dont_expect, $name );
+    release $ctx, $self->cmp_ok( $got, 'ne', $dont_expect, $name );
 }
 
 sub isnt_num {
     my( $self, $got, $dont_expect, $name ) = @_;
+    my $ctx = $self->ctx;
     local $Level = $Level + 1;
 
     if( !defined $got || !defined $dont_expect ) {
@@ -1103,52 +835,32 @@ sub isnt_num {
 
         $self->ok( $test, $name );
         $self->_isnt_diag( $got, '!=' ) unless $test;
+        $ctx->release;
         return $test;
     }
 
-    return $self->cmp_ok( $got, '!=', $dont_expect, $name );
+    release $ctx, $self->cmp_ok( $got, '!=', $dont_expect, $name );
 }
 
-=item B<like>
-
-  $Test->like($thing, qr/$regex/, $name);
-  $Test->like($thing, '/$regex/', $name);
-
-Like L<Test::More>'s C<like()>.  Checks if $thing matches the given C<$regex>.
-
-=item B<unlike>
-
-  $Test->unlike($thing, qr/$regex/, $name);
-  $Test->unlike($thing, '/$regex/', $name);
-
-Like L<Test::More>'s C<unlike()>.  Checks if $thing B<does not match> the
-given C<$regex>.
-
-=cut
 
 sub like {
     my( $self, $thing, $regex, $name ) = @_;
+    my $ctx = $self->ctx;
 
     local $Level = $Level + 1;
-    return $self->_regex_ok( $thing, $regex, '=~', $name );
+
+    release $ctx, $self->_regex_ok( $thing, $regex, '=~', $name );
 }
 
 sub unlike {
     my( $self, $thing, $regex, $name ) = @_;
+    my $ctx = $self->ctx;
 
     local $Level = $Level + 1;
-    return $self->_regex_ok( $thing, $regex, '!~', $name );
-}
-
-=item B<cmp_ok>
 
-  $Test->cmp_ok($thing, $type, $that, $name);
-
-Works just like L<Test::More>'s C<cmp_ok()>.
-
-    $Test->cmp_ok($big_num, '!=', $other_big_num);
+    release $ctx, $self->_regex_ok( $thing, $regex, '!~', $name );
+}
 
-=cut
 
 my %numeric_cmps = map { ( $_, 1 ) } ( "<", "<=", ">", ">=", "==", "!=", "<=>" 
);
 
@@ -1157,9 +869,10 @@ my %cmp_ok_bl = map { ( $_, 1 ) } ( "=", "+=", ".=", 
"x=", "^=", "|=", "||=", "&
 
 sub cmp_ok {
     my( $self, $got, $type, $expect, $name ) = @_;
+    my $ctx = $self->ctx;
 
     if ($cmp_ok_bl{$type}) {
-        $self->croak("$type is not a valid comparison operator in cmp_ok()");
+        $ctx->throw("$type is not a valid comparison operator in cmp_ok()");
     }
 
     my ($test, $succ);
@@ -1169,7 +882,7 @@ sub cmp_ok {
 
         local( $@, $!, $SIG{__DIE__} );    # isolate eval
 
-        my($pack, $file, $line) = $self->caller();
+        my($pack, $file, $line) = $ctx->trace->call();
 
         # This is so that warnings come out at the caller's level
         $succ = eval qq[
@@ -1209,7 +922,7 @@ END
             $self->_cmp_diag( $got, $type, $expect );
         }
     }
-    return $ok;
+    return release $ctx, $ok;
 }
 
 sub _cmp_diag {
@@ -1237,182 +950,71 @@ sub _caller_context {
     return $code;
 }
 
-=back
**** PATCH TRUNCATED AT 2000 LINES -- 18159 NOT SHOWN ****

--
Perl5 Master Repository

Reply via email to