From 360f2f8be3b66741c4ead2dd86aee4cee74f5709 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 20 Aug 2007 20:17:57 +0000 Subject: 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. --- runtests.sh | 68 +++++++++++++++++++++++++++++++++++++++---------------------- 1 file 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/.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 -- cgit v0.12