fileset: compare resulting data in tests
authorMischa POSLAWSKY <perl@shiar.org>
Thu, 19 Nov 2009 22:47:46 +0000 (23:47 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Wed, 2 Dec 2009 15:09:58 +0000 (16:09 +0100)
t/10-fileset.t

index c5a5709..dc800ef 100644 (file)
@@ -15,22 +15,39 @@ BEGIN { use_ok('File::Rewrite', 'fileset'); }
 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, '');