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