The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Changes for version 0.50_07

  • Fixed bug where we erroneously checked the test number instead of number of tests run to determine if we've run more tests than we planned.
  • Add a --directives switch to 'runtests' which only shows test results with directives (such as 'TODO' or 'SKIP').
  • Removed some dead code from TAPx::Parser.
  • Added color support for Windows using Win32::Console.
  • Made Color::failure_output reset colors before printing the trailing newline.
  • Corrected some issues with the 'runtests' docs and removed some performance notes which no longer seem accurate.
  • Fixed bug whereby if tests without file extensions were included then the spacing of the result leaders would be off.
  • execrc file is now a YAML file.
  • Removed white background on the test failures. It was too garish for me. Just more proof that we need better ways of overriding color support.
  • Started work on TAPx::Harness::Compatible. Right now it's mainly just a direct lift of Test::Harness to make sure the tests work.
  • Commented out use Data::Dumper::Simple in - it's not a core module.
  • Added next_raw to TAPx::Parser::Iterator which skips any fixes for quirky TAP that are implemented by next. Used to support TAPx::Harness::Compatible::Iterator
  • Applied our version number to all T::H::Compatible modules
  • Removed T::H::C::Assert. It's documented as being private to Test::Harness and we're not going to need it.
  • Refactored runtests to call aggregate_tests to expose the interface we need for the compatibility layer.
  • Make it possible to pass an end time to summary so that it needn't be called immediately after the tests complete.
  • Moved callback handling into TAPx::Base and altered TAPx::Parser to use it.
  • Made TAPx::Harness into a subclass of TAPx::Base and implemented made_parser callback.
  • Moved the dispatch of callbacks out of run and into next so that they're called when TAPx::Harness iterates through the results.
  • Implemented PERL_TEST_HARNESS_DUMP_TAP which names a directory into which the raw TAP of any tests run via TAPx::Harness will be written.
  • Rewrote the TAPx::Grammar->tokenize method to return a TAPx::Parser::Result object. Code is much cleaner now.
  • Moved the official grammar from TAPx::Parser to TAPx::Parser::Grammar, provided a link and updated the grammar.
  • Fixed bug where a properly escaped '# TODO' line in a test description would still be reported as a TODO test.
  • Added patches/ExtUtils-MakeMaker-6.31.patch - a patch against EUMM that makes test_harness use TAPx::Harness instead of Test::Harness if PERL_EUMM_USE_TAPX is true and TAPx::Harness is installed. In other words cause 'make test' for EUMM based models to use TAPx::Harness.
  • Added support for timer option to TAPx::Harness which causes the elapsed time for each test to be displayed.
  • Setup mailing list.
  • Fixed accumulating @$exec bug in TAPx::Harness.
  • Made runtests pass '--exec' option as an array.
  • (#24679) TAPx::Harness now reports failure for tests that die after completing all subtests.
  • Added in_todo attribute on TAPx::Parser which is true while the most recently seen test was a TODO.
  • (#24728) TAPx::Harness now supresses diagnostics from failed TODOs. Not sure if the semantics of this are correct yet.

Changes for version 0.50_06

  • Fixed doc typo in examples/README [ #24409]
  • Colored test output is now the default for 'runtests' unless you're running under windows or -t STDOUT is false.
  • Removed the .t extension from t/source_tests/*.t since those are 'test tests' which caused false negatives when running recursive tests. [Adrian Howard]
  • Somewhere along the way, the exit status started working again. Go figure.
  • Factored color output so that disabling it under Windows is cleaner.
  • Added explicit switch to :crlf layer after open3 under Windows. open3 defaults to raw mode resulting in spurious \r characters input parsed input.
  • Made Iterator do an explicit wait for subprocess termination. Needed to get process status correctly on Windows.
  • Fixed bug which didn't allow t/010-regression.t to be run directly via Perl unless you specified Perl's full path.
  • Removed SIG{CHLD} handler (which we shouldn't need I think because we explicitly waitpid) and made binmode ':crlf' conditional on IS_WIN32. On Mac OS these two things combined to expose a problem which meant that output from test scripts was sometimes lost.
  • Made t/110-source.t use File::Spec->catfile to build path to test script.
  • Made Iterator::FH init is_first, is_last to 0 rather than undef for consistency with array iterator.
  • Added t/120-varsource.t to test is_first and is_last semantics over files with small numbers of lines.
  • Added check for valid callback keys.
  • Added t/130-results.t for Result classes.

Changes for version 0.50_05

  • Removed debugging code accidentally left in bin/runtests.
  • Removed 'local $/ = ...' from the iterator. Hopefully that will fix the line ending bug, but I don't know about the wstat problem.

Changes for version 0.50_04

  • BACKWARDS IMCOMPATIBLE: Renamed all '::Results' classes to '::Result' because they represent a single result.
  • Fixed bug where piping would break verbose output.
  • IPC::Open3::open3 now takes a @command list rather than a $command string. This should make it work under Windows.
  • Added 'stdout_sterr' sample test back to regression tests. IPC::Open3 appears to make it work.
  • Bug fix: don't print 'All tests successful' if no tests are run.
  • Refactored 'runtests' to make it a bit easier to follow.
  • Bug fix: Junk and comments now allowed before a leading plan.
  • HARNESS_ACTIVE and HARNESS_VERSION environment variables now set.
  • Renamed 'problems' in TAPx::Parser and TAPx::Aggregator to 'has_problems'.

Changes for version 0.50_03

  • Fixed bug where '-q' or '-Q' with colored tests weren't suppressing all information.
  • Fixed an annoying MANIFEST nit.
  • Made '-h' for runtests now report help. Using a new harness requires the full --harness switch.
  • Added 'problems' method to TAPx::Parser and TAPx::Parser::Aggregator.
  • Deprecatd 'todo_failed' in favor of 'todo_passed'
  • Add -I switch to runtests.
  • Fixed runtests doc nit (smylers)
  • Removed TAPx::Parser::Builder.
  • A few more POD nits taken care of.
  • Completely removed all traces of C<--merge> as IPC::Open3 seems to be working.
  • Moved the tprove* examples to examples/bin in hopes of them no longer showing up in CPAN's docs.
  • Made the 'unexpectedly succeeded' message clearer (Adam Kennedy)

Changes for version 0.50_02

  • Added some files I left out of the manifest (reported by Florian Ragwitz).
  • Added strict to Makefile.PL and changed @PROGRAM to @program (reported Florian Ragwitz).

Changes for version 0.50_01

  • Added a new example which shows to how test Perl, Ruby, and URLs all at the same time using 'execrc' files.
  • Fixed the diagnostic format mangling bug.
  • We no longer override Test::Builder to merge streams. Instead, we go ahead and use IPC::Open3. It remains to be seen whether or not this is a good idea.
  • Fixed vms nit: for failing tests, vms often has the 'not' on a line by itself.
  • Fixed bugs where unplanned tests were not reporting as a failure (test number greater than tests planned).
  • TAPx::Parser constructor can now take an 'exec' option to tell it what to execute to create the stream (huge performance boost).
  • Added TAPx::Parser::Source. This allows us to run tests in just about any programming language.
  • Renamed the filename() method to source() in TAPx::Parser::Source::Perl.
  • We now cache the @INC values found for TAPx::Parser::Source::Perl.
  • Added two test harnesses, TAPx::Harness and TAPx::Harness::Color.
  • Removed references to manual stream construction from TAPx::Parser documentation. Users should not (usually) need to worry about streams.
  • Added bin/runtests utility. This is very similar to 'prove'.
  • Renumbered tests to make it easier to add new ones.
  • Corrected some minor documentation nits.
  • Makefile.PL is no longer auto-generated (it's built by hand).
  • Fixed regression test bug where driving tests through the harness I'm testing caused things to break.
  • BUG: exit() values are now broken. I don't know how to capture them with IPC::Open3. However, since no one appears to be using them, this might not be an issue.


Run tests through a TAPx harness.
Documentation for the TAP format


Base class that provides common functionality to TAPx::Parser and TAPx::Harness
Run Perl test scripts with statistics
Run Perl test scripts with color
Run Perl standard test scripts with statistics
Internal TAPx::Harness::Compatible Iterator
object for tracking a single test point
object for tracking results from a single test file
detailed analysis of test results
Utility functions for TAPx::Harness::Compatible::*
Parse TAP output
Aggregate TAPx::Parser results.
A grammar for the original TAP version.
Internal TAPx::Parser Iterator
TAPx::Parser output
Bailout result token.
Comment result token.
Plan result token.
Test result token.
Unknown result token.
Stream output from some source
Stream Perl output
Read/Write YAML files with as little code as possible


in lib/TAPx/Parser/
in lib/TAPx/Parser/