Badger
view release on metacpan or search on metacpan
t/filesystem/visitor.t view on Meta::CPAN
files => sub { my $size = shift->size; $size >= 100 && $size < 420 },
in_dirs => 1,
not_in_dirs => '.svn',
)->collect;
print STDERR "medium files: \n", join("\n ", @files), "\n" if $DEBUG;
is( scalar @files, 3, 'got 3 medium files' );
is( join(' ', sort map { $_->name } @files),
'badger goodbye.txt medium',
'got all small files' );
# large files
@files = $vdir->visit(
dirs => 0,
files => sub { shift->size > 420 },
in_dirs => 1,
not_in_dirs => ['.svn', 'tmp'],
)->collect;
print STDERR "large files: \n", join("\n ", @files), "\n" if $DEBUG;
is( scalar @files, 3, 'got 3 large files' );
is( join(' ', sort map { $_->name } @files),
'goodbye.html hello.html large',
'got all large files' );
# directories containing a README file
@files = $vdir->visit(
dirs => sub { shift->file('README')->exists },
files => 0,
in_dirs => 1,
not_in_dirs => '.svn',
)->collect;
print STDERR "dirs with README files: \n", join("\n ", @files), "\n" if $DEBUG;
is( scalar @files, 1, 'got 1 dir with README' );
is( join(' ', sort map { $_->name } @files),
'tmp',
'got all dirs with README files in' );
#-----------------------------------------------------------------------
# all-in-one test with default arguments
#-----------------------------------------------------------------------
@files = grep { $_ !~ /svn/ } $vdir->collect;
print STDERR "default files: \n", join("\n ", @files), "\n" if $DEBUG;
is( scalar @files, 6, 'got default files' );
is( join(' ', sort map { $_->name } @files),
'large medium one small tmp two',
'got all default files' );
#-----------------------------------------------------------------------
# visitor callbacks
#-----------------------------------------------------------------------
my $n = 0;
@files = $vdir->visit(
accept_file => sub { $n++ }
);
is( $n, 3, 'visited three files via a callback' );
#-----------------------------------------------------------------------
# subclass
#-----------------------------------------------------------------------
package My::Test::Visitor;
use base 'Badger::Filesystem::Visitor';
our $FILES = qr/^good/;
our $DIRS = 0;
our $IN_DIRS = 1;
our $NOT_IN_DIRS = ['.svn', 'tmp'];
package main;
@files = $vdir->collect( My::Test::Visitor->new );
print STDERR "subclass files: \n", join("\n ", @files), "\n" if $DEBUG;
is( join(' ', sort map { $_->name } @files),
'goodbye.bak goodbye.html goodbye.txt',
'got all subclass files' );
( run in 0.914 second using v1.01-cache-2.11-cpan-140bd7fdf52 )