Skip to content

Commit

Permalink
Add tool to run yath when using cpanm and similar
Browse files Browse the repository at this point in the history
  • Loading branch information
exodist committed Apr 27, 2024
1 parent 8ac1f62 commit 9a68b39
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 6 deletions.
1 change: 1 addition & 0 deletions dist.ini
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ Test2::Util::Table = 0
Test2::Util::Term = 0.000159
Test2::Util::Times = 0
Test2::V0 = 0.000159
Test::Harness = 3.49
Test::Builder = 1.302198
Test::Builder::Formatter = 1.302198
Test::More = 1.302198
Expand Down
19 changes: 19 additions & 0 deletions lib/App/Yath/Renderer/TAPHarness.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package App::Yath::Renderer::TAPHarness;
use strict;
use warnings;

our $VERSION = '2.000000';

use parent 'App::Yath::Renderer';
use Test2::Harness::Util::HashBase;

sub render_event {}

sub finish {
my $self = shift;
my ($auditor) = @_;

$TAP::Harness::Yath::SUMMARY = $auditor->summary;
}

1;
87 changes: 87 additions & 0 deletions lib/TAP/Harness/Yath.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package TAP::Harness::Yath;
use strict;
use warnings;

# $ENV{HARNESS_SUBCLASS}

{
package TAP::Harness::Yath::Aggregator;

use Test2::Harness::Util::HashBase qw{
files_total
files_failed
files_passed
asserts_total
asserts_passed
asserts_failed
};

sub has_errors { $_[0]->{+FILES_FAILED} || $_[0]->{+ASSERTS_FAILED} }

sub total { $_[0]->{+ASSERTS_TOTAL} }
sub failed { $_[0]->{+ASSERTS_FAILED} }
sub passed { $_[0]->{+ASSERTS_PASSED} }

sub total_files { $_[0]->{+FILES_TOTAL} }
sub failed_files { $_[0]->{+FILES_FAILED} }
}

our $SUMMARY;

use App::Yath::Script;
use Test2::Harness::Util::HashBase qw{
color
ignore_exit
jobs
lib
switches
timer
verbosity
};

sub runtests {
my $self = shift;
my (@tests) = @_;

my @env_args = $ENV{TAP_HARNESS_YATH_ARGS} ? split(/\s*,\s*/, $ENV{TAP_HARNESS_YATH_ARGS}) : ();

my @args = (
'test',
$self->{+COLOR} ? '--color' : (),
'--jobs=' . ($self->{+JOBS} // 1),
'-v=' . ($self->{+VERBOSITY} // 0),
(map { "-I$_" } @{$self->{+LIB} // []}),
(map { "-S=$_" } @{$self->{+SWITCHES} // []}),
'--renderer=Default',
'--renderer=TAPHarness',
@env_args,
@tests,
);

my $got = App::Yath::Script::run(__FILE__, \@args);

my $files_total = $SUMMARY->{'tests_seen'} //= 0;
my $files_failed = $SUMMARY->{'failed'} //= $got;
my $files_passed = $files_total - $files_failed;

my $asserts_total = $SUMMARY->{'asserts_seen'} // 0;
my $asserts_passed = $SUMMARY->{'asserts_passed'} // 0;
my $asserts_failed = $SUMMARY->{'asserts_failed'} // 0;

my $out = TAP::Harness::Yath::Aggregator->new(
files_total => $files_total,
files_failed => $files_failed,
files_passed => $files_passed,

asserts_total => $asserts_total,
asserts_passed => $asserts_passed,
asserts_failed => $asserts_failed,
);

return $out;
}

1;

__END__
20 changes: 14 additions & 6 deletions lib/Test2/Harness/Collector/Auditor/Run.pm
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use parent 'Test2::Harness::Collector::Auditor';
use Test2::Harness::Util::HashBase qw{
<jobs
<launches
<asserts
<asserts <asserts_passed <asserts_failed
<start
<stop
Expand Down Expand Up @@ -125,6 +125,12 @@ sub _audit {

if ($f->{assert}) {
$self->{+ASSERTS}++;
if ($f->{assert}->{pass}) {
$self->{+ASSERTS_PASSED}++
}
else {
$self->{+ASSERTS_FAILED}++
}
}

if ($f->{parent} && !$f->{assert}->{pass}) {
Expand Down Expand Up @@ -221,11 +227,13 @@ sub summary {
my $cpu = sum0(@$times);

return $self->{+SUMMARY} = {
pass => $self->{+ASSERTS} ? $final_data->{pass} : 0,
cpu_usage => $wall ? int($cpu / $wall * 100) : 0,
failures => (0 + @{$final_data->{failed} // []}),
tests_seen => $self->{+LAUNCHES},
asserts_seen => $self->{+ASSERTS},
pass => $self->{+ASSERTS} ? $final_data->{pass} : 0,
cpu_usage => $wall ? int($cpu / $wall * 100) : 0,
failures => (0 + @{$final_data->{failed} // []}),
tests_seen => $self->{+LAUNCHES},
asserts_seen => $self->{+ASSERTS},
asserts_passed => $self->{+ASSERTS_PASSED},
asserts_failed => $self->{+ASSERTS_FAILED},

time_data => {
start => $self->{+START},
Expand Down

0 comments on commit 9a68b39

Please sign in to comment.