From: Mischa POSLAWSKY Date: Tue, 22 Nov 2022 00:29:18 +0000 (+0100) Subject: t/regress: perl conversion of file loop X-Git-Tag: v1.10~26 X-Git-Url: http://git.shiar.nl/barcat.git/commitdiff_plain/0b4ffa71d10be29d112ff539911be31d6f7fffd7 t/regress: perl conversion of file loop Outstanding cleanup of some extended shell scripting, easier to maintain as equivalent perl (especially considering comparison rewritten as cmddiff could be integrated to undo slowdown due to interpreter overhead). --- 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();