The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T
use strict;
use lib 'lib';
use IO::Zlib;
use Test::Exception;
use Test::More tests => 43;
use_ok('Parse::CPAN::Authors');

my $filename   = "t/01mailrc.txt";
my $gzfilename = "t/01mailrc.txt.gz";

my $fh = IO::Zlib->new( $gzfilename, "rb" )
    || die "Failed to read $filename: $!";
my $contents = join '', <$fh>;
$fh->close;

# try with no filename
chdir "t";
my $p = Parse::CPAN::Authors->new();
is_fine($p);
chdir "..";

# try with the filename
$p = Parse::CPAN::Authors->new($filename);
is_fine($p);

# try with the gzipped filename
$p = Parse::CPAN::Authors->new($gzfilename);
is_fine($p);

# try with the contents
$p = Parse::CPAN::Authors->new($contents);
is_fine($p);

# try with fake filename
throws_ok { Parse::CPAN::Authors->new("xyzzy") } qr/Failed to read/;

# try with fake gzipped filename
throws_ok { Parse::CPAN::Authors->new("xyzzy.gz") } qr/Failed to read/;

sub is_fine {
    my $p = shift;

    isa_ok( $p, 'Parse::CPAN::Authors' );

    my $a = $p->author('AASSAD');
    isa_ok( $a, 'Parse::CPAN::Authors::Author' );
    is( $a->pauseid, 'AASSAD' );
    is( $a->name,    "Arnaud 'Arhuman' Assad" );
    is( $a->email,   'arhuman@hotmail.com' );

    $a = $p->author('AJOHNSON');
    isa_ok( $a, 'Parse::CPAN::Authors::Author' );
    is( $a->pauseid, 'AJOHNSON' );
    is( $a->name,    'Andrew L. Johnson' );
    is( $a->email,   'andrew-johnson@shaw.ca' );

    is_deeply(
        [ sort map { $_->pauseid } $p->authors ],
        [   qw(AADLER AALLAN
                AANZLOVAR AAR AARDEN AARONJJ AARONSCA AASSAD ABARCLAY AJOHNSON)
        ]
    );
}