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
