The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use warnings;

use Test::More 'no_plan';
use Test::Output;

use Cwd;

my $class = 'Module::Release';
my $file  = ".releaserc";

use_ok( $class );
can_ok( $class, 'new' );

BEGIN {
	use File::Spec;
	my $file = File::Spec->catfile( qw(t lib setup_common.pl) );
	require $file;
	}


my @subs = qw(touch touch_all_in_manifest);

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Create test object
my $release = $class->new;
isa_ok( $release, $class );
can_ok( $release, @subs );

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# make some files
my @files = qw(one two three);
END { unlink @files }

my $past   = time - 200_000;
my $future = time + 200_000;

foreach my $name ( @files )
	{
	open my($fh), ">", $name; close $fh;
	ok( -e $name, "test file $name exists" );
	
	utime $past, $past, $name;
	cmp_ok( -M $name, ">", 2, "File is older than two days" );
	}
	
utime $future, $future, $files[-1];
cmp_ok( -M $files[-1], "<", 2, "File is newer than two days (in the future)" );

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# test that it works
{
my $start = time;
my $count = $release->touch( @files );
my $end = time;

foreach my $file ( @files )
	{
	foreach my $time ( (stat $file)[8,9] )
		{
		cmp_ok( $time, ">=", $start, "Time for $file is greater than start time" );
		cmp_ok( $time, "<=", $end,   "Time for $file is less than end time" );
		}
	}

is( $count, scalar @files, "All files touched" );

}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# test that it fails with non-existent file
{
$release->turn_quiet_off;

my $count = 0;

stderr_like
	{ $release->touch( 'not_there' ) }
	qr/not a plain file/,
	"touch fails for non-existent file";

is( $count, 0, "No files touched (good)" );
}