The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More 'no_plan';

use File::Spec::Functions;
use Test::Output;

my $class  = 'CPAN::PackageDetails';
my $method = 'read';

use_ok( $class );
can_ok( $class, $method );

my $file = catfile( qw(t test_files 02packages.details.txt.gz) );
ok( -e $file, "Test file $file exists" );

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# Test with single, good argument to read
{
my $lines = 1439;

my $package_details = $class->$method( $file );

isa_ok( $package_details, $class );
is( $package_details->source_file, $file, "Get back the right filename");

# test with the top level
# these are values taken from the input file
is( $package_details->file, '02packages.details.txt', 
	'file field reports right value from top level' 
	);
is( $package_details->url, 'http://www.perl.com/CPAN/modules/02packages.details.txt', 
	'url field reports right value from top level'  );

is( $package_details->count, $lines, 
	'line field reports right value from top level'  );

is( $package_details->line_count, $lines,
	"Entries has the right number of elements from delegate level");

# test with the delegate level
# these are values taken from the input file
my $header = $package_details->header;

is( $header->file, '02packages.details.txt', 
	'file field reports right value from delegate level' 
	);
is( $header->url, 'http://www.perl.com/CPAN/modules/02packages.details.txt', 
	'url field reports right value from delegate level'  );

is( $header->line_count, $lines, 
	'line field reports right value from delegate level'  );

my $entries = $package_details->entries;
is( $entries->count, $lines, 
	"Entries has the right number of elements from delegate level");
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# Test with no arguments to read - should fail
stderr_like
	{ $class->$method() }
	qr/Missing argument!/,
	"$method carps when I don't give it an argument";

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# Test with a single bad argument to read (missing file) - should fail
{
my $missing_file = 'fooey.gz';
ok( ! -e $missing_file, "Missing file is not there" );

stderr_like
	{ $class->$method( $missing_file  ) }
	qr/Could not open/,
	"$method carps when I don't give it an argument";
}