summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2007-08-20 20:17:57 (GMT)
committerGuido van Rossum <guido@python.org>2007-08-20 20:17:57 (GMT)
commit360f2f8be3b66741c4ead2dd86aee4cee74f5709 (patch)
tree7a7fa93e077f2808cc293c158a6d432d1cf75321
parentc1e315d2b0df6d647d19a0cd25d6a4b964db1eb2 (diff)
downloadcpython-360f2f8be3b66741c4ead2dd86aee4cee74f5709.zip
cpython-360f2f8be3b66741c4ead2dd86aee4cee74f5709.tar.gz
cpython-360f2f8be3b66741c4ead2dd86aee4cee74f5709.tar.bz2
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.
-rwxr-xr-xruntests.sh68
1 files changed, 44 insertions, 24 deletions
diff --git a/runtests.sh b/runtests.sh
index adaa2fc..5d31276 100755
--- a/runtests.sh
+++ b/runtests.sh
@@ -1,11 +1,19 @@
#!/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