blob: 45edfc0a673d8b8aaf530ce9fd1cef3e0383b60d [file] [log] [blame]
#!/bin/sh
#
# eval_oneprogram.sh [-h][-lk] <program> [<program_args>]
#
# CALLED BY: eval_suite.sh
#
#
# Runs <program> and reports how many instances of the strings SUCCESS
# or FAILED occur.
#
#
# FIX Output from $PROGRAM on stderr is separated out and comes first.
#
#
USAGE_LONG='
#
# -h Help.
# -k Save the program output in "__<program_args>__<pid>o".
# -l Long form. (Short form by default.)
#
# <program> is the executable to run and collect the output of.
'
USAGE="Usage: `basename $0` [-h][-lk] <program>"
#------------------------------------ -o-
# Globals.
#
AWKFILE="_`basename $0`$$.awk"
SCRIPTFILE=
dolongform=0
dokeepoutput=
TOTALFAILED=0
#------------------------------------ -o-
# Parse & setup.
#
while [ -n "$1" ]; do
case "$1" in
-k) dokeepoutput=true
;;
-l) dolongform=1
;;
-h) echo $USAGE
cat <<BLIK | sed 's/^#//' | sed '1d' 1>&2
$USAGE_LONG
BLIK
exit 0
;;
*) PROGRAM="$*"
shift `expr $# - 1`
;;
esac
shift
done
[ -z "$PROGRAM" ] && echo $USAGE && exit 1
SCRIPTFILE="__`echo \`basename $PROGRAM\` | sed 's/ /_/g'`__$$o"
#------------------------------------ -o-
# Create awk script.
#
cat <<GRONK >$AWKFILE
BEGIN {
pass = 0
passlist[0] = ""
fail = 0
faillist[0] = ""
longform = $dolongform + 0
}
/SUCCESS/ {
passlist[pass] = \$0
pass += 1
}
/FAILED/ {
faillist[fail] = \$0
fail += 1
}
END {
printf "$PROGRAM SUCCESS: %d\n", pass
printf "$PROGRAM FAILED: %d\n", fail
if (longform) {
printf "\n"
for (i=0; i<pass; i++)
print passlist[i]
for (i=0; i<fail; i++)
print faillist[i]
}
exit fail
}
GRONK
#------------------------------------ -o-
# Get and print results.
#
{ $PROGRAM $* 2>&1 ; } >$SCRIPTFILE
awk -f $AWKFILE $SCRIPTFILE
TOTALFAILED=$?
rm -f $AWKFILE
[ -z "$dokeepoutput" ] && rm -f $SCRIPTFILE
#------------------------------------ -o-
# Exit, cleanup.
#
exit $TOTALFAILED