c5a5709d8e5ec9f46111d80fdaa4384dbc5e57d3
[perl/file-rewrite.git] / t / 10-fileset.t
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 13;
7 use Test::NoWarnings;
8
9 use autodie;
10 use File::Temp qw(tempdir);
11 use File::Path qw(remove_tree);
12
13 BEGIN { use_ok('File::Rewrite', 'fileset'); }
14
15 my $target = tempdir();
16
17 sub testfileset {
18         my ($name, $input, $params, $result) = @_;
19
20         my $filename = "$target/$name";
21         open my $file, '>', $filename;
22         print {$file} $input;
23         close $file;
24
25         is(fileset($filename, @$params), $result, $name)
26                 or diag(explain $input);
27 }
28
29 my $BASICBODY = "replace$/noremove$/remove$/.$/";
30
31 testfileset('no match',      $BASICBODY,    [undef, 'nomatch'], 0);
32 testfileset('remove string', $BASICBODY,    [undef, 'remove'],  1);
33 testfileset('remove empty',  "$/.$/ $/$/",  [undef, ''],        2);
34 testfileset('remove regex',  $BASICBODY,    [undef, qr/^re/],   2);
35 testfileset('remove all',    $BASICBODY,    [undef, qr/./],     4, '');
36
37 testfileset('add string',     "foo$/",      ['bar'],            1, "foo$/bar$/");
38 testfileset('keep string',    "foo$/bar$/", ['foo'],            0, "foo$/bar$/");
39 testfileset('replace string', "1$/2$/3$/",  [4, 1],             2, "2$/3$/4$/");
40 testfileset('replace all',    $BASICBODY,   ['', qr/^re/],      3, "noremove$/.$/$/");
41 testfileset('keep first',     "foo$/bar$/foo$/", ['foo'],       1, "foo$/bar$/");
42
43 is(remove_tree($target), 11, 'no unexpected files');
44