Commit 360f2f8b authored by Guido van Rossum's avatar Guido van Rossum

Make runtests.py a little more versatile: support -x, and arbitrary flags

to be passed to regrtest.py.  Also add -h for help, and summarize the
BAD/GOOD/SKIPPED files at the end.
parent c1e315d2
#!/bin/sh
# A script that runs each unit test independently, with output
# directed to a file in OUT/$T.out. If command line arguments are
# given, they are tests to run; otherwise every file named
# Lib/test/test_* is run (via regrtest). A summary of failing,
# passing and skipped tests is written to stdout and to the files
# GOOD, BAD and SKIPPED.
HELP="Usage: ./runtests.py [-h] [-x] [flags] [tests]
Runs each unit test independently, with output directed to a file in
OUT/<test>.out. If no tests are given, all tests are run; otherwise,
only the specified tests are run, unless -x is also given, in which
case all tests *except* those given are run.
Standard output shows the name of the tests run, with 'BAD' or
'SKIPPED' added if the test didn't produce a positive result. Also,
three files are created, named 'BAD', 'GOOD' and 'SKIPPED', to which
are written the names of the tests categorized by result.
Flags (arguments starting with '-') are passed transparently to
regrtest.py, except for -x, which is processed here."
# Reset PYTHONPATH to avoid alien influences on the tests.
unset PYTHONPATH
......@@ -25,20 +33,29 @@ mkdir -p OUT
>BAD
>SKIPPED
# The -u flag.
UFLAG=""
case $1 in
-u)
UFLAG="$1 $2"; shift; shift;;
-u*)
UFLAG="$1"; shift;;
esac
# Process flags (transparently pass these on to regrtest.py)
FLAGS=""
EXCEPT=""
while :
do
case $1 in
-h|--h|-help|--help) echo "$HELP"; exit;;
--) FLAGS="$FLAGS $1"; shift; break;;
-x) EXCEPT="$1"; shift;;
-*) FLAGS="$FLAGS $1"; shift;;
*) break;;
esac
done
# Compute the list of tests to run.
case $# in
case "$#$EXCEPT" in
0)
TESTS=`(cd Lib/test; ls test_*.py | sed 's/\.py//')`
;;
*-x)
PAT="^(`echo $@ | sed 's/\.py//' | sed 's/ /|/'`)$"
TESTS=`(cd Lib/test; ls test_*.py | sed 's/\.py//' | egrep -v "$PAT")`
;;
*)
TESTS="$@"
;;
......@@ -49,20 +66,23 @@ for T in $TESTS
do
echo -n $T
if case $T in
*curses*) echo; $PYTHON Lib/test/regrtest.py $UFLAG $T 2>OUT/$T.out;;
*) $PYTHON Lib/test/regrtest.py $UFLAG $T >OUT/$T.out 2>&1;;
*curses*) echo; $PYTHON Lib/test/regrtest.py $FLAGS $T 2>OUT/$T.out;;
*) $PYTHON Lib/test/regrtest.py $FLAGS $T >OUT/$T.out 2>&1;;
esac
then
if grep -q "1 test skipped:" OUT/$T.out
then
echo " SKIPPED"
if grep -q "1 test skipped:" OUT/$T.out
then
echo " SKIPPED"
echo $T >>SKIPPED
else
echo
else
echo
echo $T >>GOOD
fi
fi
else
echo " BAD"
echo " BAD"
echo $T >>BAD
fi
done
# Summarize results
wc -l BAD GOOD SKIPPED
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment