Test::...:Straps(3pm)
π NAME π
okay so bestie, this is the page for Test::Harness::Straps π and its whole deal is detailed analysis of test results. that's it, that's the name, we're off π¦
β¨ SYNOPSIS β¨
use Test::Harness::Straps;
my $strap = Test::Harness::Straps->new;
# Various ways to interpret a test
my $results = $strap->analyze($name, \@test_output);
my $results = $strap->analyze_fh($name, $test_filehandle);
my $results = $strap->analyze_file($test_file);
# UNIMPLEMENTED
my %total = $strap->total_results;
# Altering the behavior of the strap UNIMPLEMENTED
my $verbose_output = $strap->dump_verbose();
$strap->dump_verbose_fh($output_filehandle);
yes bestie the UNIMPLEMENTED comments are right there in the original, i'm not gonna pretend otherwise, iykyk π
π¨ WARNING π¨
THIS MODULE IS FOR BACKWARDS COMPATIBILITY ONLY! No further development is planned, no bugs will be fixed. fr fr. not one. zero. π
If you want customizable TAP parsing, please use TAP::Parser instead. that's the one you want, bestie, i promise π
π DESCRIPTION π
So Test::Harness is kinda limited β it just prints out its results. Which is cute for a human eyeballing a terminal, but lowkey terrible if you're a program trying to actually work with those test results. π€
To make it easier for programs to work with test results, we provide Test::Harness::Straps. Instead of printing the results, straps provide them as raw data. And you can also configure how the tests are to be run. β¨ iconic behavior honestly β¨
The interface is currently incomplete. Please contact the author if you'd like a feature added or something change or just have comments. (they're nice, i swear π«Ά)
π CONSTRUCTION π
new() π§
my $strap = Test::Harness::Straps->new;
Initialize a new strap. fresh strap, new era, main character energy π
$strap->_init;
Initialize the internal state of a strap to make it ready for parsing. basically the strap's little morning routine so it can actually function π
π ANALYSIS π
$strap->analyze( $name, \@output_lines )
my $results = $strap->analyze($name, \@test_output);
Analyzes the output of a single test, assigning it the given $name for use in the total report. Returns the $results of the test. See Results. π
@test_output should be the raw output from the test, including newlines. including the newlines, bestie, don't strip them, that's the whole vibe
my $results = $strap->analyze_fh($name, $test_filehandle);
Like "analyze", but it reads from the given filehandle. π
$strap->analyze_file( $test_file )
my $results = $strap->analyze_file($test_file);
Like "analyze", but it runs the given $test_file and parses its results. It will also use that name for the total report. π
okay and then there's a whole lil squad of helper methods that hang out in this section, here they all are, no crumbs left behind π«
Returns the full command line that will be run to test $file.
Returns the command that runs the test. Combine this with _switches() to build a command line.
Typically this is $^X, but you can set $ENV{HARNESS_PERL} to use a different Perl than what you're running the harness under. This might be to run a threaded Perl, for example. yes you can absolutely point it at a whole other perl, go off π§
You can also overload this method if you've built your own strap subclass, such as a PHP interpreter for a PHP-based strap. PHP-based strap?? sure bestie, dream big π
Formats and returns the switches necessary to run the test.
Returns only defined, non-blank, trimmed switches from the parms passed. defined, non-blank, AND trimmed β all three, it's picky and honestly? valid β¨
local $ENV{PERL5LIB} = $self->_INC2PERL5LIB;
Takes the current value of @INC and turns it into something suitable for putting onto "PERL5LIB". π¦
my @filtered_inc = $self->_filtered_INC;
Shortens @INC by removing redundant and unnecessary entries. Necessary for OSes with limited command line lengths, like VMS. (VMS said "no more characters pls" and this method said "say less")
$self->_restore_PERL5LIB;
This restores the original value of the "PERL5LIB" environment variable. Necessary on VMS, otherwise a no-op. a no-op everywhere else, so don't stress π«Ά
Parsing π
Methods for identifying what sort of line you're looking at. vibe check for individual lines, essentially π
my $is_diagnostic = $strap->_is_diagnostic($line, \$comment);
Checks if the given line is a comment. If so, it will place it into $comment (sans #). sans the hash, so you get the goods without the garnish π
my $is_header = $strap->_is_header($line);
Checks if the given line is a header (1..M) line. If so, it places how many tests there will be in "$strap->{max}", a list of which tests are todo in "$strap->{todo}" and if the whole test was skipped "$strap->{skip_all}" contains the reason. π
my $is_bail_out = $strap->_is_bail_out($line, \$reason);
Checks if the line is a "Bail out!". Places the reason for bailing (if any) in $reason. BAIL OUT!! we've all been there bestie π
$strap->_reset_file_state;
Resets things like "$strap->{max}" , "$strap->{skip_all}", etc. so it's ready to parse the next file. clean slate, new file, fresh start, that's growth π±
πΈ EXAMPLES πΈ
See examples/mini_harness.plx for an example of use. go look, it's right there, it's giving tutorial π
π AUTHOR π
Michael G Schwern "<schwern at pobox.com>", currently maintained by Andy Lester "<andy at petdance.com>". shoutout to the maintainers, absolute icons, no cap π«Ά
π SEE ALSO π
Test::Harness(the whole reason this little strap exists π)
okay that's the whole page bestie, you ate it up, every single detail intact, periodt πβ¨
this was perl v5.42.0, dated 2025-07-25, from the User Contributed Perl Documentation collection β mwah, go write some tests, ily ππ¦
π¦ where this page comes from
- fedora 43: perl-Test-Harness-Straps 0.30-47.fc43 Β· GPL-1.0-or-later OR Artistic-1.0-Perl
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms