In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/07308ed1589cc2f7837b5d3a1303d200a49b9338?hp=b17645516d4569fdfc26a2ed61c6e8704ced92cf>
- Log ----------------------------------------------------------------- commit 07308ed1589cc2f7837b5d3a1303d200a49b9338 Author: Chad Granum <[email protected]> Date: Thu Oct 23 12:03:23 2014 -0700 Import Test-More 1.301001 alpha 63 ----------------------------------------------------------------------- Summary of changes: MANIFEST | 376 ++- Makefile.SH | 35 +- cpan/Test-Simple/lib/Test/Builder.pm | 3026 ++++++-------------- cpan/Test-Simple/lib/Test/Builder/Module.pm | 128 +- cpan/Test-Simple/lib/Test/Builder/Tester.pm | 237 +- cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm | 105 +- cpan/Test-Simple/lib/Test/FAQ.pod | 477 +++ cpan/Test-Simple/lib/Test/More.pm | 1607 +++++------ 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 | 1083 +++++++ cpan/Test-Simple/lib/Test/Stream/Architecture.pod | 444 +++ cpan/Test-Simple/lib/Test/Stream/ArrayBase.pm | 374 +++ cpan/Test-Simple/lib/Test/Stream/ArrayBase/Meta.pm | 257 ++ cpan/Test-Simple/lib/Test/Stream/Carp.pm | 142 + cpan/Test-Simple/lib/Test/Stream/Context.pm | 635 ++++ 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 | 275 ++ cpan/Test-Simple/lib/Test/Stream/ExitMagic.pm | 259 ++ .../lib/Test/Stream/ExitMagic/Context.pm | 131 + cpan/Test-Simple/lib/Test/Stream/Exporter.pm | 315 ++ cpan/Test-Simple/lib/Test/Stream/Exporter/Meta.pm | 183 ++ 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 | 188 ++ 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 | 769 +++++ 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 | 150 + cpan/Test-Simple/lib/ok.pm | 142 + cpan/Test-Simple/t/00test_harness_check.t | 26 - 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/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 | 9 +- 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 | 57 + 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 | 5 +- 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 | 6 +- cpan/Test-Simple/t/Legacy/fork_in_subtest.t | 40 + 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 | 15 +- 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 | 0 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 | 12 +- .../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 | 87 + 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 - cpan/Test-Simple/t/{ => xt}/dependents.t | 15 +- ext/DynaLoader/t/DynaLoader.t | 27 +- ext/XS-APItest/t/svpeek.t | 2 +- lib/.gitignore | 1 + 221 files changed, 18345 insertions(+), 3677 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/00test_harness_check.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/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 (69%) 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%) copy 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 (94%) 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 (83%) 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 (88%) 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 (100%) 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 (82%) 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 rename cpan/Test-Simple/t/{ => xt}/dependents.t (66%) diff --git a/MANIFEST b/MANIFEST index 50c9460..ce5f1a4 100644 --- a/MANIFEST +++ b/MANIFEST @@ -2246,146 +2246,242 @@ 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/Test/Builder/Module.pm Base class for test modules -cpan/Test-Simple/lib/Test/Builder.pm For writing new test libraries -cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm Turn on color in Test::Builder::Tester -cpan/Test-Simple/lib/Test/Builder/Tester.pm For testing Test::Builder based classes -cpan/Test-Simple/lib/Test/More.pm More utilities for writing tests -cpan/Test-Simple/lib/Test/Simple.pm Basic utility for writing tests -cpan/Test-Simple/lib/Test/Tutorial.pod A tutorial on writing tests -cpan/Test-Simple/t/00test_harness_check.t Test::Simple test -cpan/Test-Simple/t/bad_plan.t Test::Builder plan() test -cpan/Test-Simple/t/bail_out.t Test::Builder BAIL_OUT test -cpan/Test-Simple/t/BEGIN_require_ok.t Test::More require_ok() testing -cpan/Test-Simple/t/BEGIN_use_ok.t Test::More use_ok() testing -cpan/Test-Simple/t/buffer.t Test::Builder buffering test -cpan/Test-Simple/t/Builder/Builder.t Test::Builder tests -cpan/Test-Simple/t/Builder/carp.t Test::Builder test -cpan/Test-Simple/t/Builder/create.t Test::Builder test -cpan/Test-Simple/t/Builder/current_test.t Test::Builder tests -cpan/Test-Simple/t/Builder/current_test_without_plan.t Test::Builder tests -cpan/Test-Simple/t/Builder/details.t Test::Builder tests -cpan/Test-Simple/t/Builder/done_testing_double.t Test::Builder tests -cpan/Test-Simple/t/Builder/done_testing_plan_mismatch.t Test::Builder tests -cpan/Test-Simple/t/Builder/done_testing.t Test::Builder tests -cpan/Test-Simple/t/Builder/done_testing_with_no_plan.t Test::Builder tests -cpan/Test-Simple/t/Builder/done_testing_with_number.t Test::Builder tests -cpan/Test-Simple/t/Builder/done_testing_with_plan.t Test::Builder tests -cpan/Test-Simple/t/Builder/fork_with_new_stdout.t Test::Builder tests -cpan/Test-Simple/t/Builder/has_plan2.t Test::Builder tests -cpan/Test-Simple/t/Builder/has_plan.t Test::Builder tests -cpan/Test-Simple/t/Builder/is_fh.t Test::Builder tests -cpan/Test-Simple/t/Builder/is_passing.t Test::Builder tests -cpan/Test-Simple/t/Builder/maybe_regex.t Test::Builder tests -cpan/Test-Simple/t/Builder/no_diag.t Test::Builder tests -cpan/Test-Simple/t/Builder/no_ending.t Test::Builder tests -cpan/Test-Simple/t/Builder/no_header.t Test::Builder tests -cpan/Test-Simple/t/Builder/no_plan_at_all.t Test::Builder tests -cpan/Test-Simple/t/Builder/ok_obj.t Test::Builder tests -cpan/Test-Simple/t/Builder/output.t Test::Builder tests -cpan/Test-Simple/t/Builder/reset.t Test::Builder tests -cpan/Test-Simple/t/Builder/try.t Test::Builder tests -cpan/Test-Simple/t/c_flag.t Test::Simple test -cpan/Test-Simple/t/circular_data.t Test::Simple test -cpan/Test-Simple/t/cmp_ok.t Test::More test -cpan/Test-Simple/t/dependents.t Test::More test -cpan/Test-Simple/t/diag.t Test::More diag() test -cpan/Test-Simple/t/died.t Test::Simple test -cpan/Test-Simple/t/dont_overwrite_die_handler.t Test::More tests -cpan/Test-Simple/t/eq_set.t Test::Simple test -cpan/Test-Simple/t/exit.t Test::Simple test, exit codes -cpan/Test-Simple/t/explain.t Test::Simple test -cpan/Test-Simple/t/extra_one.t Test::Simple test -cpan/Test-Simple/t/extra.t Test::Simple test -cpan/Test-Simple/t/fail-like.t Test::More test, like() failures -cpan/Test-Simple/t/fail-more.t Test::More test, tests failing -cpan/Test-Simple/t/fail_one.t Test::Simple test -cpan/Test-Simple/t/fail.t Test::Simple test, test failures -cpan/Test-Simple/t/filehandles.t Test::Simple test, STDOUT can be played with -cpan/Test-Simple/t/fork.t Test::More fork tests -cpan/Test-Simple/t/harness_active.t Test::Simple test -cpan/Test-Simple/t/import.t Test::More test, importing functions -cpan/Test-Simple/t/is_deeply_dne_bug.t Test::More test -cpan/Test-Simple/t/is_deeply_fail.t Test::More test, is_deeply() -cpan/Test-Simple/t/is_deeply_with_threads.t Test::More test -cpan/Test-Simple/t/lib/Dev/Null.pm Test::More test module -cpan/Test-Simple/t/lib/Dummy.pm Test::More test module -cpan/Test-Simple/t/lib/MyOverload.pm Test::More test module -cpan/Test-Simple/t/lib/NoExporter.pm Test::Simple test module -cpan/Test-Simple/t/lib/SigDie.pm Test module for Test::More -cpan/Test-Simple/t/lib/Test/Builder/NoOutput.pm Utility module for testing Test::Builder -cpan/Test-Simple/t/lib/Test/Simple/Catch.pm Utility module for testing Test::Simple -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_in_eval.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_with_handler.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/exit.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/extras.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/five_fail.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/last_minute_death.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/missing_done_testing.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/one_fail.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/one_fail_without_plan.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/pre_plan_death.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/require.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/success.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few_fail.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few.plx for exit.t -cpan/Test-Simple/t/lib/Test/Simple/sample_tests/two_fail.plx for exit.t -cpan/Test-Simple/t/lib/TieOut.pm Testing library to capture prints -cpan/Test-Simple/t/missing.t Test::Simple test, missing tests -cpan/Test-Simple/t/More.t Test::More test, basic stuff -cpan/Test-Simple/t/new_ok.t Test::More test -cpan/Test-Simple/t/no_plan.t Test::Simple test, forgot the plan -cpan/Test-Simple/t/no_tests.t Test::More test -cpan/Test-Simple/t/note.t Test::More test -cpan/Test-Simple/t/overload.t Test::Simple test -cpan/Test-Simple/t/overload_threads.t Test::Simple test -cpan/Test-Simple/t/plan_bad.t Test::Simple test -cpan/Test-Simple/t/plan_is_noplan.t Test::Simple test, no_plan -cpan/Test-Simple/t/plan_no_plan.t Test::More test, plan() w/no_plan -cpan/Test-Simple/t/plan_shouldnt_import.t Test::Simple test -cpan/Test-Simple/t/plan_skip_all.t Test::More test, plan() w/skip_all -cpan/Test-Simple/t/plan.t Test::More test, plan() -cpan/Test-Simple/t/require_ok.t Test::Simple test -cpan/Test-Simple/t/Simple/load.t Test::Builder tests -cpan/Test-Simple/t/simple.t Test::Simple test, basic stuff -cpan/Test-Simple/t/skipall.t Test::More test, skip all tests -cpan/Test-Simple/t/skip.t Test::More test, SKIP tests -cpan/Test-Simple/t/subtest/args.t Test::More test -cpan/Test-Simple/t/subtest/bail_out.t Test::More test -cpan/Test-Simple/t/subtest/basic.t Test::More test -cpan/Test-Simple/t/subtest/die.t Test::More test -cpan/Test-Simple/t/subtest/do.t Test::More test -cpan/Test-Simple/t/subtest/exceptions.t Test::More test -cpan/Test-Simple/t/subtest/for_do_t.test Test::More test -cpan/Test-Simple/t/subtest/fork.t Test::Builder tests -cpan/Test-Simple/t/subtest/implicit_done.t Test::Builder tests -cpan/Test-Simple/t/subtest/line_numbers.t Test::Builder tests -cpan/Test-Simple/t/subtest/plan.t Test::Builder tests -cpan/Test-Simple/t/subtest/predicate.t Test::Builder tests -cpan/Test-Simple/t/subtest/singleton.t Test::More test -cpan/Test-Simple/t/subtest/threads.t Test::More test -cpan/Test-Simple/t/subtest/todo.t Test::Builder tests -cpan/Test-Simple/t/subtest/wstat.t Test::More test -cpan/Test-Simple/t/tbm_doesnt_set_exported_to.t Test::Builder::Module test -cpan/Test-Simple/t/Tester/tbt_01basic.t Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_02fhrestore.t Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_03die.t Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_04line_num.t Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_05faildiag.t Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_06errormess.t Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_07args.t Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_08subtest.t Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_09do_script.pl Test::Builder::Tester test -cpan/Test-Simple/t/Tester/tbt_09do.t Test::Builder::Tester test -cpan/Test-Simple/t/threads.t Test::Builder thread-safe checks -cpan/Test-Simple/t/thread_taint.t Test::Simple test -cpan/Test-Simple/t/todo.t Test::More test, TODO tests -cpan/Test-Simple/t/undef.t Test::More test, undefs don't cause warnings -cpan/Test-Simple/t/useing.t Test::More test, compile test -cpan/Test-Simple/t/use_ok.t Test::More test, use_ok() -cpan/Test-Simple/t/utf8.t Test::More test -cpan/Test-Simple/t/versions.t Test::More test +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/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/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/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 +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_with_handler.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/exit.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/extras.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/five_fail.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/last_minute_death.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/missing_done_testing.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/one_fail.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/one_fail_without_plan.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/pre_plan_death.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/require.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/success.plx Test::Simple Test +cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few_fail.plx Test::Simple Test +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/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 cpan/Test/t/mix.t See if Test works diff --git a/Makefile.SH b/Makefile.SH index db66aeb..3c3efec 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -1297,21 +1297,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/cpan/Test-Simple/lib/Test/Builder.pm b/cpan/Test-Simple/lib/Test/Builder.pm index 97c7a9e..c307e85 100644 --- a/cpan/Test-Simple/lib/Test/Builder.pm +++ b/cpan/Test-Simple/lib/Test/Builder.pm @@ -1,1782 +1,476 @@ package Test::Builder; -use 5.006; +use 5.008001; use strict; use warnings; -our $VERSION = '1.001008'; +our $VERSION = '1.301001_063'; $VERSION = eval $VERSION; ## no critic (BuiltinFunctions::ProhibitStringyEval) -BEGIN { - if( $] < 5.008 ) { - require Test::Builder::IO::Scalar; - } -} +use Test::More::Tools; + +use Test::Stream 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::Util qw/try protect unoverload_str is_regex/; +use Scalar::Util qw/blessed reftype/; -# Make Test::Builder thread-safe for ithreads. BEGIN { - use Config; - # Load threads::shared when threads are turned on. - # 5.8.0's threads are so busted we no longer support them. - if( $] >= 5.008001 && $Config{useithreads} && $INC{'threads.pm'} ) { - require threads::shared; - - # Hack around YET ANOTHER threads::shared bug. It would - # occasionally forget the contents of the variable when sharing it. - # So we first copy the data, then share, then put our copy back. - *share = sub (\[$@%]) { - my $type = ref $_[0]; - my $data; - - if( $type eq 'HASH' ) { - %$data = %{ $_[0] }; - } - elsif( $type eq 'ARRAY' ) { - @$data = @{ $_[0] }; - } - elsif( $type eq 'SCALAR' ) { - $$data = ${ $_[0] }; - } - else { - die( "Unknown type: " . $type ); - } - - $_[0] = &threads::shared::share( $_[0] ); - - if( $type eq 'HASH' ) { - %{ $_[0] } = %$data; - } - elsif( $type eq 'ARRAY' ) { - @{ $_[0] } = @$data; - } - elsif( $type eq 'SCALAR' ) { - ${ $_[0] } = $$data; - } - else { - die( "Unknown type: " . $type ); - } - - 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 }; - } + Test::Stream->shared->set_use_legacy(1); } -=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; - -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>. +############################# +# {{{ Children and subtests # +############################# -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 - -=cut - -sub _plan_handled { +sub in_subtest { my $self = shift; - return $self->{Have_Plan} || $self->{No_Plan} || $self->{Skip_All}; + my $ctx = $self->ctx; + return scalar @{$ctx->stream->subtests}; } +sub parent { $_[0]->{parent} } +sub name { $_[0]->{Name} } -=item B<finalize> - - my $ok = $child->finalize; - -When your child is done running tests, you must call C<finalize> to clean up -and tell the parent your pass/fail status. - -Calling C<finalize> on a child with open children will C<croak>. - -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. - -No attempt to call methods on a child after C<finalize> is called is -guaranteed to succeed. - -Calling this on the root builder is a no-op. - -=cut - -sub finalize { +sub DESTROY { my $self = shift; + 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()"; +} - return unless $self->parent; - if( $self->{Child_Name} ) { - $self->croak("Can't call finalize() with child ($self->{Child_Name}) active"); - } - - local $? = 0; # don't fail if $subtests happened to set $? nonzero - $self->_ending; +############################# +# }}} Children and subtests # +############################# - # XXX This will only be necessary for TAP envelopes (we think) - #$self->_print( $self->is_passing ? "PASS\n" : "FAIL\n" ); +##################################### +# {{{ stuff for TODO status # +##################################### - 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 ); +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; } - } - $? = $self->{Child_Error}; - delete $self->{Parent}; - - return $self->is_passing; -} - -sub _indent { - my $self = shift; - if( @_ ) { - $self->{Indent} = shift; + $pack = $self->exported_to || return; } - return $self->{Indent}; + no strict 'refs'; ## no critic + no warnings 'once'; + my $old_value = ${$pack . '::TODO'}; + $set and ${$pack . '::TODO'} = $new_value; + return $old_value; } -=item B<parent> - - if ( my $parent = $builder->parent ) { - ... - } - -Returns the parent C<Test::Builder> instance, if any. Only used with child -builders for nested TAP. - -=cut - -sub parent { shift->{Parent} } - -=item B<name> - - diag $builder->name; +sub todo { + my ($self, $pack) = @_; -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". + return $self->{Todo} if defined $self->{Todo}; -=cut + my $ctx = $self->ctx; -sub name { shift->{Name} } + my $todo = $self->find_TODO($pack); + return $todo if defined $todo; -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); - } + return ''; } -=item B<reset> - - $Test->reset; - -Reinitializes the Test::Builder singleton to its original state. -Mostly useful for tests run in persistent environments where the same -test might be run multiple times in the same process. - -=cut - -our $Level; - -sub reset { ## no critic (Subroutines::ProhibitBuiltinHomonyms) - my($self) = @_; - - # We leave this a global because it has to be localized and localizing - # hash keys is just asking for pain. Also, it was documented. - $Level = 1; - - $self->{Name} = $0; - $self->is_passing(1); - $self->{Ending} = 0; - $self->{Have_Plan} = 0; - $self->{No_Plan} = 0; - $self->{Have_Output_Plan} = 0; - $self->{Done_Testing} = 0; - - $self->{Original_Pid} = $$; - $self->{Child_Name} = undef; - $self->{Indent} ||= ''; - - $self->{Curr_Test} = 0; - $self->{Test_Results} = &share( [] ); - - $self->{Exported_To} = undef; - $self->{Expected_Tests} = 0; - - $self->{Skip_All} = 0; - - $self->{Use_Nums} = 1; - - $self->{No_Header} = 0; - $self->{No_Ending} = 0; - - $self->{Todo} = undef; - $self->{Todo_Stack} = []; - $self->{Start_Todo} = 0; - $self->{Opened_Testhandles} = 0; - - $self->_share_keys; - $self->_dup_stdhandles; +sub in_todo { + my $self = shift; - return; + return (defined $self->{Todo} || $self->find_TODO) ? 1 : 0; } - -# 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 todo_start { my $self = shift; + my $message = @_ ? shift : ''; - share( $self->{Curr_Test} ); + $self->{Start_Todo}++; + if ($self->in_todo) { + push @{$self->{Todo_Stack}} => $self->todo; + } + $self->{Todo} = $message; return; } +sub todo_end { + my $self = shift; -=back - -=head2 Setting up tests - -These methods are for setting up tests and declaring how many there -are. You usually only want to call one of these methods. - -=over 4 - -=item B<plan> - - $Test->plan('no_plan'); - $Test->plan( skip_all => $reason ); - $Test->plan( tests => $num_tests ); - -A convenient way to set up your tests. Call this and Test::Builder -will print the appropriate headers and take the appropriate actions. + if (!$self->{Start_Todo}) { + $self->ctx(-1)->throw('todo_end() called without todo_start()'); + } -If you call C<plan()>, don't call any of the other methods below. + $self->{Start_Todo}--; -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. + if ($self->{Start_Todo} && @{$self->{Todo_Stack}}) { + $self->{Todo} = pop @{$self->{Todo_Stack}}; + } + else { + delete $self->{Todo}; + } - 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 +} + +##################################### +# }}} Finding Testers and Providers # +##################################### -=cut +################ +# {{{ Planning # +################ -my %plan_cmds = ( - no_plan => \&no_plan, - skip_all => \&skip_all, - tests => \&_plan_tests, +my %PLAN_CMDS = ( + no_plan => 'no_plan', + skip_all => 'skip_all', + tests => '_plan_tests', ); sub plan { - my( $self, $cmd, $arg ) = @_; - - return unless $cmd; + my ($self, $cmd, @args) = @_; - local $Level = $Level + 1; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(plan => $ctx); - $self->croak("You tried to plan twice") if $self->{Have_Plan}; + return unless $cmd; - if( my $method = $plan_cmds{$cmd} ) { - local $Level = $Level + 1; - $self->$method($arg); + if (my $method = $PLAN_CMDS{$cmd}) { + $self->$method(@args); } else { - my @args = grep { defined } ( $cmd, $arg ); - $self->croak("plan() doesn't understand @args"); + my @in = grep { defined } ($cmd, @args); + $self->ctx->throw("plan() doesn't understand @in"); } return 1; } +sub skip_all { + my ($self, $reason) = @_; -sub _plan_tests { - my($self, $arg) = @_; - - if($arg) { - local $Level = $Level + 1; - return $self->expected_tests($arg); - } - elsif( !defined $arg ) { - $self->croak("Got an undefined number of tests"); - } - else { - $self->croak("You said to run 0 tests"); - } - - 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. - -=cut - -sub expected_tests { - my $self = shift; - my($max) = @_; - - if(@_) { - $self->croak("Number of tests must be a positive integer. You gave it '$max'") - unless $max =~ /^\+?\d+$/; + $self->{Skip_All} = 1; - $self->{Expected_Tests} = $max; - $self->{Have_Plan} = 1; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); - $self->_output_plan($max) unless $self->no_header; - } - return $self->{Expected_Tests}; + $ctx->_plan(0, 'SKIP', $reason); } -=item B<no_plan> - - $Test->no_plan; - -Declares that this test will run an indeterminate number of tests. - -=cut - sub no_plan { - my($self, $arg) = @_; + my ($self, @args) = @_; - $self->carp("no_plan takes no arguments") if $arg; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); - $self->{No_Plan} = 1; - $self->{Have_Plan} = 1; + $ctx->alert("no_plan takes no arguments") if @args; + $ctx->_plan(0, 'NO PLAN'); return 1; } -=begin private - -=item B<_output_plan> - - $tb->_output_plan($max); - $tb->_output_plan($max, $directive); - $tb->_output_plan($max, $directive => $reason); - -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 _plan_tests { + my ($self, $arg) = @_; -sub done_testing { - my($self, $num_tests) = @_; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); - # 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 ($arg) { + $ctx->throw("Number of tests must be a positive integer. You gave it '$arg'") + unless $arg =~ /^\+?\d+$/; - 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; + $ctx->_plan($arg); } - - $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"); + elsif (!defined $arg) { + $ctx->throw("Got an undefined number of tests"); } else { - $self->{Expected_Tests} = $num_tests; + $ctx->throw("You said to run 0 tests"); } - $self->_output_plan($num_tests) unless $self->{Have_Output_Plan}; - - $self->{Have_Plan} = 1; + return; +} - # The wrong number of tests were run - $self->is_passing(0) if $self->{Expected_Tests} != $self->{Curr_Test}; +sub done_testing { + my ($self, $num_tests) = @_; - # No tests were run - $self->is_passing(0) if $self->{Curr_Test} == 0; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(done_testing => $ctx); - return 1; + my $out = $ctx->stream->done_testing($ctx, $num_tests); + return $out; } +################ +# }}} Planning # +################ -=item B<has_plan> +############################# +# {{{ Base Event Producers # +############################# - $plan = $Test->has_plan +sub ok { + my $self = shift; + my($test, $name) = @_; -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). + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(ok => $ctx); -=cut + if ($self->{child}) { + $self->is_passing(0); + $ctx->throw("Cannot run test ($name) with active children"); + } -sub has_plan { - my $self = shift; + $ctx->_unwind_ok($test, $name); + return $test ? 1 : 0; +} - return( $self->{Expected_Tests} ) if $self->{Expected_Tests}; - return('no_plan') if $self->{No_Plan}; - return(undef); +sub BAIL_OUT { + my( $self, $reason ) = @_; + $self->ctx()->bail($reason); } -=item B<skip_all> +sub skip { + my( $self, $why ) = @_; + $why ||= ''; + unoverload_str( \$why ); - $Test->skip_all; - $Test->skip_all($reason); + my $ctx = $self->ctx(); + $ctx->set_skip($why); + $ctx->ok(1, ''); + $ctx->set_skip(undef); +} -Skips all the tests, using the given C<$reason>. Exits immediately with 0. +sub todo_skip { + my( $self, $why ) = @_; + $why ||= ''; + unoverload_str( \$why ); -=cut + my $ctx = $self->ctx(); + $ctx->set_skip($why); + $ctx->set_todo($why); + $ctx->ok(0, ''); + $ctx->set_skip(undef); + $ctx->set_todo(undef); +} -sub skip_all { - my( $self, $reason ) = @_; +sub diag { + my $self = shift; + my $msg = join '', map { defined($_) ? $_ : 'undef' } @_; - $self->{Skip_All} = $self->parent ? $reason : 1; + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(diag => $ctx); - $self->_output_plan(0, "SKIP", $reason) unless $self->no_header; - if ( $self->parent ) { - die bless {} => 'Test::Builder::Exception'; - } - exit(0); + $ctx->_diag($msg); + return; } -=item B<exported_to> +sub note { + my $self = shift; + my $msg = join '', map { defined($_) ? $_ : 'undef' } @_; - my $pack = $Test->exported_to; - $Test->exported_to($pack); + my $ctx = $CTX || Test::Stream::Context->peek || $self->ctx(); + WARN_OF_OVERRIDE(note => $ctx); -Tells Test::Builder what package you exported your functions to. + $ctx->_note($msg); +} -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. +############################# +# }}} Base Event Producers # +############################# -=cut +####################### +# {{{ Public helpers # +####################### -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} = ''; - } - - if( $self->in_todo ) { - $out .= " # TODO $todo"; - $result->{reason} = $todo; - $result->{type} = 'todo'; - } - 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]); - } - } - - $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; -} - - -# Check that we haven't yet violated the plan and set -# is_passing() accordingly -sub _check_is_passing_plan { - 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}; -} - - -sub _unoverload { - 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; -} - -sub _is_object { - my( $self, $thing ) = @_; - - return $self->_try( sub { ref $thing && $thing->isa('UNIVERSAL') } ) ? 1 : 0; -} - -sub _unoverload_str { - my $self = shift; - - return $self->_unoverload( q[""], @_ ); -} - -sub _unoverload_num { - 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 ); -} - -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 _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 _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 -} - -=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 ); -} - -sub isnt_num { - 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, '!=' ) unless $test; - return $test; - } - - return $self->cmp_ok( $got, '!=', $dont_expect, $name ); -} - -=item B<like> - - $Test->like($thing, qr/$regex/, $name); - $Test->like($thing, '/$regex/', $name); - -Like L<Test::More>'s C<like()>. Checks if $thing matches the given C<$regex>. - -=item B<unlike> - - $Test->unlike($thing, qr/$regex/, $name); - $Test->unlike($thing, '/$regex/', $name); - -Like L<Test::More>'s C<unlike()>. Checks if $thing B<does not match> the -given C<$regex>. - -=cut - -sub like { - my( $self, $thing, $regex, $name ) = @_; - - local $Level = $Level + 1; - return $self->_regex_ok( $thing, $regex, '=~', $name ); -} - -sub unlike { - my( $self, $thing, $regex, $name ) = @_; - - local $Level = $Level + 1; - return $self->_regex_ok( $thing, $regex, '!~', $name ); -} - -=item B<cmp_ok> - - $Test->cmp_ok($thing, $type, $that, $name); - -Works just like L<Test::More>'s C<cmp_ok()>. - - $Test->cmp_ok($big_num, '!=', $other_big_num); - -=cut - -my %numeric_cmps = map { ( $_, 1 ) } ( "<", "<=", ">", ">=", "==", "!=", "<=>" ); - -# Bad, these are not comparison operators. Should we include more? -my %cmp_ok_bl = map { ( $_, 1 ) } ( "=", "+=", ".=", "x=", "^=", "|=", "||=", "&&=", "..."); - -sub cmp_ok { - my( $self, $got, $type, $expect, $name ) = @_; - - if ($cmp_ok_bl{$type}) { - $self->croak("$type is not a valid comparison operator in cmp_ok()"); - } - - my $test; - my $error; - { - ## no critic (BuiltinFunctions::ProhibitStringyEval) - - local( $@, $!, $SIG{__DIE__} ); # isolate eval - - my($pack, $file, $line) = $self->caller(); - - # This is so that warnings come out at the caller's level - $test = eval qq[ -#line $line "(eval in cmp_ok) $file" -\$got $type \$expect; -]; - $error = $@; - } - local $Level = $Level + 1; - my $ok = $self->ok( $test, $name ); - - # Treat overloaded objects as numbers if we're asked to do a - # numeric comparison. - my $unoverload - = $numeric_cmps{$type} - ? '_unoverload_num' - : '_unoverload_str'; - - $self->diag(<<"END") if $error; -An error occurred while using $type: ------------------------------------- -$error ------------------------------------- -END - - unless($ok) { - $self->$unoverload( \$got, \$expect ); - - if( $type =~ /^(eq|==)$/ ) { - $self->_is_diag( $got, $type, $expect ); - } - elsif( $type =~ /^(ne|!=)$/ ) { - $self->_isnt_diag( $got, $type ); - } - else { - $self->_cmp_diag( $got, $type, $expect ); - } - } - return $ok; -} - -sub _cmp_diag { - my( $self, $got, $type, $expect ) = @_; - - $got = defined $got ? "'$got'" : 'undef'; - $expect = defined $expect ? "'$expect'" : 'undef'; - - local $Level = $Level + 1; - return $self->diag(<<"DIAGNOSTIC"); - $got - $type - $expect -DIAGNOSTIC -} - -sub _caller_context { - my $self = shift; - - my( $pack, $file, $line ) = $self->caller(1); - - my $code = ''; - $code .= "#line $line $file\n" if defined $file and defined $line; - - return $code; -} - -=back - - -=head2 Other Testing Methods - -These are methods which are used in the course of writing a test but are not themselves tests. - -=over 4 - -=item B<BAIL_OUT> - - $Test->BAIL_OUT($reason); - -Indicates to the L<Test::Harness> that things are going so badly all -testing should terminate. This includes running any additional test -scripts. - -It will exit with 255. - -=cut - -sub BAIL_OUT { - my( $self, $reason ) = @_; **** PATCH TRUNCATED AT 2000 LINES -- 23038 NOT SHOWN **** -- Perl5 Master Repository
