1package FilterTest; 2 3use strict; 4use warnings; 5use parent 'Exporter'; 6 7use App::Ack::File; 8use File::Next; 9use Util; 10use Test::More; 11 12our @EXPORT = qw(filter_test); 13 14sub swamp_files { 15 my @swamp_files; 16 17 my $files = File::Next::files( 't/swamp' ); 18 while ( my $file = $files->() ) { 19 push( @swamp_files, $file ); 20 } 21 22 return @swamp_files; 23} 24 25sub filter_test { 26 local $Test::Builder::Level = $Test::Builder::Level + 1; 27 28 my $filter_args = shift; 29 my $expected_matches = shift; 30 my $msg = shift or die 'Must pass a message to filter_test()'; 31 32 return subtest "filter_test($msg)" => sub { 33 my $filter = eval { 34 App::Ack::Filter->create_filter(@{$filter_args}); 35 }; 36 37 ok($filter) or diag($@); 38 39 my @matches = map { 40 $_->name 41 } grep { 42 $filter->filter($_) 43 } map { 44 App::Ack::File->new($_) 45 } swamp_files(); 46 47 sets_match(\@matches, $expected_matches, $msg); 48 }; 49} 50 51 521; 53