7980b84bde4de1add470350e9d5bcc1f8a3caab8
[barcat.git] / t / regress.t
1 #!/usr/bin/env perl
2 use 5.014;
3 use warnings;
4 use re '/ms';
5 use Getopt::Long qw(2.32 :config gnu_getopt);
6 use Test::More;
7 use File::Basename;
8 use IPC::Run 'run';
9 use Data::Dump 'pp';
10
11 chdir dirname($0) or exit 1;
12
13 GetOptions(\my %opt,
14         'regenerate|G!',
15 ) or do {
16         say "Usage: $0 [-G] [<files>...]";
17         exit 64;  # EX_USAGE
18 };
19
20 local $ENV{COLUMNS} = 40;
21
22 my @params = @ARGV ? @ARGV : glob 't*.out';
23 plan(tests => int @params);
24
25 for my $candidate (@params) {
26         my $file = basename($candidate, '.out');
27         (my $name = $file =~ s/^[^-]*-//r) =~ tr/_/ /;
28         my $todo = $name =~ s/ #TODO$//;
29
30         my $diff;
31         if ($opt{regenerate}) {
32                 if (-e "$file.sh") {
33                         skip("$file.out", 1);
34                         next;
35                 }
36                 #run(\@run, '>&', "$file.out");
37         }
38         elsif (!-e "$file.out") {
39                 local $TODO = 'missing output';
40                 fail($name);
41                 next;
42         }
43         else {
44                 run(['./cmddiff', "$file.out"], '>', \$diff);
45         }
46
47         local $TODO = $todo ? ' ' : undef;
48         is($? >> 8, 0, $name) or do {
49                 #diag('command: ', pp(@run));
50                 diag($diff);  #TODO native
51         };
52 }
53
54 done_testing();