t/regress: prepend commands to output files, cmddiff to compare
[barcat.git] / t / regress.t
index 734e42dbc876cc4864868db745c33728497ab71a..177cc8dfa1f22c0f99208e60d7fa104bcfcabdd9 100755 (executable)
@@ -5,54 +5,52 @@ 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' $@
-}
-regenerate=
-diffcmd () {
-       comm --nocheck-order --output-delimiter=::: -3 $@ |
-       perl -pe"END{exit !!\$.} s/^:::/$(color 31)>/ || s/^/$(color 32)</"
+       printf '\33[%sm' $@
 }
 
 for option in "$@"
 do
        case "$option" in
-       -G) regenerate=1 && shift;;
-       -*) echo "Usage: $0 [-G] [<files>...]"; exit 64;;
+       -*) echo "Usage: $0 [<files>...]"; exit 64;;
        esac
 done
 
-for candidate in ${@:-t*.in}
+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%.in}"
-       test -r "$file.in" || continue
-
+       file="${candidate%.out}"
        name="$(echo ${file#*-} | tr _ \ )"
-       set -- barcat "$file.in"
-       case "$name" in *\ -*) set -- "$@" "-${name#* -}";; esac
-       case "$name" in *' |'*)  set -- sh -c "\$0 \$1 $3" "$@";; esac
 
-       if test -n "$regenerate"
+       if test -e "$file.out"
        then
-               if test -e $file.sh
-               then
-                       echo "ok $test_count # skip $file.out"
-                       continue
-               fi
-               "$@" >$file.out 2>&1
+               ./cmddiff "$file.out"
        else
-               if test -e $file.out; then "$@" 2>&1 | diffcmd "$file.out" -; fi
+               color 33
+               echo "not ok $test_count - $name # TODO"
+               color 0
+               continue
        fi
 
        if test 0 != $?
        then
-               fail_count=$((fail_count+1))
-               color 1\;31
+               case "$name" in
+               *' #TODO')
+                       color 33
+                       ;;
+               *)
+                       fail_count=$((fail_count+1))
+                       color 1\;31
+               esac
+
                printf 'not '
        fi
        echo "ok $test_count - $name"
@@ -68,8 +66,6 @@ else
        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