| #!/bin/bash |
| |
| 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." |
| |
| # Choose the Python binary. |
| case `uname` in |
| Darwin) PYTHON=./python.exe;; |
| CYGWIN*) PYTHON=./python.exe;; |
| *) PYTHON=./python;; |
| esac |
| |
| # 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 |