In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/86e082c9212ebc75a0e2d64a4445e2ed0d45cd2f?hp=3246b00e7b4d4d350fa31848e41d8de6f2a53735>
- Log ----------------------------------------------------------------- commit 86e082c9212ebc75a0e2d64a4445e2ed0d45cd2f Author: Chad Granum <[email protected]> Date: Tue Nov 11 08:46:36 2014 -0800 Update Porting/Maintainers.pl for alpha Test-Simple M Porting/Maintainers.pl commit 4e88444f9649a0e8c32cf58ccb09d4be33e8d49a Author: Chad Granum <[email protected]> Date: Tue Nov 11 08:30:35 2014 -0800 Update Test-Simple to alpha 073 M MANIFEST M cpan/Test-Simple/lib/Test/Builder.pm M cpan/Test-Simple/lib/Test/Builder/Module.pm M cpan/Test-Simple/lib/Test/Builder/Tester.pm M cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm M cpan/Test-Simple/lib/Test/More.pm M cpan/Test-Simple/lib/Test/Simple.pm M cpan/Test-Simple/lib/Test/Stream.pm M cpan/Test-Simple/lib/Test/Stream/Context.pm M cpan/Test-Simple/lib/Test/Stream/Exporter.pm M cpan/Test-Simple/lib/Test/Stream/Exporter/Meta.pm M cpan/Test-Simple/lib/Test/Stream/PackageUtil.pm M cpan/Test-Simple/lib/Test/Tester.pm M cpan/Test-Simple/lib/Test/use/ok.pm M cpan/Test-Simple/lib/ok.pm A cpan/Test-Simple/t/Behavior/478-cmp_ok_hash.t A cpan/Test-Simple/t/Behavior/490-inherit_exporter.t M cpan/Test-Simple/t/Legacy/Builder/carp.t M cpan/Test-Simple/t/Legacy/subtest/die.t M cpan/Test-Simple/t/Test-More.t commit 518760d966a945c1dd7f5c552bdcf8fa73433ee3 Author: Chad Granum <[email protected]> Date: Tue Nov 11 08:28:24 2014 -0800 Revert "Update Test-Simple to CPAN version 1.001009" This reverts commit 3709f1d4bd0179938a418d9337449fdf20a783bc. We are using the alphas in blead currently, not stable, this update squashed that. M MANIFEST M Makefile.SH M Porting/Maintainers.pl M cpan/Test-Simple/lib/Test/Builder.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/FAQ.pod M cpan/Test-Simple/lib/Test/More.pm A cpan/Test-Simple/lib/Test/More/DeepCheck.pm A cpan/Test-Simple/lib/Test/More/DeepCheck/Strict.pm A cpan/Test-Simple/lib/Test/More/DeepCheck/Tolerant.pm A cpan/Test-Simple/lib/Test/More/Tools.pm A cpan/Test-Simple/lib/Test/MostlyLike.pm M cpan/Test-Simple/lib/Test/Simple.pm A cpan/Test-Simple/lib/Test/Stream.pm A cpan/Test-Simple/lib/Test/Stream/Architecture.pod A cpan/Test-Simple/lib/Test/Stream/ArrayBase.pm A cpan/Test-Simple/lib/Test/Stream/ArrayBase/Meta.pm A cpan/Test-Simple/lib/Test/Stream/Carp.pm A cpan/Test-Simple/lib/Test/Stream/Context.pm A cpan/Test-Simple/lib/Test/Stream/Event.pm A cpan/Test-Simple/lib/Test/Stream/Event/Bail.pm A cpan/Test-Simple/lib/Test/Stream/Event/Child.pm A cpan/Test-Simple/lib/Test/Stream/Event/Diag.pm A cpan/Test-Simple/lib/Test/Stream/Event/Finish.pm A cpan/Test-Simple/lib/Test/Stream/Event/Note.pm A cpan/Test-Simple/lib/Test/Stream/Event/Ok.pm A cpan/Test-Simple/lib/Test/Stream/Event/Plan.pm A cpan/Test-Simple/lib/Test/Stream/Event/Subtest.pm A cpan/Test-Simple/lib/Test/Stream/ExitMagic.pm A cpan/Test-Simple/lib/Test/Stream/ExitMagic/Context.pm A cpan/Test-Simple/lib/Test/Stream/Exporter.pm A cpan/Test-Simple/lib/Test/Stream/Exporter/Meta.pm A cpan/Test-Simple/lib/Test/Stream/IOSets.pm A cpan/Test-Simple/lib/Test/Stream/Meta.pm A cpan/Test-Simple/lib/Test/Stream/PackageUtil.pm A cpan/Test-Simple/lib/Test/Stream/Tester.pm A cpan/Test-Simple/lib/Test/Stream/Tester/Checks.pm A cpan/Test-Simple/lib/Test/Stream/Tester/Checks/Event.pm A cpan/Test-Simple/lib/Test/Stream/Tester/Events.pm A cpan/Test-Simple/lib/Test/Stream/Tester/Events/Event.pm A cpan/Test-Simple/lib/Test/Stream/Tester/Grab.pm A cpan/Test-Simple/lib/Test/Stream/Threads.pm A cpan/Test-Simple/lib/Test/Stream/Toolset.pm A cpan/Test-Simple/lib/Test/Stream/Util.pm A cpan/Test-Simple/lib/Test/Tester.pm A cpan/Test-Simple/lib/Test/Tester/Capture.pm A cpan/Test-Simple/lib/Test/Tutorial/WritingTests.pod A cpan/Test-Simple/lib/Test/Tutorial/WritingTools.pod A cpan/Test-Simple/lib/Test/use/ok.pm A cpan/Test-Simple/lib/ok.pm D cpan/Test-Simple/t/478-cmp_ok_hash.t D cpan/Test-Simple/t/BEGIN_require_ok.t D cpan/Test-Simple/t/BEGIN_use_ok.t A cpan/Test-Simple/t/Behavior/388-threadedsubtest.load A cpan/Test-Simple/t/Behavior/388-threadedsubtest.t A cpan/Test-Simple/t/Behavior/MonkeyPatching_diag.t A cpan/Test-Simple/t/Behavior/MonkeyPatching_done_testing.t A cpan/Test-Simple/t/Behavior/MonkeyPatching_note.t A cpan/Test-Simple/t/Behavior/MonkeyPatching_ok.t A cpan/Test-Simple/t/Behavior/MonkeyPatching_plan.t A cpan/Test-Simple/t/Behavior/Munge.t A cpan/Test-Simple/t/Behavior/NotTB15.t A cpan/Test-Simple/t/Behavior/Tester2_subtest.t A cpan/Test-Simple/t/Behavior/cmp_ok_xor.t A cpan/Test-Simple/t/Behavior/encoding_test.t A cpan/Test-Simple/t/Behavior/fork_new_end.t A cpan/Test-Simple/t/Behavior/skip_all_in_subtest.load A cpan/Test-Simple/t/Behavior/skip_all_in_subtest.t A cpan/Test-Simple/t/Behavior/threads_with_taint_mode.t A cpan/Test-Simple/t/Behavior/todo.t D cpan/Test-Simple/t/Builder/Builder.t D cpan/Test-Simple/t/Builder/carp.t D cpan/Test-Simple/t/Builder/create.t D cpan/Test-Simple/t/Builder/current_test.t D cpan/Test-Simple/t/Builder/current_test_without_plan.t D cpan/Test-Simple/t/Builder/details.t D cpan/Test-Simple/t/Builder/done_testing.t D cpan/Test-Simple/t/Builder/done_testing_double.t D cpan/Test-Simple/t/Builder/done_testing_plan_mismatch.t D cpan/Test-Simple/t/Builder/done_testing_with_no_plan.t D cpan/Test-Simple/t/Builder/done_testing_with_number.t D cpan/Test-Simple/t/Builder/done_testing_with_plan.t D cpan/Test-Simple/t/Builder/fork_with_new_stdout.t D cpan/Test-Simple/t/Builder/has_plan.t D cpan/Test-Simple/t/Builder/has_plan2.t D cpan/Test-Simple/t/Builder/is_fh.t D cpan/Test-Simple/t/Builder/is_passing.t D cpan/Test-Simple/t/Builder/maybe_regex.t D cpan/Test-Simple/t/Builder/no_diag.t D cpan/Test-Simple/t/Builder/no_ending.t D cpan/Test-Simple/t/Builder/no_header.t D cpan/Test-Simple/t/Builder/no_plan_at_all.t D cpan/Test-Simple/t/Builder/ok_obj.t D cpan/Test-Simple/t/Builder/output.t D cpan/Test-Simple/t/Builder/reset.t D cpan/Test-Simple/t/Builder/try.t A cpan/Test-Simple/t/Legacy/BEGIN_require_ok.t A cpan/Test-Simple/t/Legacy/BEGIN_use_ok.t A cpan/Test-Simple/t/Legacy/Builder/Builder.t A cpan/Test-Simple/t/Legacy/Builder/carp.t A cpan/Test-Simple/t/Legacy/Builder/create.t A cpan/Test-Simple/t/Legacy/Builder/current_test.t A cpan/Test-Simple/t/Legacy/Builder/current_test_without_plan.t A cpan/Test-Simple/t/Legacy/Builder/details.t A cpan/Test-Simple/t/Legacy/Builder/done_testing.t A cpan/Test-Simple/t/Legacy/Builder/done_testing_double.t A cpan/Test-Simple/t/Legacy/Builder/done_testing_plan_mismatch.t A cpan/Test-Simple/t/Legacy/Builder/done_testing_with_no_plan.t A cpan/Test-Simple/t/Legacy/Builder/done_testing_with_number.t A cpan/Test-Simple/t/Legacy/Builder/done_testing_with_plan.t A cpan/Test-Simple/t/Legacy/Builder/fork_with_new_stdout.t A cpan/Test-Simple/t/Legacy/Builder/has_plan.t A cpan/Test-Simple/t/Legacy/Builder/has_plan2.t A cpan/Test-Simple/t/Legacy/Builder/is_fh.t A cpan/Test-Simple/t/Legacy/Builder/is_passing.t A cpan/Test-Simple/t/Legacy/Builder/maybe_regex.t A cpan/Test-Simple/t/Legacy/Builder/no_diag.t A cpan/Test-Simple/t/Legacy/Builder/no_ending.t A cpan/Test-Simple/t/Legacy/Builder/no_header.t A cpan/Test-Simple/t/Legacy/Builder/no_plan_at_all.t A cpan/Test-Simple/t/Legacy/Builder/ok_obj.t A cpan/Test-Simple/t/Legacy/Builder/output.t A cpan/Test-Simple/t/Legacy/Builder/reset.t A cpan/Test-Simple/t/Legacy/Builder/reset_outputs.t A cpan/Test-Simple/t/Legacy/More.t A cpan/Test-Simple/t/Legacy/PerlIO.t A cpan/Test-Simple/t/Legacy/Simple/load.t A cpan/Test-Simple/t/Legacy/TestTester/auto.t A cpan/Test-Simple/t/Legacy/TestTester/check_tests.t A cpan/Test-Simple/t/Legacy/TestTester/depth.t A cpan/Test-Simple/t/Legacy/TestTester/is_bug.t A cpan/Test-Simple/t/Legacy/TestTester/run_test.t A cpan/Test-Simple/t/Legacy/Tester/tbt_01basic.t A cpan/Test-Simple/t/Legacy/Tester/tbt_02fhrestore.t A cpan/Test-Simple/t/Legacy/Tester/tbt_03die.t A cpan/Test-Simple/t/Legacy/Tester/tbt_04line_num.t A cpan/Test-Simple/t/Legacy/Tester/tbt_05faildiag.t A cpan/Test-Simple/t/Legacy/Tester/tbt_06errormess.t A cpan/Test-Simple/t/Legacy/Tester/tbt_07args.t A cpan/Test-Simple/t/Legacy/Tester/tbt_08subtest.t A cpan/Test-Simple/t/Legacy/Tester/tbt_09do.t A cpan/Test-Simple/t/Legacy/Tester/tbt_09do_script.pl A cpan/Test-Simple/t/Legacy/bad_plan.t A cpan/Test-Simple/t/Legacy/bail_out.t A cpan/Test-Simple/t/Legacy/buffer.t A cpan/Test-Simple/t/Legacy/c_flag.t A cpan/Test-Simple/t/Legacy/circular_data.t A cpan/Test-Simple/t/Legacy/cmp_ok.t A cpan/Test-Simple/t/Legacy/dependents.t A cpan/Test-Simple/t/Legacy/diag.t A cpan/Test-Simple/t/Legacy/died.t A cpan/Test-Simple/t/Legacy/dont_overwrite_die_handler.t A cpan/Test-Simple/t/Legacy/eq_set.t A cpan/Test-Simple/t/Legacy/exit.t A cpan/Test-Simple/t/Legacy/explain.t A cpan/Test-Simple/t/Legacy/extra.t A cpan/Test-Simple/t/Legacy/extra_one.t A cpan/Test-Simple/t/Legacy/fail-like.t A cpan/Test-Simple/t/Legacy/fail-more.t A cpan/Test-Simple/t/Legacy/fail.t A cpan/Test-Simple/t/Legacy/fail_one.t A cpan/Test-Simple/t/Legacy/filehandles.t A cpan/Test-Simple/t/Legacy/fork.t A cpan/Test-Simple/t/Legacy/fork_in_subtest.t A cpan/Test-Simple/t/Legacy/harness_active.t A cpan/Test-Simple/t/Legacy/import.t A cpan/Test-Simple/t/Legacy/is_deeply_dne_bug.t A cpan/Test-Simple/t/Legacy/is_deeply_fail.t A cpan/Test-Simple/t/Legacy/is_deeply_with_threads.t A cpan/Test-Simple/t/Legacy/missing.t A cpan/Test-Simple/t/Legacy/new_ok.t A cpan/Test-Simple/t/Legacy/no_plan.t A cpan/Test-Simple/t/Legacy/no_tests.t A cpan/Test-Simple/t/Legacy/note.t A cpan/Test-Simple/t/Legacy/overload.t A cpan/Test-Simple/t/Legacy/overload_threads.t A cpan/Test-Simple/t/Legacy/plan.t A cpan/Test-Simple/t/Legacy/plan_bad.t A cpan/Test-Simple/t/Legacy/plan_is_noplan.t A cpan/Test-Simple/t/Legacy/plan_no_plan.t A cpan/Test-Simple/t/Legacy/plan_shouldnt_import.t A cpan/Test-Simple/t/Legacy/plan_skip_all.t A cpan/Test-Simple/t/Legacy/pod.t A cpan/Test-Simple/t/Legacy/require_ok.t A cpan/Test-Simple/t/Legacy/ribasushi_diag.t A cpan/Test-Simple/t/Legacy/ribasushi_threads.t A cpan/Test-Simple/t/Legacy/ribasushi_threads2.t A cpan/Test-Simple/t/Legacy/simple.t A cpan/Test-Simple/t/Legacy/skip.t A cpan/Test-Simple/t/Legacy/skipall.t A cpan/Test-Simple/t/Legacy/strays.t A cpan/Test-Simple/t/Legacy/subtest/args.t A cpan/Test-Simple/t/Legacy/subtest/bail_out.t A cpan/Test-Simple/t/Legacy/subtest/basic.t A cpan/Test-Simple/t/Legacy/subtest/die.t A cpan/Test-Simple/t/Legacy/subtest/do.t A cpan/Test-Simple/t/Legacy/subtest/exceptions.t A cpan/Test-Simple/t/Legacy/subtest/for_do_t.test A cpan/Test-Simple/t/Legacy/subtest/fork.t A cpan/Test-Simple/t/Legacy/subtest/implicit_done.t A cpan/Test-Simple/t/Legacy/subtest/line_numbers.t A cpan/Test-Simple/t/Legacy/subtest/plan.t A cpan/Test-Simple/t/Legacy/subtest/predicate.t A cpan/Test-Simple/t/Legacy/subtest/singleton.t A cpan/Test-Simple/t/Legacy/subtest/threads.t A cpan/Test-Simple/t/Legacy/subtest/todo.t A cpan/Test-Simple/t/Legacy/subtest/wstat.t A cpan/Test-Simple/t/Legacy/tbm_doesnt_set_exported_to.t A cpan/Test-Simple/t/Legacy/test_use_ok.t A cpan/Test-Simple/t/Legacy/thread_taint.t A cpan/Test-Simple/t/Legacy/threads.t A cpan/Test-Simple/t/Legacy/todo.t A cpan/Test-Simple/t/Legacy/undef.t A cpan/Test-Simple/t/Legacy/use_ok.t A cpan/Test-Simple/t/Legacy/useing.t A cpan/Test-Simple/t/Legacy/utf8.t A cpan/Test-Simple/t/Legacy/versions.t D cpan/Test-Simple/t/More.t D cpan/Test-Simple/t/Simple/load.t A cpan/Test-Simple/t/Test-Builder.t A cpan/Test-Simple/t/Test-More-DeepCheck.t A cpan/Test-Simple/t/Test-More.t A cpan/Test-Simple/t/Test-MostlyLike.t A cpan/Test-Simple/t/Test-Simple.t A cpan/Test-Simple/t/Test-Stream-ArrayBase-Meta.t A cpan/Test-Simple/t/Test-Stream-ArrayBase.t A cpan/Test-Simple/t/Test-Stream-Carp.t A cpan/Test-Simple/t/Test-Stream-Event-Diag.t A cpan/Test-Simple/t/Test-Stream-Event-Finish.t A cpan/Test-Simple/t/Test-Stream-Event-Note.t A cpan/Test-Simple/t/Test-Stream-Event.t A cpan/Test-Simple/t/Test-Stream-ExitMagic-Context.t A cpan/Test-Simple/t/Test-Stream-Exporter-Meta.t A cpan/Test-Simple/t/Test-Stream-Exporter.t A cpan/Test-Simple/t/Test-Stream-IOSets.t A cpan/Test-Simple/t/Test-Stream-Meta.t A cpan/Test-Simple/t/Test-Stream-PackageUtil.t A cpan/Test-Simple/t/Test-Stream-Tester-Grab.t A cpan/Test-Simple/t/Test-Stream-Tester.t A cpan/Test-Simple/t/Test-Stream-Toolset.t A cpan/Test-Simple/t/Test-Stream-Util.t A cpan/Test-Simple/t/Test-Tester-Capture.t A cpan/Test-Simple/t/Test-Tester.t A cpan/Test-Simple/t/Test-use-ok.t D cpan/Test-Simple/t/Tester/tbt_01basic.t D cpan/Test-Simple/t/Tester/tbt_02fhrestore.t D cpan/Test-Simple/t/Tester/tbt_03die.t D cpan/Test-Simple/t/Tester/tbt_04line_num.t D cpan/Test-Simple/t/Tester/tbt_05faildiag.t D cpan/Test-Simple/t/Tester/tbt_06errormess.t D cpan/Test-Simple/t/Tester/tbt_07args.t D cpan/Test-Simple/t/Tester/tbt_08subtest.t D cpan/Test-Simple/t/Tester/tbt_09do.t D cpan/Test-Simple/t/Tester/tbt_09do_script.pl D cpan/Test-Simple/t/bad_plan.t D cpan/Test-Simple/t/bail_out.t D cpan/Test-Simple/t/buffer.t D cpan/Test-Simple/t/c_flag.t D cpan/Test-Simple/t/circular_data.t D cpan/Test-Simple/t/cmp_ok.t D cpan/Test-Simple/t/dependents.t D cpan/Test-Simple/t/diag.t D cpan/Test-Simple/t/died.t D cpan/Test-Simple/t/dont_overwrite_die_handler.t D cpan/Test-Simple/t/eq_set.t D cpan/Test-Simple/t/exit.t D cpan/Test-Simple/t/explain.t D cpan/Test-Simple/t/extra.t D cpan/Test-Simple/t/extra_one.t D cpan/Test-Simple/t/fail-like.t D cpan/Test-Simple/t/fail-more.t D cpan/Test-Simple/t/fail.t D cpan/Test-Simple/t/fail_one.t D cpan/Test-Simple/t/filehandles.t D cpan/Test-Simple/t/fork.t D cpan/Test-Simple/t/harness_active.t D cpan/Test-Simple/t/import.t D cpan/Test-Simple/t/is_deeply_dne_bug.t D cpan/Test-Simple/t/is_deeply_fail.t D cpan/Test-Simple/t/is_deeply_with_threads.t A cpan/Test-Simple/t/lib/MyTest.pm A cpan/Test-Simple/t/lib/SmallTest.pm D cpan/Test-Simple/t/missing.t D cpan/Test-Simple/t/new_ok.t D cpan/Test-Simple/t/no_plan.t D cpan/Test-Simple/t/no_tests.t D cpan/Test-Simple/t/note.t D cpan/Test-Simple/t/overload.t D cpan/Test-Simple/t/overload_threads.t D cpan/Test-Simple/t/plan.t D cpan/Test-Simple/t/plan_bad.t D cpan/Test-Simple/t/plan_is_noplan.t D cpan/Test-Simple/t/plan_no_plan.t D cpan/Test-Simple/t/plan_shouldnt_import.t D cpan/Test-Simple/t/plan_skip_all.t D cpan/Test-Simple/t/require_ok.t D cpan/Test-Simple/t/simple.t D cpan/Test-Simple/t/skip.t D cpan/Test-Simple/t/skipall.t D cpan/Test-Simple/t/subtest/args.t D cpan/Test-Simple/t/subtest/bail_out.t D cpan/Test-Simple/t/subtest/basic.t D cpan/Test-Simple/t/subtest/die.t D cpan/Test-Simple/t/subtest/do.t D cpan/Test-Simple/t/subtest/exceptions.t D cpan/Test-Simple/t/subtest/for_do_t.test D cpan/Test-Simple/t/subtest/fork.t D cpan/Test-Simple/t/subtest/implicit_done.t D cpan/Test-Simple/t/subtest/line_numbers.t D cpan/Test-Simple/t/subtest/plan.t D cpan/Test-Simple/t/subtest/predicate.t D cpan/Test-Simple/t/subtest/singleton.t D cpan/Test-Simple/t/subtest/threads.t D cpan/Test-Simple/t/subtest/todo.t D cpan/Test-Simple/t/subtest/wstat.t D cpan/Test-Simple/t/tbm_doesnt_set_exported_to.t D cpan/Test-Simple/t/thread_taint.t D cpan/Test-Simple/t/threads.t D cpan/Test-Simple/t/todo.t D cpan/Test-Simple/t/undef.t D cpan/Test-Simple/t/use_ok.t D cpan/Test-Simple/t/useing.t D cpan/Test-Simple/t/utf8.t D cpan/Test-Simple/t/versions.t M lib/.gitignore ----------------------------------------------------------------------- Summary of changes: MANIFEST | 319 +- Makefile.SH | 35 +- Porting/Maintainers.pl | 12 +- cpan/Test-Simple/lib/Test/Builder.pm | 3087 ++++++-------------- cpan/Test-Simple/lib/Test/Builder/Module.pm | 129 +- cpan/Test-Simple/lib/Test/Builder/Tester.pm | 238 +- cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm | 106 +- cpan/Test-Simple/lib/Test/FAQ.pod | 477 +++ cpan/Test-Simple/lib/Test/More.pm | 1638 +++++------ cpan/Test-Simple/lib/Test/More/DeepCheck.pm | 223 ++ cpan/Test-Simple/lib/Test/More/DeepCheck/Strict.pm | 328 +++ .../lib/Test/More/DeepCheck/Tolerant.pm | 330 +++ cpan/Test-Simple/lib/Test/More/Tools.pm | 540 ++++ cpan/Test-Simple/lib/Test/MostlyLike.pm | 292 ++ cpan/Test-Simple/lib/Test/Simple.pm | 155 +- cpan/Test-Simple/lib/Test/Stream.pm | 1101 +++++++ cpan/Test-Simple/lib/Test/Stream/Architecture.pod | 444 +++ cpan/Test-Simple/lib/Test/Stream/ArrayBase.pm | 371 +++ cpan/Test-Simple/lib/Test/Stream/ArrayBase/Meta.pm | 282 ++ cpan/Test-Simple/lib/Test/Stream/Carp.pm | 142 + cpan/Test-Simple/lib/Test/Stream/Context.pm | 637 ++++ cpan/Test-Simple/lib/Test/Stream/Event.pm | 400 +++ cpan/Test-Simple/lib/Test/Stream/Event/Bail.pm | 182 ++ cpan/Test-Simple/lib/Test/Stream/Event/Child.pm | 144 + cpan/Test-Simple/lib/Test/Stream/Event/Diag.pm | 198 ++ cpan/Test-Simple/lib/Test/Stream/Event/Finish.pm | 127 + cpan/Test-Simple/lib/Test/Stream/Event/Note.pm | 169 ++ cpan/Test-Simple/lib/Test/Stream/Event/Ok.pm | 386 +++ cpan/Test-Simple/lib/Test/Stream/Event/Plan.pm | 219 ++ cpan/Test-Simple/lib/Test/Stream/Event/Subtest.pm | 273 ++ cpan/Test-Simple/lib/Test/Stream/ExitMagic.pm | 259 ++ .../lib/Test/Stream/ExitMagic/Context.pm | 131 + cpan/Test-Simple/lib/Test/Stream/Exporter.pm | 326 +++ cpan/Test-Simple/lib/Test/Stream/Exporter/Meta.pm | 235 ++ cpan/Test-Simple/lib/Test/Stream/IOSets.pm | 243 ++ cpan/Test-Simple/lib/Test/Stream/Meta.pm | 202 ++ cpan/Test-Simple/lib/Test/Stream/PackageUtil.pm | 207 ++ cpan/Test-Simple/lib/Test/Stream/Tester.pm | 725 +++++ cpan/Test-Simple/lib/Test/Stream/Tester/Checks.pm | 401 +++ .../lib/Test/Stream/Tester/Checks/Event.pm | 194 ++ cpan/Test-Simple/lib/Test/Stream/Tester/Events.pm | 166 ++ .../lib/Test/Stream/Tester/Events/Event.pm | 199 ++ cpan/Test-Simple/lib/Test/Stream/Tester/Grab.pm | 215 ++ cpan/Test-Simple/lib/Test/Stream/Threads.pm | 163 ++ cpan/Test-Simple/lib/Test/Stream/Toolset.pm | 350 +++ cpan/Test-Simple/lib/Test/Stream/Util.pm | 331 +++ cpan/Test-Simple/lib/Test/Tester.pm | 770 +++++ cpan/Test-Simple/lib/Test/Tester/Capture.pm | 159 + .../Test-Simple/lib/Test/Tutorial/WritingTests.pod | 198 ++ .../Test-Simple/lib/Test/Tutorial/WritingTools.pod | 295 ++ cpan/Test-Simple/lib/Test/use/ok.pm | 152 + cpan/Test-Simple/lib/ok.pm | 143 + cpan/Test-Simple/t/478-cmp_ok_hash.t | 41 - .../t/Behavior/388-threadedsubtest.load | 3 + cpan/Test-Simple/t/Behavior/388-threadedsubtest.t | 38 + cpan/Test-Simple/t/Behavior/478-cmp_ok_hash.t | 36 + cpan/Test-Simple/t/Behavior/490-inherit_exporter.t | 25 + cpan/Test-Simple/t/Behavior/MonkeyPatching_diag.t | 97 + .../t/Behavior/MonkeyPatching_done_testing.t | 61 + cpan/Test-Simple/t/Behavior/MonkeyPatching_note.t | 97 + cpan/Test-Simple/t/Behavior/MonkeyPatching_ok.t | 108 + cpan/Test-Simple/t/Behavior/MonkeyPatching_plan.t | 86 + cpan/Test-Simple/t/Behavior/Munge.t | 30 + cpan/Test-Simple/t/Behavior/NotTB15.t | 48 + cpan/Test-Simple/t/Behavior/Tester2_subtest.t | 69 + cpan/Test-Simple/t/Behavior/cmp_ok_xor.t | 13 + cpan/Test-Simple/t/Behavior/encoding_test.t | 35 + cpan/Test-Simple/t/Behavior/fork_new_end.t | 53 + .../t/Behavior/skip_all_in_subtest.load | 10 + cpan/Test-Simple/t/Behavior/skip_all_in_subtest.t | 16 + .../t/Behavior/threads_with_taint_mode.t | 47 + cpan/Test-Simple/t/Behavior/todo.t | 43 + cpan/Test-Simple/t/Builder/fork_with_new_stdout.t | 54 - cpan/Test-Simple/t/Builder/try.t | 42 - 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}/Builder/Builder.t | 0 cpan/Test-Simple/t/{ => Legacy}/Builder/carp.t | 10 +- 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 | 2 +- .../t/Legacy/Builder/fork_with_new_stdout.t | 60 + 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 | 2 +- .../t/{ => Legacy}/Builder/is_passing.t | 0 .../t/{ => Legacy}/Builder/maybe_regex.t | 2 +- 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 | 3 - cpan/Test-Simple/t/Legacy/Builder/reset_outputs.t | 35 + cpan/Test-Simple/t/{ => Legacy}/More.t | 7 +- cpan/Test-Simple/t/Legacy/PerlIO.t | 11 + cpan/Test-Simple/t/{ => Legacy}/Simple/load.t | 0 cpan/Test-Simple/t/Legacy/TestTester/auto.t | 32 + cpan/Test-Simple/t/Legacy/TestTester/check_tests.t | 116 + cpan/Test-Simple/t/Legacy/TestTester/depth.t | 39 + cpan/Test-Simple/t/Legacy/TestTester/is_bug.t | 31 + cpan/Test-Simple/t/Legacy/TestTester/run_test.t | 145 + .../t/{ => Legacy}/Tester/tbt_01basic.t | 2 +- .../t/{ => Legacy}/Tester/tbt_02fhrestore.t | 4 +- 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 | 2 +- .../Test-Simple/t/{ => Legacy}/Tester/tbt_07args.t | 2 +- .../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}/bad_plan.t | 0 cpan/Test-Simple/t/{ => Legacy}/bail_out.t | 0 cpan/Test-Simple/t/{ => Legacy}/buffer.t | 0 cpan/Test-Simple/t/{ => Legacy}/c_flag.t | 0 cpan/Test-Simple/t/{ => Legacy}/circular_data.t | 2 +- cpan/Test-Simple/t/{ => Legacy}/cmp_ok.t | 4 +- cpan/Test-Simple/t/{ => Legacy}/dependents.t | 0 cpan/Test-Simple/t/{ => Legacy}/diag.t | 0 cpan/Test-Simple/t/{ => Legacy}/died.t | 0 .../t/{ => Legacy}/dont_overwrite_die_handler.t | 1 + cpan/Test-Simple/t/{ => Legacy}/eq_set.t | 2 +- cpan/Test-Simple/t/{ => Legacy}/exit.t | 9 +- cpan/Test-Simple/t/{ => Legacy}/explain.t | 0 cpan/Test-Simple/t/{ => Legacy}/extra.t | 11 +- cpan/Test-Simple/t/{ => Legacy}/extra_one.t | 0 cpan/Test-Simple/t/{ => Legacy}/fail-like.t | 8 +- cpan/Test-Simple/t/{ => Legacy}/fail-more.t | 15 +- 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 | 9 +- cpan/Test-Simple/t/Legacy/fork_in_subtest.t | 45 + cpan/Test-Simple/t/{ => Legacy}/harness_active.t | 2 +- 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 | 4 +- .../t/{ => Legacy}/is_deeply_with_threads.t | 17 +- cpan/Test-Simple/t/{ => Legacy}/missing.t | 0 cpan/Test-Simple/t/{ => Legacy}/new_ok.t | 4 +- cpan/Test-Simple/t/{ => Legacy}/no_plan.t | 0 cpan/Test-Simple/t/{ => Legacy}/no_tests.t | 0 cpan/Test-Simple/t/{ => Legacy}/note.t | 0 cpan/Test-Simple/t/{ => Legacy}/overload.t | 2 +- cpan/Test-Simple/t/{ => Legacy}/overload_threads.t | 0 cpan/Test-Simple/t/{ => Legacy}/plan.t | 4 +- 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 | 4 + .../t/{ => Legacy}/plan_shouldnt_import.t | 0 cpan/Test-Simple/t/{ => Legacy}/plan_skip_all.t | 0 cpan/Test-Simple/t/Legacy/pod.t | 7 + cpan/Test-Simple/t/{ => Legacy}/require_ok.t | 9 +- cpan/Test-Simple/t/Legacy/ribasushi_diag.t | 59 + cpan/Test-Simple/t/Legacy/ribasushi_threads.t | 77 + cpan/Test-Simple/t/Legacy/ribasushi_threads2.t | 51 + cpan/Test-Simple/t/{ => Legacy}/simple.t | 0 cpan/Test-Simple/t/{ => Legacy}/skip.t | 14 +- cpan/Test-Simple/t/{ => Legacy}/skipall.t | 2 +- cpan/Test-Simple/t/Legacy/strays.t | 27 + cpan/Test-Simple/t/{ => Legacy}/subtest/args.t | 1 + cpan/Test-Simple/t/{ => Legacy}/subtest/bail_out.t | 29 +- cpan/Test-Simple/t/{ => Legacy}/subtest/basic.t | 11 +- cpan/Test-Simple/t/{ => Legacy}/subtest/die.t | 2 +- cpan/Test-Simple/t/{ => Legacy}/subtest/do.t | 2 +- .../t/{ => Legacy}/subtest/exceptions.t | 10 +- .../t/{ => Legacy}/subtest/for_do_t.test | 0 cpan/Test-Simple/t/{ => Legacy}/subtest/fork.t | 15 +- .../t/{ => Legacy}/subtest/implicit_done.t | 0 .../t/{ => Legacy}/subtest/line_numbers.t | 21 +- 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 | 4 +- cpan/Test-Simple/t/{ => Legacy}/subtest/todo.t | 24 +- cpan/Test-Simple/t/{ => Legacy}/subtest/wstat.t | 0 .../t/{ => Legacy}/tbm_doesnt_set_exported_to.t | 2 +- cpan/Test-Simple/t/Legacy/test_use_ok.t | 40 + cpan/Test-Simple/t/{ => Legacy}/thread_taint.t | 0 cpan/Test-Simple/t/Legacy/threads.t | 47 + cpan/Test-Simple/t/{ => Legacy}/todo.t | 14 +- cpan/Test-Simple/t/{ => Legacy}/undef.t | 13 +- 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 | 50 + cpan/Test-Simple/t/Test-Builder.t | 10 + cpan/Test-Simple/t/Test-More-DeepCheck.t | 7 + cpan/Test-Simple/t/Test-More.t | 29 + cpan/Test-Simple/t/Test-MostlyLike.t | 159 + cpan/Test-Simple/t/Test-Simple.t | 24 + cpan/Test-Simple/t/Test-Stream-ArrayBase-Meta.t | 10 + cpan/Test-Simple/t/Test-Stream-ArrayBase.t | 97 + cpan/Test-Simple/t/Test-Stream-Carp.t | 53 + cpan/Test-Simple/t/Test-Stream-Event-Diag.t | 24 + cpan/Test-Simple/t/Test-Stream-Event-Finish.t | 7 + cpan/Test-Simple/t/Test-Stream-Event-Note.t | 19 + cpan/Test-Simple/t/Test-Stream-Event.t | 30 + cpan/Test-Simple/t/Test-Stream-ExitMagic-Context.t | 8 + cpan/Test-Simple/t/Test-Stream-Exporter-Meta.t | 9 + cpan/Test-Simple/t/Test-Stream-Exporter.t | 130 + cpan/Test-Simple/t/Test-Stream-IOSets.t | 31 + cpan/Test-Simple/t/Test-Stream-Meta.t | 16 + cpan/Test-Simple/t/Test-Stream-PackageUtil.t | 38 + cpan/Test-Simple/t/Test-Stream-Tester-Grab.t | 11 + cpan/Test-Simple/t/Test-Stream-Tester.t | 140 + cpan/Test-Simple/t/Test-Stream-Toolset.t | 11 + cpan/Test-Simple/t/Test-Stream-Util.t | 45 + cpan/Test-Simple/t/Test-Tester-Capture.t | 9 + cpan/Test-Simple/t/Test-Tester.t | 9 + cpan/Test-Simple/t/Test-use-ok.t | 25 + cpan/Test-Simple/t/lib/MyTest.pm | 15 + cpan/Test-Simple/t/lib/SmallTest.pm | 35 + cpan/Test-Simple/t/threads.t | 33 - cpan/Test-Simple/t/versions.t | 28 - lib/.gitignore | 1 + 225 files changed, 18723 insertions(+), 3637 deletions(-) create mode 100644 cpan/Test-Simple/lib/Test/FAQ.pod create mode 100644 cpan/Test-Simple/lib/Test/More/DeepCheck.pm create mode 100644 cpan/Test-Simple/lib/Test/More/DeepCheck/Strict.pm create mode 100644 cpan/Test-Simple/lib/Test/More/DeepCheck/Tolerant.pm create mode 100644 cpan/Test-Simple/lib/Test/More/Tools.pm create mode 100644 cpan/Test-Simple/lib/Test/MostlyLike.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Architecture.pod create mode 100644 cpan/Test-Simple/lib/Test/Stream/ArrayBase.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/ArrayBase/Meta.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Carp.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Context.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event/Bail.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event/Child.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event/Diag.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event/Finish.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event/Note.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event/Ok.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event/Plan.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Event/Subtest.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/ExitMagic.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/ExitMagic/Context.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Exporter.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Exporter/Meta.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/IOSets.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Meta.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/PackageUtil.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Tester.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Tester/Checks.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Tester/Checks/Event.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Tester/Events.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Tester/Events/Event.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Tester/Grab.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Threads.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Toolset.pm create mode 100644 cpan/Test-Simple/lib/Test/Stream/Util.pm create mode 100644 cpan/Test-Simple/lib/Test/Tester.pm create mode 100644 cpan/Test-Simple/lib/Test/Tester/Capture.pm create mode 100644 cpan/Test-Simple/lib/Test/Tutorial/WritingTests.pod create mode 100644 cpan/Test-Simple/lib/Test/Tutorial/WritingTools.pod create mode 100644 cpan/Test-Simple/lib/Test/use/ok.pm create mode 100644 cpan/Test-Simple/lib/ok.pm delete mode 100644 cpan/Test-Simple/t/478-cmp_ok_hash.t create mode 100644 cpan/Test-Simple/t/Behavior/388-threadedsubtest.load create mode 100644 cpan/Test-Simple/t/Behavior/388-threadedsubtest.t create mode 100644 cpan/Test-Simple/t/Behavior/478-cmp_ok_hash.t create mode 100644 cpan/Test-Simple/t/Behavior/490-inherit_exporter.t create mode 100644 cpan/Test-Simple/t/Behavior/MonkeyPatching_diag.t create mode 100644 cpan/Test-Simple/t/Behavior/MonkeyPatching_done_testing.t create mode 100644 cpan/Test-Simple/t/Behavior/MonkeyPatching_note.t create mode 100644 cpan/Test-Simple/t/Behavior/MonkeyPatching_ok.t create mode 100644 cpan/Test-Simple/t/Behavior/MonkeyPatching_plan.t create mode 100644 cpan/Test-Simple/t/Behavior/Munge.t create mode 100644 cpan/Test-Simple/t/Behavior/NotTB15.t create mode 100644 cpan/Test-Simple/t/Behavior/Tester2_subtest.t create mode 100644 cpan/Test-Simple/t/Behavior/cmp_ok_xor.t create mode 100644 cpan/Test-Simple/t/Behavior/encoding_test.t create mode 100644 cpan/Test-Simple/t/Behavior/fork_new_end.t create mode 100644 cpan/Test-Simple/t/Behavior/skip_all_in_subtest.load create mode 100644 cpan/Test-Simple/t/Behavior/skip_all_in_subtest.t create mode 100644 cpan/Test-Simple/t/Behavior/threads_with_taint_mode.t create mode 100644 cpan/Test-Simple/t/Behavior/todo.t delete mode 100644 cpan/Test-Simple/t/Builder/fork_with_new_stdout.t delete mode 100644 cpan/Test-Simple/t/Builder/try.t rename cpan/Test-Simple/t/{ => Legacy}/BEGIN_require_ok.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/BEGIN_use_ok.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/Builder/Builder.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/Builder/carp.t (65%) 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 (83%) 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 (99%) rename cpan/Test-Simple/t/{ => Legacy}/Builder/is_passing.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/Builder/maybe_regex.t (99%) 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 (97%) create mode 100644 cpan/Test-Simple/t/Legacy/Builder/reset_outputs.t rename cpan/Test-Simple/t/{ => Legacy}/More.t (98%) create mode 100644 cpan/Test-Simple/t/Legacy/PerlIO.t rename cpan/Test-Simple/t/{ => Legacy}/Simple/load.t (100%) create mode 100644 cpan/Test-Simple/t/Legacy/TestTester/auto.t create mode 100644 cpan/Test-Simple/t/Legacy/TestTester/check_tests.t create mode 100644 cpan/Test-Simple/t/Legacy/TestTester/depth.t create mode 100644 cpan/Test-Simple/t/Legacy/TestTester/is_bug.t create mode 100644 cpan/Test-Simple/t/Legacy/TestTester/run_test.t rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_01basic.t (99%) rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_02fhrestore.t (96%) 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 (99%) rename cpan/Test-Simple/t/{ => Legacy}/Tester/tbt_07args.t (99%) 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}/bad_plan.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/bail_out.t (100%) 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}/circular_data.t (99%) rename cpan/Test-Simple/t/{ => Legacy}/cmp_ok.t (99%) rename cpan/Test-Simple/t/{ => Legacy}/dependents.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/diag.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/died.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/dont_overwrite_die_handler.t (95%) rename cpan/Test-Simple/t/{ => Legacy}/eq_set.t (92%) rename cpan/Test-Simple/t/{ => Legacy}/exit.t (90%) rename cpan/Test-Simple/t/{ => Legacy}/explain.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/extra.t (86%) rename cpan/Test-Simple/t/{ => Legacy}/extra_one.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/fail-like.t (91%) rename cpan/Test-Simple/t/{ => Legacy}/fail-more.t (95%) 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%) rename cpan/Test-Simple/t/{ => Legacy}/fork.t (68%) create mode 100644 cpan/Test-Simple/t/Legacy/fork_in_subtest.t rename cpan/Test-Simple/t/{ => Legacy}/harness_active.t (98%) 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 (99%) rename cpan/Test-Simple/t/{ => Legacy}/is_deeply_with_threads.t (82%) rename cpan/Test-Simple/t/{ => Legacy}/missing.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/new_ok.t (81%) rename cpan/Test-Simple/t/{ => Legacy}/no_plan.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/no_tests.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/note.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/overload.t (97%) rename cpan/Test-Simple/t/{ => Legacy}/overload_threads.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/plan.t (58%) 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 (84%) rename cpan/Test-Simple/t/{ => Legacy}/plan_shouldnt_import.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/plan_skip_all.t (100%) create mode 100644 cpan/Test-Simple/t/Legacy/pod.t rename cpan/Test-Simple/t/{ => Legacy}/require_ok.t (56%) create mode 100644 cpan/Test-Simple/t/Legacy/ribasushi_diag.t create mode 100644 cpan/Test-Simple/t/Legacy/ribasushi_threads.t create mode 100644 cpan/Test-Simple/t/Legacy/ribasushi_threads2.t rename cpan/Test-Simple/t/{ => Legacy}/simple.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/skip.t (86%) rename cpan/Test-Simple/t/{ => Legacy}/skipall.t (98%) create mode 100644 cpan/Test-Simple/t/Legacy/strays.t rename cpan/Test-Simple/t/{ => Legacy}/subtest/args.t (96%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/bail_out.t (55%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/basic.t (94%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/die.t (87%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/do.t (83%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/exceptions.t (88%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/for_do_t.test (100%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/fork.t (78%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/implicit_done.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/line_numbers.t (90%) 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 (74%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/todo.t (87%) rename cpan/Test-Simple/t/{ => Legacy}/subtest/wstat.t (100%) rename cpan/Test-Simple/t/{ => Legacy}/tbm_doesnt_set_exported_to.t (88%) create mode 100644 cpan/Test-Simple/t/Legacy/test_use_ok.t rename cpan/Test-Simple/t/{ => Legacy}/thread_taint.t (100%) create mode 100644 cpan/Test-Simple/t/Legacy/threads.t rename cpan/Test-Simple/t/{ => Legacy}/todo.t (93%) rename cpan/Test-Simple/t/{ => Legacy}/undef.t (90%) 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%) create mode 100644 cpan/Test-Simple/t/Legacy/versions.t create mode 100644 cpan/Test-Simple/t/Test-Builder.t create mode 100644 cpan/Test-Simple/t/Test-More-DeepCheck.t create mode 100644 cpan/Test-Simple/t/Test-More.t create mode 100644 cpan/Test-Simple/t/Test-MostlyLike.t create mode 100644 cpan/Test-Simple/t/Test-Simple.t create mode 100644 cpan/Test-Simple/t/Test-Stream-ArrayBase-Meta.t create mode 100644 cpan/Test-Simple/t/Test-Stream-ArrayBase.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Carp.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Event-Diag.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Event-Finish.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Event-Note.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Event.t create mode 100644 cpan/Test-Simple/t/Test-Stream-ExitMagic-Context.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Exporter-Meta.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Exporter.t create mode 100644 cpan/Test-Simple/t/Test-Stream-IOSets.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Meta.t create mode 100644 cpan/Test-Simple/t/Test-Stream-PackageUtil.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Tester-Grab.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Tester.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Toolset.t create mode 100644 cpan/Test-Simple/t/Test-Stream-Util.t create mode 100644 cpan/Test-Simple/t/Test-Tester-Capture.t create mode 100644 cpan/Test-Simple/t/Test-Tester.t create mode 100644 cpan/Test-Simple/t/Test-use-ok.t create mode 100644 cpan/Test-Simple/t/lib/MyTest.pm create mode 100644 cpan/Test-Simple/t/lib/SmallTest.pm delete mode 100644 cpan/Test-Simple/t/threads.t delete mode 100644 cpan/Test-Simple/t/versions.t diff --git a/MANIFEST b/MANIFEST index dc48d47..36add9b 100644 --- a/MANIFEST +++ b/MANIFEST @@ -2254,73 +2254,203 @@ 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/lib/Test.pm A simple framework for writing test scripts +cpan/Test-Simple/lib/ok.pm Test::Simple library cpan/Test-Simple/lib/Test/Builder/Module.pm Test::Simple module cpan/Test-Simple/lib/Test/Builder.pm Test::Simple module cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm Test::Simple module cpan/Test-Simple/lib/Test/Builder/Tester.pm Test::Simple module +cpan/Test-Simple/lib/Test/FAQ.pod Test::Simple module +cpan/Test-Simple/lib/Test/More/DeepCheck.pm Test::Simple module +cpan/Test-Simple/lib/Test/More/DeepCheck/Strict.pm Test::Simple module +cpan/Test-Simple/lib/Test/More/DeepCheck/Tolerant.pm Test::Simple module cpan/Test-Simple/lib/Test/More.pm Test::Simple module +cpan/Test-Simple/lib/Test/More/Tools.pm Test::Simple module +cpan/Test-Simple/lib/Test/MostlyLike.pm Test::Simple module cpan/Test-Simple/lib/Test/Simple.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Architecture.pod Test::Simple module +cpan/Test-Simple/lib/Test/Stream/ArrayBase/Meta.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/ArrayBase.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Carp.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Context.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event/Bail.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event/Child.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event/Diag.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event/Finish.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event/Note.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event/Ok.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event/Plan.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Event/Subtest.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/ExitMagic/Context.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/ExitMagic.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Exporter/Meta.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Exporter.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/IOSets.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Meta.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/PackageUtil.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Tester/Checks/Event.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Tester/Checks.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Tester/Events/Event.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Tester/Events.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Tester/Grab.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Tester.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Threads.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Toolset.pm Test::Simple module +cpan/Test-Simple/lib/Test/Stream/Util.pm Test::Simple module +cpan/Test-Simple/lib/Test/Tester/Capture.pm Test::Simple module +cpan/Test-Simple/lib/Test/Tester.pm Test::Simple module cpan/Test-Simple/lib/Test/Tutorial.pod Test::Simple documentation -cpan/Test-Simple/t/478-cmp_ok_hash.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.t -cpan/Test-Simple/t/Builder/try.t -cpan/Test-Simple/t/c_flag.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/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/lib/Test/Tutorial/WritingTests.pod Test::Simple documentation +cpan/Test-Simple/lib/Test/Tutorial/WritingTools.pod Test::Simple documentation +cpan/Test-Simple/lib/Test/use/ok.pm Test::Simple library +cpan/Test-Simple/t/Behavior/388-threadedsubtest.load Test::Simple Test +cpan/Test-Simple/t/Behavior/388-threadedsubtest.t Test::Simple test +cpan/Test-Simple/t/Behavior/478-cmp_ok_hash.t Test::Simple test +cpan/Test-Simple/t/Behavior/490-inherit_exporter.t Test::Simple test +cpan/Test-Simple/t/Behavior/cmp_ok_xor.t Test::Simple Test +cpan/Test-Simple/t/Behavior/encoding_test.t Test::Simple Test +cpan/Test-Simple/t/Behavior/fork_new_end.t Test::Simple Test +cpan/Test-Simple/t/Behavior/MonkeyPatching_diag.t Test::Simple Test +cpan/Test-Simple/t/Behavior/MonkeyPatching_done_testing.t Test::Simple Test +cpan/Test-Simple/t/Behavior/MonkeyPatching_note.t Test::Simple Test +cpan/Test-Simple/t/Behavior/MonkeyPatching_ok.t Test::Simple Test +cpan/Test-Simple/t/Behavior/MonkeyPatching_plan.t Test::Simple Test +cpan/Test-Simple/t/Behavior/Munge.t Test::Simple Test +cpan/Test-Simple/t/Behavior/NotTB15.t Test::Simple Test +cpan/Test-Simple/t/Behavior/skip_all_in_subtest.load Test::Simple Test +cpan/Test-Simple/t/Behavior/skip_all_in_subtest.t Test::Simple Test +cpan/Test-Simple/t/Behavior/Tester2_subtest.t Test::Simple Test +cpan/Test-Simple/t/Behavior/threads_with_taint_mode.t Test::Simple Test +cpan/Test-Simple/t/Behavior/todo.t Test::Simple Test +cpan/Test-Simple/t/Legacy/bad_plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/bail_out.t Test::Simple Test +cpan/Test-Simple/t/Legacy/BEGIN_require_ok.t Test::Simple Test +cpan/Test-Simple/t/Legacy/BEGIN_use_ok.t Test::Simple Test +cpan/Test-Simple/t/Legacy/buffer.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/Builder.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/carp.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/create.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/current_test.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/current_test_without_plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/details.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/done_testing_double.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/done_testing_plan_mismatch.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/done_testing.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/done_testing_with_no_plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/done_testing_with_number.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/done_testing_with_plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/fork_with_new_stdout.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/has_plan2.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/has_plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/is_fh.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/is_passing.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/maybe_regex.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/no_diag.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/no_ending.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/no_header.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/no_plan_at_all.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/ok_obj.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/output.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/reset_outputs.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Builder/reset.t Test::Simple Test +cpan/Test-Simple/t/Legacy/c_flag.t Test::Simple Test +cpan/Test-Simple/t/Legacy/circular_data.t Test::Simple Test +cpan/Test-Simple/t/Legacy/cmp_ok.t Test::Simple Test +cpan/Test-Simple/t/Legacy/dependents.t Test::Simple Test +cpan/Test-Simple/t/Legacy/diag.t Test::Simple Test +cpan/Test-Simple/t/Legacy/died.t Test::Simple Test +cpan/Test-Simple/t/Legacy/dont_overwrite_die_handler.t Test::Simple Test +cpan/Test-Simple/t/Legacy/eq_set.t Test::Simple Test +cpan/Test-Simple/t/Legacy/exit.t Test::Simple Test +cpan/Test-Simple/t/Legacy/explain.t Test::Simple Test +cpan/Test-Simple/t/Legacy/extra_one.t Test::Simple Test +cpan/Test-Simple/t/Legacy/extra.t Test::Simple Test +cpan/Test-Simple/t/Legacy/fail-like.t Test::Simple Test +cpan/Test-Simple/t/Legacy/fail-more.t Test::Simple Test +cpan/Test-Simple/t/Legacy/fail_one.t Test::Simple Test +cpan/Test-Simple/t/Legacy/fail.t Test::Simple Test +cpan/Test-Simple/t/Legacy/filehandles.t Test::Simple Test +cpan/Test-Simple/t/Legacy/fork_in_subtest.t Test::Simple Test +cpan/Test-Simple/t/Legacy/fork.t Test::Simple Test +cpan/Test-Simple/t/Legacy/harness_active.t Test::Simple Test +cpan/Test-Simple/t/Legacy/import.t Test::Simple Test +cpan/Test-Simple/t/Legacy/is_deeply_dne_bug.t Test::Simple Test +cpan/Test-Simple/t/Legacy/is_deeply_fail.t Test::Simple Test +cpan/Test-Simple/t/Legacy/is_deeply_with_threads.t Test::Simple Test +cpan/Test-Simple/t/Legacy/missing.t Test::Simple Test +cpan/Test-Simple/t/Legacy/More.t Test::Simple Test +cpan/Test-Simple/t/Legacy/new_ok.t Test::Simple Test +cpan/Test-Simple/t/Legacy/no_plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/no_tests.t Test::Simple Test +cpan/Test-Simple/t/Legacy/note.t Test::Simple Test +cpan/Test-Simple/t/Legacy/overload.t Test::Simple Test +cpan/Test-Simple/t/Legacy/overload_threads.t Test::Simple Test +cpan/Test-Simple/t/Legacy/PerlIO.t Test::Simple Test +cpan/Test-Simple/t/Legacy/plan_bad.t Test::Simple Test +cpan/Test-Simple/t/Legacy/plan_is_noplan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/plan_no_plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/plan_shouldnt_import.t Test::Simple Test +cpan/Test-Simple/t/Legacy/plan_skip_all.t Test::Simple Test +cpan/Test-Simple/t/Legacy/plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/pod.t Test::Simple Test +cpan/Test-Simple/t/Legacy/require_ok.t Test::Simple Test +cpan/Test-Simple/t/Legacy/ribasushi_diag.t Test::Simple Test +cpan/Test-Simple/t/Legacy/ribasushi_threads2.t Test::Simple Test +cpan/Test-Simple/t/Legacy/ribasushi_threads.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Simple/load.t Test::Simple Test +cpan/Test-Simple/t/Legacy/simple.t Test::Simple Test +cpan/Test-Simple/t/Legacy/skipall.t Test::Simple Test +cpan/Test-Simple/t/Legacy/skip.t Test::Simple Test +cpan/Test-Simple/t/Legacy/strays.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/args.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/bail_out.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/basic.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/die.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/do.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/exceptions.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/for_do_t.test Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/fork.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/implicit_done.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/line_numbers.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/plan.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/predicate.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/singleton.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/threads.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/todo.t Test::Simple Test +cpan/Test-Simple/t/Legacy/subtest/wstat.t Test::Simple Test +cpan/Test-Simple/t/Legacy/tbm_doesnt_set_exported_to.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_01basic.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_02fhrestore.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_03die.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_04line_num.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_05faildiag.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_06errormess.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_07args.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_08subtest.t Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_09do_script.pl Test::Simple Test +cpan/Test-Simple/t/Legacy/Tester/tbt_09do.t Test::Simple Test +cpan/Test-Simple/t/Legacy/TestTester/auto.t Test::Simple Test +cpan/Test-Simple/t/Legacy/TestTester/check_tests.t Test::Simple Test +cpan/Test-Simple/t/Legacy/TestTester/depth.t Test::Simple Test +cpan/Test-Simple/t/Legacy/TestTester/is_bug.t Test::Simple Test +cpan/Test-Simple/t/Legacy/TestTester/run_test.t Test::Simple Test +cpan/Test-Simple/t/Legacy/test_use_ok.t Test::Simple Test +cpan/Test-Simple/t/Legacy/threads.t Test::Simple Test +cpan/Test-Simple/t/Legacy/thread_taint.t Test::Simple Test +cpan/Test-Simple/t/Legacy/todo.t Test::Simple Test +cpan/Test-Simple/t/Legacy/undef.t Test::Simple Test +cpan/Test-Simple/t/Legacy/useing.t Test::Simple Test +cpan/Test-Simple/t/Legacy/use_ok.t Test::Simple Test +cpan/Test-Simple/t/Legacy/utf8.t Test::Simple Test +cpan/Test-Simple/t/Legacy/versions.t Test::Simple Test cpan/Test-Simple/t/lib/Dev/Null.pm Test::Simple Test cpan/Test-Simple/t/lib/Dummy.pm Test::Simple Test cpan/Test-Simple/t/lib/MyOverload.pm Test::Simple Test +cpan/Test-Simple/t/lib/MyTest.pm Test::Simple Test cpan/Test-Simple/t/lib/NoExporter.pm Test::Simple Test cpan/Test-Simple/t/lib/SigDie.pm Test::Simple Test +cpan/Test-Simple/t/lib/SmallTest.pm Test::Simple Test cpan/Test-Simple/t/lib/Test/Builder/NoOutput.pm Test::Simple Test cpan/Test-Simple/t/lib/Test/Simple/Catch.pm Test::Simple Test cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_in_eval.plx Test::Simple Test @@ -2340,60 +2470,31 @@ cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few_fail.plx Test::Simple cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few.plx Test::Simple Test cpan/Test-Simple/t/lib/Test/Simple/sample_tests/two_fail.plx Test::Simple Test cpan/Test-Simple/t/lib/TieOut.pm Test::Simple Test -cpan/Test-Simple/t/missing.t -cpan/Test-Simple/t/More.t -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/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/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/Test-Builder.t Test::Simple Test +cpan/Test-Simple/t/Test-More-DeepCheck.t Test::Simple Test +cpan/Test-Simple/t/Test-More.t Test::Simple Test +cpan/Test-Simple/t/Test-MostlyLike.t Test::Simple Test +cpan/Test-Simple/t/Test-Simple.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-ArrayBase-Meta.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-ArrayBase.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Carp.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Event-Diag.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Event-Finish.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Event-Note.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Event.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-ExitMagic-Context.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Exporter-Meta.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Exporter.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-IOSets.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Meta.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-PackageUtil.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Tester-Grab.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Tester.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Toolset.t Test::Simple Test +cpan/Test-Simple/t/Test-Stream-Util.t Test::Simple Test +cpan/Test-Simple/t/Test-Tester-Capture.t Test::Simple Test +cpan/Test-Simple/t/Test-Tester.t Test::Simple Test +cpan/Test-Simple/t/Test-use-ok.t Test::Simple Test cpan/Test-Simple/t/xt/dependents.t Test::Simple Test cpan/Test/t/05_about_verbose.t See if Test works cpan/Test/t/fail.t See if Test works diff --git a/Makefile.SH b/Makefile.SH index df82d33..5f630fa 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -1288,21 +1288,26 @@ _cleaner2: -rmdir lib/autodie/Scope lib/autodie lib/XS lib/Win32API lib/VMS -rmdir lib/Unicode/Collate/Locale lib/Unicode/Collate/CJK -rmdir lib/Unicode/Collate lib/Tie/Hash lib/Thread lib/Text - -rmdir lib/Test/Builder/Tester 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/Test/use lib/Test/Tutorial lib/Test/Tester + -rmdir lib/Test/Stream/Tester/Events lib/Test/Stream/Tester/Checks + -rmdir lib/Test/Stream/Tester lib/Test/Stream/Exporter + -rmdir lib/Test/Stream/ExitMagic lib/Test/Stream/Event + -rmdir lib/Test/Stream/ArrayBase lib/Test/Stream + -rmdir lib/Test/More/DeepCheck lib/Test/More lib/Test/Builder/Tester + -rmdir lib/Test/Builder lib/Test lib/Term lib/TAP/Parser/YAMLish + -rmdir lib/TAP/Parser/SourceHandler lib/TAP/Parser/Scheduler + -rmdir lib/TAP/Parser/Result lib/TAP/Parser/Iterator lib/TAP/Parser + -rmdir lib/TAP/Harness lib/TAP/Formatter/File + -rmdir lib/TAP/Formatter/Console lib/TAP/Formatter lib/TAP + -rmdir lib/Sys/Syslog lib/Sys lib/Sub lib/Search lib/Scalar + -rmdir lib/Pod/Text lib/Pod/Simple lib/Pod/Perldoc lib/PerlIO/via + -rmdir lib/PerlIO lib/Perl lib/Parse/CPAN lib/Parse lib/Params + -rmdir lib/Net/FTP lib/Module/Load lib/Module/CoreList lib/Module + -rmdir lib/Memoize lib/Math/BigInt lib/Math/BigFloat lib/Math lib/MIME + -rmdir lib/Locale/Maketext lib/Locale/Codes lib/Locale lib/List/Util + -rmdir lib/List lib/JSON/PP lib/JSON lib/IPC lib/IO/Uncompress/Adapter + -rmdir lib/IO/Uncompress lib/IO/Socket lib/IO/Compress/Zlib + -rmdir lib/IO/Compress/Zip lib/IO/Compress/Gzip lib/IO/Compress/Base -rmdir lib/IO/Compress/Adapter lib/IO/Compress lib/IO -rmdir lib/I18N/LangTags lib/I18N lib/Hash/Util lib/Hash lib/HTTP -rmdir lib/Filter/Util lib/Filter lib/File/Spec lib/ExtUtils/Typemaps diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 5b4fc50..2ed1f2d 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -1065,20 +1065,18 @@ use File::Glob qw(:case); }, 'Test::Simple' => { - 'DISTRIBUTION' => 'EXODIST/Test-Simple-1.001009.tar.gz', + 'DISTRIBUTION' => 'EXODIST/Test-Simple-1.301001_073.tar.gz', 'FILES' => q[cpan/Test-Simple], 'EXCLUDED' => [ qr{^t/xt}, + qr{^xt}, + qr{^profiling}, qw( .perlcriticrc .perltidyrc examples/indent.pl examples/subtest.t - t/00compile.t - t/00test_harness_check.t - t/pod.t - t/pod-coverage.t - t/Builder/reset_outputs.t - lib/Test/Builder/IO/Scalar.pm + t/Legacy/00compile.t + t/Legacy/pod.t ), ], }, diff --git a/cpan/Test-Simple/lib/Test/Builder.pm b/cpan/Test-Simple/lib/Test/Builder.pm index e10e102..434cc13 100644 --- a/cpan/Test-Simple/lib/Test/Builder.pm +++ b/cpan/Test-Simple/lib/Test/Builder.pm @@ -1,2672 +1,1331 @@ package Test::Builder; -use 5.006; +use 5.008001; use strict; use warnings; -our $VERSION = '1.001009'; +our $VERSION = '1.301001_073'; $VERSION = eval $VERSION; ## no critic (BuiltinFunctions::ProhibitStringyEval) -BEGIN { - if( $] < 5.008 ) { - require Test::Builder::IO::Scalar; - } -} - -# 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 ); - } +use Test::Stream 1.301001 qw/ -internal STATE_LEGACY STATE_PLAN STATE_COUNT /; +use Test::Stream::Toolset; +use Test::Stream::Context; +use Test::Stream::Carp qw/confess/; +use Test::Stream::Meta qw/MODERN/; - $_[0] = &threads::shared::share( $_[0] ); +use Test::Stream::Util qw/try protect unoverload_str is_regex/; +use Scalar::Util qw/blessed reftype/; - if( $type eq 'HASH' ) { - %{ $_[0] } = %$data; - } - elsif( $type eq 'ARRAY' ) { - @{ $_[0] } = @$data; - } - elsif( $type eq 'SCALAR' ) { - ${ $_[0] } = $$data; - } - else { - die( "Unknown type: " . $type ); - } +use Test::More::Tools; - 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 }; - } +BEGIN { + my $meta = Test::Stream::Meta->is_tester('main'); + Test::Stream->shared->set_use_legacy(1) + unless $meta && $meta->[MODERN]; } -=head1 NAME - -Test::Builder - Backend for building test libraries - -=head1 SYNOPSIS - - package My::Test::Module; - use base 'Test::Builder::Module'; - - my $CLASS = __PACKAGE__; - - sub ok { - my($test, $name) = @_; - my $tb = $CLASS->builder; - - $tb->ok($test, $name); - } +# The mostly-singleton, and other package vars. +our $Test = Test::Builder->new; +our $_ORIG_Test = $Test; +our $Level = 1; +sub ctx { + my $self = shift || die "No self in context"; + my ($add) = @_; + my $ctx = Test::Stream::Context::context(2 + ($add || 0), $self->{stream}); + if (defined $self->{Todo}) { + $ctx->set_in_todo(1); + $ctx->set_todo($self->{Todo}); + $ctx->set_diag_todo(1); + } + return $ctx; +} -=head1 DESCRIPTION +sub stream { + my $self = shift; + return $self->{stream} || Test::Stream->shared; +} -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>. +sub depth { $_[0]->{depth} || 0 } -=head2 Construction +# This is only for unit tests at this point. +sub _ending { + my $self = shift; + my ($ctx) = @_; + require Test::Stream::ExitMagic; + $self->{stream}->set_no_ending(0); + Test::Stream::ExitMagic->new->do_magic($self->{stream}, $ctx); +} + +my %WARNED; +our $CTX; +our %ORIG = ( + ok => \&ok, + diag => \&diag, + note => \¬e, + plan => \&plan, + done_testing => \&done_testing, +); -=over 4 +sub WARN_OF_OVERRIDE { + my ($sub, $ctx) = @_; -=item B<new> + return unless $ctx->modern; + my $old = $ORIG{$sub}; + # Use package instead of self, we want replaced subs, not subclass overrides. + my $new = __PACKAGE__->can($sub); - my $Test = Test::Builder->new; + return if $new == $old; -Returns a Test::Builder object representing the current state of the -test. + require B; + my $o = B::svref_2object($new); + my $gv = $o->GV; + my $st = $o->START; + my $name = $gv->NAME; + my $pkg = $gv->STASH->NAME; + my $line = $st->line; + my $file = $st->file; -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. + warn <<" EOT" unless $WARNED{"$pkg $name $file $line"}++; -If you want a completely new Test::Builder object different from the -singleton, use C<create>. +******************************************************************************* +Something monkeypatched Test::Builder::$sub()! +The new sub is '$pkg\::$name' defined in $file around line $line. +In the near future monkeypatching Test::Builder::ok() will no longer work +as expected. +******************************************************************************* + EOT +} -=cut -our $Test = Test::Builder->new; +#################### +# {{{ Constructors # +#################### sub new { - my($class) = shift; - $Test ||= $class->create; + my $class = shift; + my %params = @_; + $Test ||= $class->create(shared_stream => 1); + 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 $class = shift; + my %params = @_; my $self = bless {}, $class; - $self->reset; + $self->reset(%params); 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) = @_; - + my ($src, $dest) = @_; %$dest = %$src; - _share_keys($dest); - return; } +#################### +# }}} Constructors # +#################### -=item B<child> - - my $child = $builder->child($name_of_child); - $child->plan( tests => 4 ); - $child->ok(some_code()); - ... - $child->finalize; +############################# +# {{{ Children and subtests # +############################# -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>. - -Trying to run a test when you have an open child will also C<croak> and cause -the test suite to fail. - -=cut +sub subtest { + my $self = shift; + my $ctx = $self->ctx(); + return tmt->subtest(@_); +} sub child { my( $self, $name ) = @_; - if( $self->{Child_Name} ) { - $self->croak("You already have a child named ($self->{Child_Name}) running"); - } - - my $parent_in_todo = $self->in_todo; + my $ctx = $self->ctx; - # Clear $TODO for the child. - my $orig_TODO = $self->find_TODO(undef, 1, undef); + if ($self->{child}) { + my $cname = $self->{child}->{Name}; + $ctx->throw("You already have a child named ($cname) running"); + } - my $class = ref $self; - my $child = $class->create; + $name ||= "Child of " . $self->{Name}; + $ctx->child('push', $name, 1); - # Add to our indentation - $child->_indent( $self->_indent . ' ' ); + my $stream = $self->{stream} || Test::Stream->shared; - # Make the child use the same outputs as the parent - for my $method (qw(output failure_output todo_output)) { - $child->$method( $self->$method ); - } + my $child = bless { + %$self, + '?' => $?, + parent => $self, + }; - # Ensure the child understands if they're inside a TODO - if( $parent_in_todo ) { - $child->failure_output( $self->todo_output ); - } + $? = 0; + $child->{Name} = $name; + $self->{child} = $child; + Scalar::Util::weaken($self->{child}); - # 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; } - -=item B<subtest> - - $builder->subtest($name, \&subtests, @args); - -See documentation of C<subtest> in Test::More. - -C<subtest> also, and optionally, accepts arguments which will be passed to the -subtests reference. - -=cut - -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"); - } + return unless $self->{parent}; - # 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; - - # 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; - }; - - if( !eval { $run_the_subtests->() } ) { - $error = $@; - } - } + my $ctx = $self->ctx; - # Restore the parent and the copied child. - _copy($self, $child); - _copy($parent, $self); + if ($self->{child}) { + my $cname = $self->{child}->{Name}; + $ctx->throw("Can't call finalize() with child ($cname) active"); + } - # Restore the parent's $TODO - $self->find_TODO(undef, 1, $child->{Parent_TODO}); + $self->_ending($ctx); + my $passing = $ctx->stream->is_passing; + my $count = $ctx->stream->count; + my $name = $self->{Name}; + $ctx = undef; - # Die *after* we restore the parent. - die $error if $error and !eval { $error->isa('Test::Builder::Exception') }; + my $stream = $self->{stream} || Test::Stream->shared; - local $Test::Builder::Level = $Test::Builder::Level + 1; - my $finalize = $child->finalize; + my $parent = $self->parent; + $self->{parent}->{child} = undef; + $self->{parent} = undef; - $self->BAIL_OUT($child->{Bailed_Out_Reason}) if $child->{Bailed_Out}; + $? = $self->{'?'}; - return $finalize; + $ctx = $parent->ctx; + $ctx->child('pop', $self->{Name}); } -=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 +sub in_subtest { + my $self = shift; + my $ctx = $self->ctx; + return scalar @{$ctx->stream->subtests}; +} -=cut +sub parent { $_[0]->{parent} } +sub name { $_[0]->{Name} } -sub _plan_handled { +sub DESTROY { my $self = shift; - return $self->{Have_Plan} || $self->{No_Plan} || $self->{Skip_All}; + return unless $self->{parent}; + return if $self->{Skip_All}; + $self->{parent}->is_passing(0); + my $name = $self->{Name}; + die "Child ($name) exited without calling finalize()"; } +############################# +# }}} Children and subtests # +############################# + +##################################### +# {{{ stuff for TODO status # +##################################### -=item B<finalize> +sub find_TODO { + my ($self, $pack, $set, $new_value) = @_; + + unless ($pack) { + if (my $ctx = Test::Stream::Context->peek) { + $pack = $ctx->package; + my $old = $ctx->todo; + $ctx->set_todo($new_value) if $set; + return $old; + } - my $ok = $child->finalize; + $pack = $self->exported_to || return; + } -When your child is done running tests, you must call C<finalize> to clean up -and tell the parent your pass/fail status. + no strict 'refs'; ## no critic + no warnings 'once'; + my $old_value = ${$pack . '::TODO'}; + $set and ${$pack . '::TODO'} = $new_value; + return $old_value; +} -Calling C<finalize> on a child with open children will C<croak>. +sub todo { + my ($self, $pack) = @_; -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. + return $self->{Todo} if defined $self->{Todo}; -No attempt to call methods on a child after C<finalize> is called is -guaranteed to succeed. + my $ctx = $self->ctx; -Calling this on the root builder is a no-op. + my $todo = $self->find_TODO($pack); + return $todo if defined $todo; -=cut + return ''; +} -sub finalize { +sub in_todo { my $self = shift; - return unless $self->parent; - if( $self->{Child_Name} ) { - $self->croak("Can't call finalize() with child ($self->{Child_Name}) active"); - } + my $ctx = $self->ctx; + return 1 if $ctx->in_todo; - local $? = 0; # don't fail if $subtests happened to set $? nonzero - $self->_ending; + return (defined $self->{Todo} || $self->find_TODO) ? 1 : 0; +} - # XXX This will only be necessary for TAP envelopes (we think) - #$self->_print( $self->is_passing ? "PASS\n" : "FAIL\n" ); +sub todo_start { + my $self = shift; + my $message = @_ ? shift : ''; - 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); - } - elsif ( not @{ $self->{Test_Results} } ) { - $self->parent->ok( 0, sprintf q[No tests run for subtest "%s"], $self->name ); - } - else { - $self->parent->ok( $self->is_passing, $self->name ); - } + $self->{Start_Todo}++; + if ($self->in_todo) { + push @{$self->{Todo_Stack}} => $self->todo; } - $? = $self->{Child_Error}; - delete $self->{Parent}; + $self->{Todo} = $message; - return $self->is_passing; + return; } -sub _indent { +sub todo_end { my $self = shift; - if( @_ ) { - $self->{Indent} = shift; + if (!$self->{Start_Todo}) { + $self->ctx(-1)->throw('todo_end() called without todo_start()'); } - return $self->{Indent}; -} - -=item B<parent> - - if ( my $parent = $builder->parent ) { - ... - } + $self->{Start_Todo}--; -Returns the parent C<Test::Builder> instance, if any. Only used with child -builders for nested TAP. + if ($self->{Start_Todo} && @{$self->{Todo_Stack}}) { + $self->{Todo} = pop @{$self->{Todo_Stack}}; + } + else { + delete $self->{Todo}; + } -=cut + return; +} -sub parent { shift->{Parent} } +##################################### +# }}} Finding Testers and Providers # +##################################### -=item B<name> +################ +# {{{ Planning # +################ - diag $builder->name; +my %PLAN_CMDS = ( + no_plan => 'no_plan', + skip_all => 'skip_all', + tests => '_plan_tests', +); -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". +sub plan { + my ($self, $cmd, @args) = @_; -=cut + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(plan => $ctx); -sub name { shift->{Name} } + return unless $cmd; -sub DESTROY { - 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); + if (my $method = $PLAN_CMDS{$cmd}) { + $self->$method(@args); + } + else { + my @in = grep { defined } ($cmd, @args); + $self->ctx->throw("plan() doesn't understand @in"); } -} -=item B<reset> + return 1; +} - $Test->reset; +sub skip_all { + my ($self, $reason) = @_; -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. + $self->{Skip_All} = 1; -=cut + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); -our $Level; + $ctx->_plan(0, 'SKIP', $reason); +} -sub reset { ## no critic (Subroutines::ProhibitBuiltinHomonyms) - my($self) = @_; +sub no_plan { + my ($self, @args) = @_; - # 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; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); - $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; + $ctx->alert("no_plan takes no arguments") if @args; + $ctx->_plan(0, 'NO PLAN'); - $self->{Original_Pid} = $$; - $self->{Child_Name} = undef; - $self->{Indent} ||= ''; + return 1; +} - $self->{Curr_Test} = 0; - $self->{Test_Results} = &share( [] ); +sub _plan_tests { + my ($self, $arg) = @_; - $self->{Exported_To} = undef; - $self->{Expected_Tests} = 0; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); - $self->{Skip_All} = 0; + if ($arg) { + $ctx->throw("Number of tests must be a positive integer. You gave it '$arg'") + unless $arg =~ /^\+?\d+$/; - $self->{Use_Nums} = 1; + $ctx->_plan($arg); + } + elsif (!defined $arg) { + $ctx->throw("Got an undefined number of tests"); + } + else { + $ctx->throw("You said to run 0 tests"); + } - $self->{No_Header} = 0; - $self->{No_Ending} = 0; + return; +} - $self->{Todo} = undef; - $self->{Todo_Stack} = []; - $self->{Start_Todo} = 0; - $self->{Opened_Testhandles} = 0; +sub done_testing { + my ($self, $num_tests) = @_; - $self->_share_keys; - $self->_dup_stdhandles; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(done_testing => $ctx); - return; + my $out = $ctx->stream->done_testing($ctx, $num_tests); + return $out; } +################ +# }}} Planning # +################ + +############################# +# {{{ Base Event Producers # +############################# -# 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 { +sub ok { my $self = shift; + my($test, $name) = @_; - share( $self->{Curr_Test} ); + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(ok => $ctx); - return; + if ($self->{child}) { + $self->is_passing(0); + $ctx->throw("Cannot run test ($name) with active children"); + } + + $ctx->_unwind_ok($test, $name); + return $test ? 1 : 0; } +sub BAIL_OUT { + my( $self, $reason ) = @_; + $self->ctx()->bail($reason); +} -=back +sub skip { + my( $self, $why ) = @_; + $why ||= ''; + unoverload_str( \$why ); -=head2 Setting up tests + my $ctx = $self->ctx(); + $ctx->set_skip($why); + $ctx->ok(1, ''); + $ctx->set_skip(undef); +} -These methods are for setting up tests and declaring how many there -are. You usually only want to call one of these methods. +sub todo_skip { + my( $self, $why ) = @_; + $why ||= ''; + unoverload_str( \$why ); -=over 4 + my $ctx = $self->ctx(); + $ctx->set_skip($why); + $ctx->set_todo($why); + $ctx->ok(0, ''); + $ctx->set_skip(undef); + $ctx->set_todo(undef); +} -=item B<plan> +sub diag { + my $self = shift; + my $msg = join '', map { defined($_) ? $_ : 'undef' } @_; - $Test->plan('no_plan'); - $Test->plan( skip_all => $reason ); - $Test->plan( tests => $num_tests ); + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(diag => $ctx); -A convenient way to set up your tests. Call this and Test::Builder -will print the appropriate headers and take the appropriate actions. + $ctx->_diag($msg); + return; +} -If you call C<plan()>, don't call any of the other methods below. +sub note { + my $self = shift; + my $msg = join '', map { defined($_) ? $_ : 'undef' } @_; -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 $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(note => $ctx); - 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 + $ctx->_note($msg); +} -=cut +############################# +# }}} Base Event Producers # +############################# -my %plan_cmds = ( - no_plan => \&no_plan, - skip_all => \&skip_all, - tests => \&_plan_tests, -); +####################### +# {{{ Public helpers # +####################### -sub plan { - my( $self, $cmd, $arg ) = @_; +sub explain { + my $self = shift; - return unless $cmd; + return map { + ref $_ + ? do { + protect { require Data::Dumper }; + my $dumper = Data::Dumper->new( [$_] ); + $dumper->Indent(1)->Terse(1); + $dumper->Sortkeys(1) if $dumper->can("Sortkeys"); + $dumper->Dump; + } + : $_ + } @_; +} - local $Level = $Level + 1; +sub carp { + my $self = shift; + $self->ctx->alert(join '' => @_); +} - $self->croak("You tried to plan twice") if $self->{Have_Plan}; +sub croak { + my $self = shift; + $self->ctx->throw(join '' => @_); +} - if( my $method = $plan_cmds{$cmd} ) { - local $Level = $Level + 1; - $self->$method($arg); - } - else { - my @args = grep { defined } ( $cmd, $arg ); - $self->croak("plan() doesn't understand @args"); - } +sub has_plan { + my $self = shift; - return 1; + my $plan = $self->ctx->stream->plan || return undef; + return 'no_plan' if $plan->directive && $plan->directive eq 'NO PLAN'; + return $plan->max; } +sub reset { + my $self = shift; + my %params = @_; -sub _plan_tests { - my($self, $arg) = @_; + $self->{use_shared} = 1 if $params{shared_stream}; - if($arg) { - local $Level = $Level + 1; - return $self->expected_tests($arg); - } - elsif( !defined $arg ) { - $self->croak("Got an undefined number of tests"); + if ($self->{use_shared}) { + Test::Stream->shared->_reset; + Test::Stream->shared->state->[-1]->[STATE_LEGACY] = []; } else { - $self->croak("You said to run 0 tests"); + $self->{stream} = Test::Stream->new(); + $self->{stream}->set_use_legacy(1); + $self->{stream}->state->[-1]->[STATE_LEGACY] = []; } - return; -} - -=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. + # 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; -=cut + $self->{Name} = $0; -sub expected_tests { - my $self = shift; - my($max) = @_; + $self->{Original_Pid} = $$; + $self->{Child_Name} = undef; - if(@_) { - $self->croak("Number of tests must be a positive integer. You gave it '$max'") - unless $max =~ /^\+?\d+$/; + $self->{Exported_To} = undef; - $self->{Expected_Tests} = $max; - $self->{Have_Plan} = 1; + $self->{Todo} = undef; + $self->{Todo_Stack} = []; + $self->{Start_Todo} = 0; + $self->{Opened_Testhandles} = 0; - $self->_output_plan($max) unless $self->no_header; - } - return $self->{Expected_Tests}; + return; } -=item B<no_plan> +####################### +# }}} Public helpers # +####################### - $Test->no_plan; +################################# +# {{{ Advanced Event Producers # +################################# -Declares that this test will run an indeterminate number of tests. +sub cmp_ok { + my( $self, $got, $type, $expect, $name ) = @_; + my $ctx = $self->ctx; + my ($ok, @diag) = tmt->cmp_check($got, $type, $expect); + $ctx->ok($ok, $name, \@diag); + return $ok; +} -=cut +sub is_eq { + my( $self, $got, $expect, $name ) = @_; + my $ctx = $self->ctx; + my ($ok, @diag) = tmt->is_eq($got, $expect); + $ctx->ok($ok, $name, \@diag); + return $ok; +} -sub no_plan { - my($self, $arg) = @_; +sub is_num { + my( $self, $got, $expect, $name ) = @_; + my $ctx = $self->ctx; + my ($ok, @diag) = tmt->is_num($got, $expect); + $ctx->ok($ok, $name, \@diag); + return $ok; +} - $self->carp("no_plan takes no arguments") if $arg; +sub isnt_eq { + my( $self, $got, $dont_expect, $name ) = @_; + my $ctx = $self->ctx; + my ($ok, @diag) = tmt->isnt_eq($got, $dont_expect); + $ctx->ok($ok, $name, \@diag); + return $ok; +} - $self->{No_Plan} = 1; - $self->{Have_Plan} = 1; +sub isnt_num { + my( $self, $got, $dont_expect, $name ) = @_; + my $ctx = $self->ctx; + my ($ok, @diag) = tmt->isnt_num($got, $dont_expect); + $ctx->ok($ok, $name, \@diag); + return $ok; +} - return 1; +sub like { + my( $self, $thing, $regex, $name ) = @_; + my $ctx = $self->ctx; + my ($ok, @diag) = tmt->regex_check($thing, $regex, '=~'); + $ctx->ok($ok, $name, \@diag); + return $ok; } -=begin private +sub unlike { + my( $self, $thing, $regex, $name ) = @_; + my $ctx = $self->ctx; + my ($ok, @diag) = tmt->regex_check($thing, $regex, '!~'); + $ctx->ok($ok, $name, \@diag); + return $ok; +} -=item B<_output_plan> +################################# +# }}} Advanced Event Producers # +################################# - $tb->_output_plan($max); - $tb->_output_plan($max, $directive); - $tb->_output_plan($max, $directive => $reason); +################################################ +# {{{ Misc # +################################################ -Handles displaying the test plan. - -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: - - $tb->_output_plan(0, "SKIP", "Because I said so"); - -It sets C<< $tb->{Have_Output_Plan} >> and will croak if the plan was already -output. - -=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( defined $num_tests ) { - $self->{No_Plan} = 0; - } - 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}; - - # No tests were run - $self->is_passing(0) if $self->{Curr_Test} == 0; - - return 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 { +sub _new_fh { my $self = shift; + my($file_or_fh) = shift; - return( $self->{Expected_Tests} ) if $self->{Expected_Tests}; - return('no_plan') if $self->{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; - - $self->_output_plan(0, "SKIP", $reason) unless $self->no_header; - if ( $self->parent ) { - die bless {} => 'Test::Builder::Exception'; - } - exit(0); -} - -=item B<exported_to> - - my $pack = $Test->exported_to; - $Test->exported_to($pack); - -Tells Test::Builder what package you exported your functions to. - -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. - -=cut - -sub exported_to { - my( $self, $pack ) = @_; - - if( defined $pack ) { - $self->{Exported_To} = $pack; - } - 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"); - } - # $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 ); - - $self->diag(<<"ERR") if defined $name and $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} = ''; - } + return $file_or_fh if $self->is_fh($file_or_fh); - if( $self->in_todo ) { - $out .= " # TODO $todo"; - $result->{reason} = $todo; - $result->{type} = 'todo'; + my $fh; + if( ref $file_or_fh eq 'SCALAR' ) { + open $fh, ">>", $file_or_fh + or croak("Can't open scalar ref $file_or_fh: $!"); } else { - $result->{reason} = ''; - $result->{type} = ''; - } - - $self->{Test_Results}[ $self->{Curr_Test} - 1 ] = $result; - $out .= "\n"; - - $self->_print($out); - - unless($test) { - my $msg = $self->in_todo ? "Failed (TODO)" : "Failed"; - $self->_print_to_fh( $self->_diag_fh, "\n" ) if $ENV{HARNESS_ACTIVE}; - - 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]); - } + open $fh, ">", $file_or_fh + or croak("Can't open test output log $file_or_fh: $!"); + Test::Stream::IOSets->_autoflush($fh); } - $self->is_passing(0) unless $test || $self->in_todo; - - # Check that we haven't violated the plan - $self->_check_is_passing_plan(); - - return $test ? 1 : 0; + return $fh; } - -# Check that we haven't yet violated the plan and set -# is_passing() accordingly -sub _check_is_passing_plan { +sub output { my $self = shift; - - 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 $handles = $self->ctx->stream->io_sets->init_encoding('legacy'); + $handles->[0] = $self->_new_fh(@_) if @_; + return $handles->[0]; } - -sub _unoverload { +sub failure_output { my $self = shift; - my $type = shift; - - $self->_try(sub { require overload; }, die_on_fail => 1); - - foreach my $thing (@_) { - if( $self->_is_object($$thing) ) { - if( my $string_meth = overload::Method( $$thing, $type ) ) { - $$thing = $$thing->$string_meth(); - } - } - } - - return; + my $handles = $self->ctx->stream->io_sets->init_encoding('legacy'); + $handles->[1] = $self->_new_fh(@_) if @_; + return $handles->[1]; } -sub _is_object { - my( $self, $thing ) = @_; - - return $self->_try( sub { ref $thing && $thing->isa('UNIVERSAL') } ) ? 1 : 0; -} - -sub _unoverload_str { +sub todo_output { my $self = shift; - - return $self->_unoverload( q[""], @_ ); + my $handles = $self->ctx->stream->io_sets->init_encoding('legacy'); + $handles->[2] = $self->_new_fh(@_) if @_; + return $handles->[2] || $handles->[0]; } -sub _unoverload_num { +sub reset_outputs { my $self = shift; - - $self->_unoverload( '0+', @_ ); - - for my $val (@_) { - next unless $self->_is_dualvar($$val); - $$val = $$val + 0; - } - - return; -} - -# This is a hack to detect a dualvar such as $! -sub _is_dualvar { - my( $self, $val ) = @_; - - # Objects are not dualvars. - return 0 if ref $val; - - no warnings 'numeric'; - my $numval = $val + 0; - 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 ) = @_; - local $Level = $Level + 1; - - if( !defined $got || !defined $expect ) { - # undef only matches undef and nothing else - my $test = !defined $got && !defined $expect; - - $self->ok( $test, $name ); - $self->_is_diag( $got, 'eq', $expect ) unless $test; - return $test; - } - - return $self->cmp_ok( $got, 'eq', $expect, $name ); -} - -sub is_num { - my( $self, $got, $expect, $name ) = @_; - local $Level = $Level + 1; - - if( !defined $got || !defined $expect ) { - # undef only matches undef and nothing else - my $test = !defined $got && !defined $expect; - - $self->ok( $test, $name ); - $self->_is_diag( $got, '==', $expect ) unless $test; - return $test; - } - - return $self->cmp_ok( $got, '==', $expect, $name ); + my $ctx = $self->ctx; + $ctx->stream->io_sets->reset_legacy; } -sub _diag_fmt { - my( $self, $type, $val ) = @_; - - if( defined $$val ) { - if( $type eq 'eq' or $type eq 'ne' ) { - # quote and force string context - $$val = "'$$val'"; - } - else { - # force numeric context - $self->_unoverload_num($val); - } - } - else { - $$val = 'undef'; - } - - return; +sub use_numbers { + my $self = shift; + my $ctx = $self->ctx; + $ctx->stream->set_use_numbers(@_) if @_; + $ctx->stream->use_numbers; } -sub _is_diag { - my( $self, $got, $type, $expect ) = @_; - - $self->_diag_fmt( $type, $_ ) for \$got, \$expect; - - local $Level = $Level + 1; - return $self->diag(<<"DIAGNOSTIC"); - got: $got - expected: $expect -DIAGNOSTIC - +sub no_ending { + my $self = shift; + my $ctx = $self->ctx; + $ctx->stream->set_no_ending(@_) if @_; + $ctx->stream->no_ending || 0; } -sub _isnt_diag { - my( $self, $got, $type ) = @_; - - $self->_diag_fmt( $type, \$got ); - - local $Level = $Level + 1; - return $self->diag(<<"DIAGNOSTIC"); - got: $got - expected: anything else -DIAGNOSTIC +sub no_header { + my $self = shift; + my $ctx = $self->ctx; + $ctx->stream->set_no_header(@_) if @_; + $ctx->stream->no_header || 0; } -=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 ) = @_; - local $Level = $Level + 1; - - if( !defined $got || !defined $dont_expect ) { - # undef only matches undef and nothing else - my $test = defined $got || defined $dont_expect; - - $self->ok( $test, $name ); - $self->_isnt_diag( $got, 'ne' ) unless $test; - return $test; - } - - return $self->cmp_ok( $got, 'ne', $dont_expect, $name ); **** PATCH TRUNCATED AT 2000 LINES -- 23438 NOT SHOWN **** -- Perl5 Master Repository
