App-MtAws

 view release on metacpan or  search on metacpan

t/unit/filter.t  view on Meta::CPAN

		'match_subdirs' => bool(0)
	}];
}

{
	my $F = App::MtAws::Filter->new();
	$F->parse_include('!*.gz');
	cmp_deeply $F->{filters}, [{
		'pattern' => '!*.gz',
		'notmatch' => bool(1),
		're' => qr/(^|\/)[^\/]*\.gz$/,
		'action' => '+',
		'match_subdirs' => bool(0)
	}];
}

{
	my $F = App::MtAws::Filter->new();
	$F->parse_exclude('*.gz');
	cmp_deeply $F->{filters},[{
		'pattern' => '*.gz',
		'notmatch' => bool(0),
		're' => qr/(^|\/)[^\/]*\.gz$/,
		'action' => '-',
		'match_subdirs' => bool(0)
	}];
}

{
	my $F = App::MtAws::Filter->new();
	$F->parse_exclude('!*.gz');
	cmp_deeply $F->{filters}, [{
		'pattern' => '!*.gz',
		'notmatch' => bool(1),
		're' => qr/(^|\/)[^\/]*\.gz$/,
		'action' => '-',
		'match_subdirs' => bool(0)
	}];
}

#
# check_filenames
#

sub test_check_filenames
{
	my ($filters, $list, $expected, $msg) = @_;
	my $F = App::MtAws::Filter->new();
	$F->parse_filters($filters);
	ok ! defined $F->{error};
	cmp_deeply [$F->check_filenames(@$list)], $expected, $msg;
}


test_check_filenames '+*.gz -/data/ +', [qw{1.gz 1.txt data/1.txt data/z/1.txt data/2.gz f data/p/33.gz}],
	[qw{1.gz 1.txt data/2.gz f data/p/33.gz}], "should work";
test_check_filenames '-/data/ +*.gz -', [qw{1.gz p/1.gz data/ data/1.gz data/a/1.gz}], [qw{1.gz p/1.gz}], "should work again";
test_check_filenames '+*.gz -/data/', [qw{1.gz 1.txt data/1.txt data/z/1.txt data/2.gz f data/p/33.gz}],
	[qw{1.gz 1.txt data/2.gz f data/p/33.gz}], "default action - include";
test_check_filenames '+*.gz +/data/ -', [qw{x/y x/y/z.gz /data/1 /data/d/2 abc}],  [qw{x/y/z.gz /data/1 /data/d/2}], "default action - exclude";
test_check_filenames '-!/data/ +*.gz +/data/backup/ -',
	[qw{data/1 dir/1.gz data/2 data/3.gz data/x/4.gz data/backup/5.gz data/backup/6/7.gz data/backup/z/1.txt}],
	[qw{data/3.gz data/x/4.gz data/backup/5.gz data/backup/6/7.gz data/backup/z/1.txt}], "exclamation mark should work";
test_check_filenames '-0.* -фexclude/a/ +*.gz -', [qw{fexclude/b фexclude/b.gz}], [qw{фexclude/b.gz}],  "exclamation mark should work";

#
# check_dir
#

sub test_check_dir
{
	my ($filters, $dir, $res, $subdirs) = @_;
	my $F = App::MtAws::Filter->new();
	$F->parse_filters($filters);
	ok ! defined $F->{error};
	cmp_deeply [$F->check_dir($dir)], [bool($res), bool($subdirs)]
}

test_check_dir '+*.gz -/data/ +', 'data/', 0, 0;
test_check_dir '-/data/ +*.gz +', 'data/', 0, 1;
test_check_dir '+*.gz -/data** +', 'datadir/', 0, 0;
test_check_dir '-/data** +*.gz +', 'datadir/', 0, 1;
test_check_dir '-*.gz -/data** +', 'datadir/', 0, 1;
test_check_dir '-/data** -*.gz -/data** +', 'datadir/', 0, 1;
test_check_dir '+1.txt -*.gz -/data** +', 'datadir/', 0, 0;
test_check_dir '-1.txt -*.gz +/data** +', 'datadir/', 1, 0;
test_check_dir '+/data/ -', 'data/', 1, 0;
test_check_dir '+!/data/ -', 'somedir/', 1, 0;
test_check_dir '-!/data/ +', 'somedir/', 0, 0;
test_check_dir '-!/data/ +', 'somedir/', 0, 0;
test_check_dir '-/data/a/ +', 'data/', 1, 0;
test_check_dir '-/data/a/ +', 'data/a/', 0, 1;


1;



( run in 1.059 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )