X-Git-Url: http://git.shiar.nl/barcat.git/blobdiff_plain/2f41dadf7f9a08522a7e84cfd28f847fd1428366..0b4ffa71d10be29d112ff539911be31d6f7fffd7:/t/regress.t diff --git a/t/regress.t b/t/regress.t index b8d05dd..7980b84 100755 --- a/t/regress.t +++ b/t/regress.t @@ -1,75 +1,54 @@ -#!/bin/sh - -cd "${0%/*}" || exit 1 - -test_count=0 -fail_count=0 - -COLUMNS=40 -colorize= -test -t 1 && colorize=1 -color () { - test -n "$colorize" && - printf '\e[%sm' $@ +#!/usr/bin/env perl +use 5.014; +use warnings; +use re '/ms'; +use Getopt::Long qw(2.32 :config gnu_getopt); +use Test::More; +use File::Basename; +use IPC::Run 'run'; +use Data::Dump 'pp'; + +chdir dirname($0) or exit 1; + +GetOptions(\my %opt, + 'regenerate|G!', +) or do { + say "Usage: $0 [-G] [...]"; + exit 64; # EX_USAGE +}; + +local $ENV{COLUMNS} = 40; + +my @params = @ARGV ? @ARGV : glob 't*.out'; +plan(tests => int @params); + +for my $candidate (@params) { + my $file = basename($candidate, '.out'); + (my $name = $file =~ s/^[^-]*-//r) =~ tr/_/ /; + my $todo = $name =~ s/ #TODO$//; + + my $diff; + if ($opt{regenerate}) { + if (-e "$file.sh") { + skip("$file.out", 1); + next; + } + #run(\@run, '>&', "$file.out"); + } + elsif (!-e "$file.out") { + local $TODO = 'missing output'; + fail($name); + next; + } + else { + run(['./cmddiff', "$file.out"], '>', \$diff); + } + + local $TODO = $todo ? ' ' : undef; + is($? >> 8, 0, $name) or do { + #diag('command: ', pp(@run)); + diag($diff); #TODO native + }; } -regenerate= -diffcmd () { - comm --nocheck-order --output-delimiter=::: -3 $@ | - perl -pe"END{exit !!\$.} s/^:::/$(color 31)>/ || s/^/$(color 32)...]"; exit 64;; - esac -done - -for candidate in ${@:-t*.in} -do - test_count=$((test_count+1)) - file="${candidate%.in}" - test -r "$file.in" || continue - - name="$(echo ${file#*-} | tr _ \ )" - cmd="barcat $file.in" - case "$name" in *\ -*) cmd="$cmd -${name#* -}";; esac - - if test -n "$regenerate" - then - if test -e $file.sh - then - echo "ok $test_count # skip $file.out" - continue - fi - $cmd >$file.out 2>&1 - else - if test -e $file.sh; then $cmd 2>&1 | ./$file.sh; fi && - if test -e $file.out; then $cmd 2>&1 | diffcmd "$file.out" -; fi - fi - - if test 0 != $? - then - fail_count=$((fail_count+1)) - color 1\;31 - printf 'not ' - fi - echo "ok $test_count - $name" - color 0 -done - -if test $fail_count = 0 -then - color 32 - echo "# passed all $test_count test(s)" -else - color 31 - echo "# failed $fail_count among $test_count test(s)" - fail_count=1 # exit code -fi -color 0\;36 -echo "1..$test_count" -color 0 -exit $fail_count +done_testing();