use strict;
use warnings;
use Test::More tests => 13;
# Load the module.
use_ok 'Test::Fixme';
{ # Check that listing a directory that does not exist dies.
local $SIG{__WARN__} = sub { 1 };
eval { my @files = Test::Fixme::list_files('t/i/do/not/exist'); };
ok $@, 'list_files died';
ok $@ =~ m:^The directory 't/i/do/not/exist' does not exist:,
"check that non-existent directory causes 'die'";
}
{ # Test that sub croaks unless a path is passed.
local $SIG{__WARN__} = sub { 1 };
eval { my @files = Test::Fixme::list_files(); };
ok $@, 'list_files died';
like $@,
qr{^You must specify a single directory, or reference to a list of directories},
"check that no directory causes 'die'";
}
{ # Test the list_files function.
my $dir = 't/dirs/normal';
my @files = Test::Fixme::list_files($dir);
my @wanted = sort map { "$dir/$_" } qw( one.txt two.pl three.pm four.pod );
is_deeply( \@files, \@wanted, "check correct files returned from '$dir'" );
}
{ # Check that the search descends into sub folders.
my $dir = 't/dirs/deep';
my @files = Test::Fixme::list_files($dir);
my @wanted = sort map { "$dir/$_" }
map { "$_.txt" }
qw'deep_a deep_b
one/deep_one_a one/deep_one_b
two/deep_two_a two/deep_two_b';
is_deeply( \@files, \@wanted, "check correct files returned from '$dir'" );
}
{ # Check that we can scan a reference to a list of dirnames
my @dirs = qw( t/dirs/normal t/dirs/deep/one );
my @files = Test::Fixme::list_files( \@dirs );
my @wanted =
sort qw(t/dirs/deep/one/deep_one_a.txt t/dirs/deep/one/deep_one_b.txt ),
map { "t/dirs/normal/$_" } qw( one.txt two.pl three.pm four.pod );
is_deeply( \@files, \@wanted,
"check correct files returned from " . join( ', ', @dirs ) );
}
{ # Test the list_files function with a filename_match regex
my $dir = 't/dirs/normal';
my @files = Test::Fixme::list_files( $dir, qr/\.(?:pl|pm)$/ );
my @wanted = sort map { "$dir/$_" } qw( two.pl three.pm );
is_deeply( \@files, \@wanted, "check correct files returned from '$dir'" );
}
SKIP: { # Check that non files do not get returned.
skip( "cannot create symlink", 4 ) unless eval { symlink( "", "" ); 1 };
my $dir = "t/dirs/types";
my $target = "normal.txt";
my $target_file = "$dir/$target";
my $symlink = "$dir/symlink";
# Make a symbolic link
ok symlink( $target, $symlink ), "create symlinked file";
ok -e $symlink, "symlink now exists";
my @files = Test::Fixme::list_files($dir);
my @wanted = ($target_file);
is_deeply( \@files, \@wanted,
"check that non files are not returned from '$dir'" );
ok unlink($symlink), "delete symlinked file";
}