#! perl use Test::More 'no_plan'; require_ok('File::Finder'); isa_ok(my $f = File::Finder->new, "File::Finder"); use File::Find; sub fin { my $wanted = shift; my @results; find(sub {$wanted->() and push @results, $File::Find::name}, @_); @results; } is_deeply([File::Finder->in(qw(.))], [fin(sub { 1 }, '.')], 'all names'); is_deeply([File::Finder->name(qr/\.t$/)->in(qw(.))], [fin(sub { /\.t$/ }, '.')], 'all files named *.t via regex'); is_deeply([File::Finder->name('*.t')->in(qw(.))], [fin(sub { /\.t$/ }, '.')], 'all files named *.t via glob'); is_deeply([File::Finder->perm('+0444')->in(qw(.))], [fin(sub { (stat($_))[2] & 0444 }, '.')], 'readable by someone'); is_deeply([File::Finder->perm('-0444')->in(qw(.))], [fin(sub { ((stat($_))[2] & 0444) == 0444 }, '.')], 'readable by everyone'); is_deeply([File::Finder->perm('+0222')->in(qw(.))], [fin(sub { (stat($_))[2] & 0222 }, '.')], 'writeable by someone'); is_deeply([File::Finder->perm('+0111')->in(qw(.))], [fin(sub { (stat($_))[2] & 0111 }, '.')], 'executable by someone'); is_deeply([File::Finder->perm('0644')->in(qw(.))], [fin(sub { ((stat($_))[2] & 0777) == 0644 }, '.')], 'mode 0644'); is_deeply([File::Finder->perm('0755')->in(qw(.))], [fin(sub { ((stat($_))[2] & 0777) == 0755 }, '.')], 'mode 755'); { my $dirperm = (stat ".")[2] & 07777; is_deeply([File::Finder->perm($dirperm)->in(qw(.))], [fin(sub { ((stat($_))[2] & 07777) == $dirperm }, '.')], 'mode same as current directory'); } is_deeply([File::Finder->type('f')->in(qw(.))], [fin(sub { -f }, '.')], 'all files'); is_deeply([File::Finder->eval(sub { stat('/') })->type('f')->in(qw(.))], [fin(sub { -f }, '.')], 'all files even after messing with _ pseudo handle'); is_deeply([File::Finder->user($<)->in(qw(.))], [fin(sub { -o }, '.')], 'owned'); is_deeply([File::Finder->not->user($<)->in(qw(.))], [fin(sub { not -o }, '.')], 'not owned'); is_deeply([File::Finder->group(0+$()->in(qw(.))], [fin(sub { $( == (stat)[5] }, '.')], 'group'); is_deeply([File::Finder->not->group(0+$()->in(qw(.))], [fin(sub { $( != (stat)[5] }, '.')], 'not group'); is_deeply([File::Finder->nouser->in(qw(.))], [fin(sub { not defined getpwuid((stat)[4]) }, '.')], 'nouser'); is_deeply([File::Finder->not->nouser->in(qw(.))], [fin(sub { defined getpwuid((stat)[4]) }, '.')], 'not nouser'); is_deeply([File::Finder->nogroup->in(qw(.))], [fin(sub { not defined getgrgid((stat)[5]) }, '.')], 'nogroup'); is_deeply([File::Finder->not->nogroup->in(qw(.))], [fin(sub { defined getgrgid((stat)[5]) }, '.')], 'not nogroup'); is_deeply([File::Finder->links('-2')->in(qw(.))], [fin(sub { (stat)[3] < 2 }, '.')], 'less than 2 links'); is_deeply([File::Finder->links('+1')->in(qw(.))], [fin(sub { (stat)[3] > 1 }, '.')], 'more than 1 link'); is_deeply([File::Finder->size('-10c')->in(qw(.))], [fin(sub { -s $_ < 10 }, '.')], 'less than 10 bytes'); is_deeply([File::Finder->size('+10c')->in(qw(.))], [fin(sub { -s $_ > 10 }, '.')], 'more than 10 bytes'); is_deeply([File::Finder->contains('AvErYuNlIkElYsTrInG')->in(qw(.))], ["./" . __FILE__], 'files with a very unlikely string');