#!perl
use strict;
use warnings;
use Test::More 'no_plan';
use File::Spec::Functions;
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
my $class = 'MyCPAN::Indexer::Reporter::Base';
use_ok( $class );
my $reporter = $class->new;
isa_ok( $reporter, $class );
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
can_ok( $reporter, 'get_report_file_extension' );
my $rc = eval { $reporter->get_report_file_extension; 1 };
my $at = $@;
ok( ! defined $rc, 'eval catches an error' );
like( $at,
qr/You must/,
'Abstract get_report_file_extension croaks with right message'
);
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
can_ok( $reporter, 'get_success_report_subdir' );
is( $reporter->get_success_report_subdir, 'success' );
can_ok( $reporter, 'get_error_report_subdir' );
is( $reporter->get_error_report_subdir, 'error' );
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
{
my $info = bless {
completed => 1,
dist_info => { dist_file => 'Foo-Bar-0.01.tgz' },
}, 'Mock::run_info';
my $Notes = { Finished => 1, config => bless {}, 'Mock::config' };
my $config = bless( {
success_report_dir => 'success',
error_report_dir => 'error',
}, 'Mock::config' );
can_ok( $config, 'get' );
my $coordinator = bless {
info => $info,
notes => $Notes,
config => $config,
reporter => $reporter,
}, 'Mock::coordinator';
$reporter->set_coordinator( $coordinator );
# some of these methods now depend concrete methods
bless $reporter, 'Mock::derived';
is( $reporter->get_report_subdir( $info ), 'success' );
is( $reporter->get_report_path( $info ), catfile( qw(success Foo-Bar-0.01.test) ) );
$info->{error} = 1;
is( $reporter->get_report_subdir( $info ), 'error' );
is( $reporter->get_report_path( $info ), catfile( qw(error Foo-Bar-0.01.test ) ) );
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
BEGIN {
{
package Mock::derived;
use base qw(MyCPAN::Indexer::Reporter::Base);
sub get_report_file_extension { 'test' }
}
{
package Mock::run_info;
sub run_info { $_[0]->{ $_[1] } || '' }
}
{
package Mock::coordinator;
use Data::Dumper;
sub get_config { $_[0]->{config} }
sub set_config { 1 }
sub get_info { $_[0]->{info} }
sub get_notes { $_[0]->{notes} }
sub get_note { 1 }
sub set_note { 1 }
sub set_info { 1 }
sub increment_note { 1 }
sub decrement_note { 1 }
sub push_onto_note { 1 }
sub unshift_onto_note { 1 }
sub get_note_list_element { 1 }
sub set_note_unless_defined { 1 }
}
{
package Mock::config;
my %Config = (
error_report_subdir => 'error',
success_report_subdir => 'success',
);
sub get { eval { $Config{$_[1] || '' } } || '' }
}
}