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 #!/bin/sh
# A script that runs each unit test independently, with output HELP="Usage: ./runtests.py [-h] [-x] [flags] [tests]
# directed to a file in OUT/$T.out. If command line arguments are
# given, they are tests to run; otherwise every file named Runs each unit test independently, with output directed to a file in
# Lib/test/test_* is run (via regrtest). A summary of failing, OUT/<test>.out. If no tests are given, all tests are run; otherwise,
# passing and skipped tests is written to stdout and to the files only the specified tests are run, unless -x is also given, in which
# GOOD, BAD and SKIPPED. 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. # Reset PYTHONPATH to avoid alien influences on the tests.
unset PYTHONPATH unset PYTHONPATH
...@@ -25,20 +33,29 @@ mkdir -p OUT ...@@ -25,20 +33,29 @@ mkdir -p OUT
>BAD >BAD
>SKIPPED >SKIPPED
# The -u flag. # Process flags (transparently pass these on to regrtest.py)
UFLAG="" FLAGS=""
case $1 in EXCEPT=""
-u) while :
UFLAG="$1 $2"; shift; shift;; do
-u*) case $1 in
UFLAG="$1"; shift;; -h|--h|-help|--help) echo "$HELP"; exit;;
esac --) FLAGS="$FLAGS $1"; shift; break;;
-x) EXCEPT="$1"; shift;;
-*) FLAGS="$FLAGS $1"; shift;;
*) break;;
esac
done
# Compute the list of tests to run. # Compute the list of tests to run.
case $# in case "$#$EXCEPT" in
0) 0)
TESTS=`(cd Lib/test; ls test_*.py | sed 's/\.py//')` 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="$@" TESTS="$@"
;; ;;
...@@ -49,8 +66,8 @@ for T in $TESTS ...@@ -49,8 +66,8 @@ for T in $TESTS
do do
echo -n $T echo -n $T
if case $T in if case $T in
*curses*) echo; $PYTHON Lib/test/regrtest.py $UFLAG $T 2>OUT/$T.out;; *curses*) echo; $PYTHON Lib/test/regrtest.py $FLAGS $T 2>OUT/$T.out;;
*) $PYTHON Lib/test/regrtest.py $UFLAG $T >OUT/$T.out 2>&1;; *) $PYTHON Lib/test/regrtest.py $FLAGS $T >OUT/$T.out 2>&1;;
esac esac
then then
if grep -q "1 test skipped:" OUT/$T.out if grep -q "1 test skipped:" OUT/$T.out
...@@ -66,3 +83,6 @@ do ...@@ -66,3 +83,6 @@ do
echo $T >>BAD echo $T >>BAD
fi fi
done 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