From 0d917e0587c28df2f7012da83833c0c80346021d Mon Sep 17 00:00:00 2001 From: Wolfram Schneider Date: Wed, 19 Jun 1996 00:44:44 +0000 Subject: [PATCH] Add a better TEST script. I was surprised how much can be wrong with program test(1) or builtin test(1). --- bin/test/TEST.README | 24 ++++++++++ bin/test/TEST.sh | 109 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 bin/test/TEST.README create mode 100644 bin/test/TEST.sh diff --git a/bin/test/TEST.README b/bin/test/TEST.README new file mode 100644 index 000000000000..6a997593cda0 --- /dev/null +++ b/bin/test/TEST.README @@ -0,0 +1,24 @@ +# $Id: $ + +OS/shell syntax error failed +-------------------------------------------------------------------- +bash 1.14.5 3 0 +pdksh 5.2.5 7 0 +zsh 2.6-beta17 6 4 +FreeBSD 2.1 /bin/test 8 0 +IRIX 5.3 ksh 3 0 +IRIX 5.3 sh 3 0 +IRIX 5.3 /usr/bin/test 11 3 +SunOS 5.4 ksh 3 0 +SunOS 5.4 sh 3 0 +SunOS 5.4 /usr/ucb/test 3 0 +SunOS 5.5 ksh 0 0 +SunOS 5.5 sh 3 0 +SunOS 5.5 /usr/ucb/test 3 0 +SunOP 4.1.3_U1 sh 3 0 +SunOP 4.1.3_U1 /usr/bin/test 3 0 +ULTRIX 4.2 /bin/test 9 0 +ULTRIX 4.2 ksh 1 0 +ULTRIX 4.2 sh5 4 0 + +96/06/16 diff --git a/bin/test/TEST.sh b/bin/test/TEST.sh new file mode 100644 index 000000000000..77854ff6d3e8 --- /dev/null +++ b/bin/test/TEST.sh @@ -0,0 +1,109 @@ +#!/bin/sh +# (c) Wolfram Schneider, Berlin. June 1996. Public domain. +# +# TEST.sh - check if test(1) or builtin test works +# +# $Id: $ + +# force a specified test program, e.g. `env test=/bin/test sh TEST.sh' +: ${test=test} + +ERROR=0 FAILED=0 + +t () +{ + # $1 -> exit code + # $2 -> $test expression + + echo -n "$test $2 " + + # check for syntax errors + syntax="`eval $test $2 2>&1`" + if test -z "$syntax"; then + + case $1 in + 0) if eval $test $2; then echo " OK"; else failed;fi;; + 1) if eval $test $2; then failed; else echo " OK";fi;; + esac + + else + error + fi +} + +error () +{ + echo ""; echo " $syntax" + ERROR=`expr $ERROR + 1` +} + +failed () +{ + echo ""; echo " failed" + FAILED=`expr $FAILED + 1` +} + + +t 0 'b = b' +t 1 'b != b' +t 0 '\( b = b \)' +t 1 '! \( b = b \)' +t 1 '! -f /etc/passwd' + +t 0 '-h = -h' +t 0 '-o = -o' + +t 1 '-f = h' +t 1 '-h = f' +t 1 '-o = f' +t 1 'f = -o' +t 0 '\( -h = -h \)' +t 1 '\( a = -h \)' +t 1 '\( -f = h \)' + + +t 1 '\( -f = h \)' + +t 0 '-h = -h -o a' +t 0 '\( -h = -h \) -o 1' + +t 0 '-h = -h -o -h = -h' +t 0 '\( -h = -h \) -o \( -h = -h \)' + +t 0 '-d /' +t 0 '-d / -a a != b' +t 1 '-z "-z"' +t 0 '-n -n' +t 0 '0 -eq 0' +t 0 '\( 0 -eq 0 \)' +t 1 '1 -eq 0 -o a = a -a 1 -eq 0 -o a = aa' + +t 0 '0' +t 0 '\( 0 \)' +t 0 '-E' +t 0 '-X -a -X' +t 0 '-XXX' +t 0 '\( -E \)' +t 0 'true -o X' +t 0 'true -o -X' +t 0 '\( \( \( a = a \) -o 1 \) -a 1 \) -a true' +t 1 '-h /' +t 0 '-r /' +t 1 '-w /' +t 0 '-x /bin/sh' +t 0 '-c /dev/null' +t 0 '-b /dev/fd0a -o -b /dev/rfd0a -o true' +t 0 '-f /etc/passwd' +t 0 '-s /etc/passwd' +t 1 '! \( 700 -le 1000 -a -n "1" -a "20" = "20" \)' +t 0 '100 -eq 100' +t 0 '100 -lt 200' +t 1 '1000 -lt 200' +t 0 '1000 -gt 200' +t 0 '1000 -ge 200' +t 0 '1000 -ge 1000' +t 1 '2 -ne 2' + +echo "" +echo "Syntax errors: $ERROR Failed: $FAILED" +