use strict;
use warnings;
-use Test::More tests => 8;
+use Test::More tests => 13;
use Test::NoWarnings;
use autodie;
my $target = tempdir();
sub testfileset {
- my ($name, $input, $params, $result) = @_;
+ my ($name, $input, $params, $expect, $compare) = @_;
my $filename = "$target/$name";
open my $file, '>', $filename;
print {$file} $input;
close $file;
- is(fileset($filename, @$params), $result, $name)
- or diag(explain $input);
+ my $result = eval { fileset($filename, @$params) };
+ if (defined $result and defined $compare) {
+ my $output = eval {
+ local $/;
+ open my $confirm, '<', $filename;
+ readline $confirm;
+ };
+ if ($compare ne $output) {
+ fail($name);
+ diag(sprintf(
+ 'output mismatch (got %d of %d lines with return value %s)',
+ $output =~ tr/\n//,
+ $compare =~ tr/\n//,
+ explain($result),
+ ));
+ return;
+ }
+ }
+ is($result, $expect, $name);
}
my $BASICBODY = "replace$/noremove$/remove$/.$/";
-testfileset('no match', $BASICBODY, [undef, 'nomatch'], 0);
-testfileset('remove string', $BASICBODY, [undef, 'remove'], 1);
-testfileset('remove empty', "$/.$/ $/$/", [undef, ''], 2);
+testfileset('no match', $BASICBODY, [undef, 'nomatch'], 0, $BASICBODY);
+testfileset('remove string', $BASICBODY, [undef, 'remove'], 1, "replace$/noremove$/.$/");
+testfileset('remove empty', "$/.$/ $/$/", [undef, ''], 2, ".$/ $/");
testfileset('remove regex', $BASICBODY, [undef, qr/^re/], 2);
-testfileset('remove all', $BASICBODY, [undef, qr/./], 4);
+testfileset('remove all', $BASICBODY, [undef, qr/./], 4, '');
-is(remove_tree($target), 6, 'no unexpected files');
+testfileset('add string', "foo$/", ['bar'], 1, "foo$/bar$/");
+testfileset('keep string', "foo$/bar$/", ['foo'], 0, "foo$/bar$/");
+testfileset('replace string', "1$/2$/3$/", [4, 1], 2, "2$/3$/4$/");
+testfileset('replace all', $BASICBODY, ['', qr/^re/], 3, "noremove$/.$/$/");
+testfileset('keep first', "foo$/bar$/foo$/", ['foo'], 1, "foo$/bar$/");
+
+is(remove_tree($target), 11, 'no unexpected files');