App-Ikaros
view release on metacpan or search on metacpan
lib/App/Ikaros/Reporter.pm view on Meta::CPAN
package App::Ikaros::Reporter;
use strict;
use warnings;
use parent qw/Class::Accessor::Fast/;
use utf8;
use TAP::Harness::JUnit;
use IPC::Run;
use XML::Simple;
use List::MoreUtils qw/all/;
use Encode qw/encode decode/;
use YAML::XS qw/LoadFile Dump/;
use File::Copy::Recursive qw/rcopy/;
use App::Ikaros::Profiler;
use constant { DEBUG => 0 };
use Data::Dumper;
__PACKAGE__->mk_accessors(qw/
recovery_testing_command
enable_profile
profiler
output_filename
verbose
tests
/);
sub new {
my ($class, $options) = @_;
my $reporter = $class->SUPER::new({
recovery_testing_command => $options->{recovery_testing_command},
enable_profile => $options->{enable_profile} || 0,
profiler => App::Ikaros::Profiler->new,
output_filename => $options->{output_filename} || 'ikaros_output.xml',
verbose => $options->{verbose} || 0,
tests => +{}
});
$reporter->__setup_mangled_name_for_junit($options->{tests});
return $reporter;
}
sub __setup_mangled_name_for_junit {
my ($self, $tests) = @_;
foreach my $test_name (@$tests) {
my $mangled_name = $test_name;
$mangled_name =~ s/^[\.\/]*//;
$mangled_name =~ s/-/_/g;
$mangled_name =~ s/\./_/g;
$mangled_name =~ s/\//_/g;
$self->tests->{$mangled_name} = $test_name;
}
}
sub __setup_testsuites {
my ($self, $testsuites, $xml_data, $failed) = @_;
my $testsuite = $xml_data->{testsuite};
foreach my $test (@$testsuite) {
my $mangled_name = $test->{name};
my $name = $self->tests->{$mangled_name};
unless ($test->{failures} eq '0' && $test->{errors} eq '0') {
if ($name) {
$failed->{$name}++;
} else {
warn "nothing include $mangled_name";
}
} else {
#$test->{testcase} = [];
}
$testsuites->{$name} = $test if ($name);
}
}
sub __setup_dot_prove {
my ($self, $host, $dot_prove) = @_;
my $loaded_data = LoadFile $host->dot_prove_filename;
$dot_prove->{last_run_time} = $loaded_data->{last_run_time};
$dot_prove->{generation} = $loaded_data->{generation};
$dot_prove->{version} = $loaded_data->{version};
$dot_prove->{tests}{$_} = $loaded_data->{tests}{$_} foreach keys %{$loaded_data->{tests}};
$self->profiler->add_profile($host, $loaded_data) if ($self->enable_profile);
}
sub report {
my ($self, $hosts) = @_;
my (%testsuites, %failed, %dot_prove, %cover_db);
my $verbose = $self->verbose;
foreach my $host (@$hosts) {
( run in 2.137 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )