package t::MockCPANDist;
use strict;
BEGIN { if ( not $] < 5.006 ) { require warnings; warnings->import } }
use File::Basename;
#--------------------------------------------------------------------------#
my $simulate_bad_author = 0;
sub import {
my $class = shift;
$simulate_bad_author = grep { $_ eq 'bad_author' } @_;
}
#--------------------------------------------------------------------------#
my %spec = (
prereq_pm => 'HASH',
pretty_id => q{},
author_id => q{},
author_fullname => q{},
);
sub new {
my ($class) = shift;
die "Arguments to t::MockCPANDist::new() must be key => value pairs"
if (@_ % 2);
my %args = @_;
for my $key ( keys %spec ) {
if (
! exists $args{$key} ||
( defined ref $args{$key} && ref $args{$key} ne $spec{$key} )
) {
die "Argument '$key' must be a " .
(defined $spec{$key} ? "$spec{$key} reference" : "scalar" );
}
}
bless \%args, $class;
}
# cheat on author() and let the mock handle it all unless we want it to fail
sub author { return $simulate_bad_author ? undef : shift }
sub prereq_pm { return shift->{prereq_pm} }
sub pretty_id { return shift->{pretty_id} }
sub id { return shift->{author_id} }
sub fullname { return shift->{author_fullname} }
sub base_id {
my $self = shift;
my $id = $self->pretty_id();
my $base_id = File::Basename::basename($id);
$base_id =~ s{\.(?:tar\.(bz2|gz|Z)|t(?:gz|bz)|zip)$}{}i;
return $base_id;
}
1;