X-Git-Url: http://git.shiar.nl/barcat.git/blobdiff_plain/807f1103d68263f10a65d8bf7640f1401121f8b2..0b4ffa71d10be29d112ff539911be31d6f7fffd7:/t/regress.t diff --git a/t/regress.t b/t/regress.t index 177cc8d..7980b84 100755 --- a/t/regress.t +++ b/t/regress.t @@ -1,71 +1,54 @@ -#!/bin/sh - -cd "${0%/*}" || exit 1 - -test_count=0 -fail_count=0 - -colorize= -test -t 1 && colorize=1 -color () { - test -n "$colorize" && - printf '\33[%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 + }; } -for option in "$@" -do - case "$option" in - -*) echo "Usage: $0 [...]"; exit 64;; - esac -done - -params="${@:-t*.out}" -color 0\;36 -echo "1..$(echo $params | wc -w)" -color 0 - -for candidate in $params -do - test_count=$((test_count+1)) - file="${candidate%.out}" - name="$(echo ${file#*-} | tr _ \ )" - - if test -e "$file.out" - then - ./cmddiff "$file.out" - else - color 33 - echo "not ok $test_count - $name # TODO" - color 0 - continue - fi - - if test 0 != $? - then - case "$name" in - *' #TODO') - color 33 - ;; - *) - fail_count=$((fail_count+1)) - color 1\;31 - esac - - 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 - -exit $fail_count +done_testing();