CPAN-cpanminus-reporter-RetainReports
view release on metacpan or search on metacpan
t/lib/Testing.pm view on Meta::CPAN
no warnings 'redefine';
local *CPAN::cpanminus::reporter::RetainReports::_check_cpantesters_config_data = sub { 1 };
my $tdir = tempdir( CLEANUP => 1 );
$reporter->set_report_dir($tdir);
$reporter->run;
_analyze_json_file($tdir, $args);
}
return 1;
}
sub test_no_test_output {
my $args = shift;
_check_args($args);
my $reporter = _create_reporter($args);
{
no warnings 'redefine';
local *CPAN::cpanminus::reporter::RetainReports::_check_cpantesters_config_data = sub { 1 };
my $tdir = tempdir( CLEANUP => 1 );
$reporter->set_report_dir($tdir);
my $output = capture_stdout { $reporter->run; };
Test::More::like($output, qr/No test output found for '$args->{expected}->{distname}'/s,
"Got expected output indicating no test output for $args->{expected}->{distname}");
}
return 1;
}
sub _check_args {
my $args = shift;
croak "Must pass hashref to test_one_log_file()"
unless ref($args) eq 'HASH';
my @top_keys = (qw| build_logfile json_title expected |);
for my $k (@top_keys) {
croak "Must provide value for element '$k'"
unless exists $args->{$k};
}
for my $l (qw| author distname dist distversion grade test_output | ) {
croak "Must provide value for element '$l' in 'expected'"
unless exists $args->{expected}->{$l};
}
return 1;
}
sub _create_reporter {
my $args = shift;
my $dir = -d 't' ? 't/data' : 'data';
my $reporter = CPAN::cpanminus::reporter::RetainReports->new(
force => 1, # ignore mtime check on build.log
build_logfile => File::Spec->catfile($dir, $args->{build_logfile}),
'ignore-versions' => 1,
);
Test::More::ok(defined $reporter, 'created new reporter object');
return $reporter;
}
sub _analyze_json_file {
my ($tdir, $hr) = @_;
my $lfile = File::Spec->catfile($tdir, "$hr->{json_title}.log.json");
Test::More::ok(-f $lfile, "Log file $lfile created");
my $f = Path::Tiny::path($lfile);
my $decoded = decode_json($f->slurp_utf8);
_test_json_output($decoded, $hr->{expected});
return 1;
}
sub _test_json_output {
my ($got, $expected) = @_;
my $pattern = "%-28s%s";
Test::More::is($got->{author}, $expected->{author},
sprintf($pattern => ('Got expected author:', $expected->{author})));
Test::More::is($got->{distname}, $expected->{distname},
sprintf($pattern => ('Got expected distname:', $expected->{distname})));
Test::More::is($got->{dist}, $expected->{dist},
sprintf($pattern => ('Got expected dist:', $expected->{dist})));
Test::More::is($got->{distversion}, $expected->{distversion},
sprintf($pattern => ('Got expected distversion:', $expected->{distversion})));
Test::More::is($got->{grade}, $expected->{grade},
sprintf($pattern => ('Got expected grade:', $expected->{grade})));
Test::More::like($got->{test_output}, $expected->{test_output},
"Got expected test output");
return 1;
}
=pod
test_multiple_log_files( {
build_logfile => 'build.dist_subdir.log',
logs => [
{
json_title => 'RGARCIA.Sub-Identify-0.04',
expected => {
author => 'RGARCIA',
distname => 'Sub-Identify-0.04',
dist => 'Sub-Identify',
distversion => '0.04',
grade => 'PASS',
test_output => qr/Building and testing Sub-Identify-0\.04/s,
},
},
# additional per-distro hash refs
],
} );
=cut
sub test_multiple_log_files {
my $args = shift;
croak "Must pass hashref to test_multiple_log_files()"
unless ref($args) eq 'HASH';
for my $k (qw| build_logfile logs |) {
croak "Must provide value for element '$k'"
unless exists $args->{$k};
}
croak "Value of 'logs' must be array reference"
unless ref($args->{logs}) eq 'ARRAY';
for my $hr (@{$args->{logs}}) {
for my $k (qw| json_title expected |) {
croak "Must provide value for element '$k'"
unless exists $hr->{$k};
}
for my $l (qw| author distname dist distversion grade test_output | ) {
( run in 2.879 seconds using v1.01-cache-2.11-cpan-600a1bdf6e4 )