#!/bin/bash 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." # Choose the Python binary. case `uname` in Darwin) PYTHON=./python.exe;; CYGWIN*) PYTHON=./python.exe;; *) PYTHON=./python;; esac PYTHON="$PYTHON -bb" # Unset PYTHONPATH, just to be sure. unset PYTHONPATH # Create the output directory if necessary. mkdir -p OUT # Empty the summary files. >GOOD >BAD >SKIPPED # 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 "$#$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="$@" ;; esac # Run the tests. for T in $TESTS do echo -n $T if case $T in *curses*) echo $PYTHON -E Lib/test/regrtest.py $FLAGS $T 2>OUT/$T.out ;; *) $PYTHON -E 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" echo $T >>SKIPPED else echo echo $T >>GOOD fi else echo " BAD" echo $T >>BAD fi done # Summarize results wc -l BAD GOOD SKIPPED