t: test result of "remove regex"
[perl/file-rewrite.git] / t / 10-fileset.t
index dc800efa2a424d06c1605730c998e9771cfabfd0..ff43498731a4f4868cdf640fdab8b7d7832b7c7f 100644 (file)
@@ -3,14 +3,14 @@
 use strict;
 use warnings;
 
-use Test::More tests => 13;
+use Test::More tests => 21;
 use Test::NoWarnings;
 
 use autodie;
 use File::Temp qw(tempdir);
 use File::Path qw(remove_tree);
 
-BEGIN { use_ok('File::Rewrite', 'fileset'); }
+BEGIN { use_ok('File::Rewrite', 'fileset') or BAIL_OUT('No fileset()'); }
 
 my $target = tempdir();
 
@@ -32,11 +32,13 @@ sub testfileset {
                if ($compare ne $output) {
                        fail($name);
                        diag(sprintf(
-                               'output mismatch (got %d of %d lines with return value %s)',
+                               '  Output mismatch (got %d of %d lines with return value %s)',
                                $output =~ tr/\n//,
                                $compare =~ tr/\n//,
                                explain($result),
                        ));
+                       diag('         got: "', join('\n', split $/, $output ), '"');
+                       diag('    expected: "', join('\n', split $/, $compare), '"');
                        return;
                }
        }
@@ -45,17 +47,28 @@ sub testfileset {
 
 my $BASICBODY = "replace$/noremove$/remove$/.$/";
 
-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('no match',      $BASICBODY,    ['no'      => undef], 0, $BASICBODY);
+testfileset('remove string', $BASICBODY,    ['remove'  => undef], 1, "replace$/noremove$/.$/");
+testfileset('remove empty',  "$/.$/ $/$/",  [''        => undef], 2, ".$/ $/");
+testfileset('remove regex',  $BASICBODY,    [qr/^re/   => undef], 2, "noremove$/.$/");
+testfileset('remove all',    $BASICBODY,    [qr/./     => undef], 4, '');
 
+testfileset('add unconditionally', "$/0$/", [undef()   => '0'], 1, "$/0$/0$/");
 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$/");
+testfileset('keep first',     "foo$/FOO$/foo$/", ['foo'],       1, "foo$/FOO$/");
+testfileset('replace string', "$/0$/1$/2$/", [0 => 3],          2, "$/1$/2$/3$/");
+testfileset('keep regex',     "foo$/hi$/$/", [qr/./ => 'hi'],   1, "hi$/$/");
 
-is(remove_tree($target), 11, 'no unexpected files');
+testfileset('add new array',  ".$/",        ['' => ['foo','.']],  2, ".$/foo$/.$/");
+testfileset('replace by array', "$/foo$/.$/", ['' => ['foo','']], 3, "foo$/.$/foo$/$/");
+testfileset('partial add',    "foo$/$/",    ['foo' => ['foo','.']], 1, "foo$/$/.$/");
+
+my $SAMPLE2 = "$/foo$/and$/bar$/.$/";
+testfileset('keep pair',      $SAMPLE2, [['foo','bar']], 0, $SAMPLE2);
+testfileset('keep order',     $SAMPLE2, [['bar','foo']], 2, "$/and$/bar$/.$/foo$/");
+testfileset('replace pair',   $SAMPLE2, [['bar','foo'] => ['fooo','barr']], 4, "$/and$/.$/fooo$/barr$/");
+testfileset('mixed arrays',   $SAMPLE2, [['ignore',qr/a/] => ['bar','foo','.']], 3, "$/foo$/bar$/.$/foo$/.$/");
+
+is(remove_tree($target), 19, 'no unexpected files');