#!perl -w
use strict;
use Test::More tests => 8;
use File::Find::Rule;
use File::Find::Rule::Filesys::Virtual;
use Filesys::Virtual::Plain;
use Cwd;
if (eval { require Test::Differences; 1 }) {
no warnings 'redefine';
*is_deeply = \&Test::Differences::eq_or_diff;
}
my $virtual = Filesys::Virtual::Plain->new({
root_path => getcwd,
cwd => '/',
root => '/',
});
sub new_real { File::Find::Rule->new }
sub new_virt { File::Find::Rule::Filesys::Virtual->new->virtual( $virtual ) }
isa_ok( new_real, "File::Find::Rule" );
isa_ok( new_virt, "File::Find::Rule::Filesys::Virtual" );
is_deeply( [ new_virt->file->name('*.t')->in( 't' ) ],
[ new_real->file->name('*.t')->in( 't' ) ],
"files in t/" );
is_deeply( [ new_virt->size('>600')->name('*.t')->in( 't' ) ],
[ new_real->size('>600')->name('*.t')->in( 't' ) ],
"stat in t/" );
is_deeply( [ new_virt->or( new_virt->name('.svn')->prune->discard,
new_virt->file )->in( 't' ) ],
[ new_real->or( new_real->name('.svn')->prune->discard,
new_real->file )->in( 't' ) ],
"prune .svn" );
is_deeply( [ new_virt->grep(qr/irony/)->in('t') ],
[ new_real->grep(qr/irony/)->in('t') ],
"find irony in our big file");
# the in may not always be a directory
is_deeply( [ new_virt->size('>600')->name('*.t')->in( 't/findvirtual.t' ) ],
[ new_real->size('>600')->name('*.t')->in( 't/findvirtual.t' ) ],
"stat of t/findvirtual.t" );
# and it may be a file and a directory
is_deeply( [ new_virt->size('>600')->name('*.t')->in( 't/findvirtual.t',
't/subdir' ) ],
[ new_real->size('>600')->name('*.t')->in( 't/findvirtual.t',
't/subdir' ) ],
"stat of t/findvirtual.t t/subdir" );