diff --git a/MANIFEST.in b/MANIFEST.in --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,7 +2,7 @@ include hg recursive-include mercurial *.py include hgweb.cgi hgwebdir.cgi include hgeditor rewrite-log -include tests/README tests/run-tests tests/md5sum.py tests/test-*[a-z0-9] tests/*.out +include tests/README tests/run-tests.py tests/md5sum.py tests/test-*[a-z0-9] tests/*.out prune tests/*.err include *.txt include templates/map templates/map-*[a-z0-9] diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -16,10 +16,10 @@ dist: tests doc TAR_OPTIONS="--owner=root --group=root --mode=u+w,go-w,a+rX-s" $(PYTHON) setup.py sdist --force-manifest tests: - cd tests && ./run-tests + cd tests && $(PYTHON) run-tests.py test-%: - cd tests && ./run-tests $@ + cd tests && $(PYTHON) run-tests.py $@ doc: $(MAKE) -C doc diff --git a/tests/README b/tests/README --- a/tests/README +++ b/tests/README @@ -3,7 +3,7 @@ A simple testing framework To run the tests, do: cd tests/ -./run-tests +python run-tests.py This finds all scripts in the test directory named test-* and executes them. The scripts can be either shell scripts or Python. Each test is diff --git a/tests/run-tests b/tests/run-tests deleted file mode 100755 --- a/tests/run-tests +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/sh -e -# -# environment variables: -# -# TEST_COVERAGE - set non-empty if you want to print test coverage report -# COVERAGE_STDLIB - set non-empty to report coverage of standard library - -LANG="C"; export LANG -LC_CTYPE="C"; export LC_CTYPE -LC_NUMERIC="C"; export LC_NUMERIC -LC_TIME="C"; export LC_TIME -LC_COLLATE="C"; export LC_COLLATE -LC_MONETARY="C"; export LC_MONETARY -LC_MESSAGES="C"; export LC_MESSAGES -LC_PAPER="C"; export LC_PAPER -LC_NAME="C"; export LC_NAME -LC_ADDRESS="C"; export LC_ADDRESS -LC_TELEPHONE="C"; export LC_TELEPHONE -LC_MEASUREMENT="C"; export LC_MEASUREMENT -LC_IDENTIFICATION="C"; export LC_IDENTIFICATION -LC_ALL=""; export LC_ALL -TZ=GMT; export TZ -HGEDITOR=true; export HGEDITOR -HGMERGE=true; export HGMERGE -HGUSER="test"; export HGUSER -HGRCPATH=""; export HGRCPATH -OS=`uname` - -case "$OS" in - HP-UX|SunOS) - DIFFOPTS= - ;; - *) - DIFFOPTS=-u - ;; -esac - -if [ `echo -n HG` = "-n HG" ] -then - ECHO_N=echo - NNL="\c" -else - ECHO_N="echo -n" - NNL= -fi - -umask 022 - -tests=0 -failed=0 - -HGTMP="" -cleanup_exit() { - rm -rf "$HGTMP" -} - -# Remove temporary files even if we get interrupted -trap "cleanup_exit" 0 # normal exit -trap "exit 255" 1 2 3 6 15 # HUP INT QUIT ABRT TERM - -HGTMP="${TMPDIR-/tmp}/hgtests.$RANDOM.$RANDOM.$RANDOM.$$" -(umask 077 && mkdir "$HGTMP") || { - echo "Could not create temporary directory! Exiting." 1>&2 - exit 1 -} - -TESTDIR="`pwd`" -export TESTDIR -INST="$HGTMP/install" -PYTHONDIR="$INST/lib/python" -cd .. -if ${PYTHON-python} setup.py clean --all install --force --home="$INST" \ - --install-lib="$PYTHONDIR" > tests/install.err 2>&1 -then - rm tests/install.err -else - cat tests/install.err - exit 1 -fi -cd "$TESTDIR" - -BINDIR="$INST/bin"; export BINDIR -if [ -n "$TEST_COVERAGE" ]; then - COVERAGE_FILE="$TESTDIR/.coverage"; export COVERAGE_FILE - rm -f "$COVERAGE_FILE" - mv "$BINDIR/hg" "$BINDIR/hg.py" - { - echo '#!/bin/sh' - echo "exec \"${PYTHON-python}\" \"$TESTDIR/coverage.py\"" \ - "-x \"$BINDIR/hg.py\" \"\$@\"" - } > "$BINDIR/hg" - chmod 700 "$BINDIR/hg" -fi - -PATH="$BINDIR:$PATH"; export PATH -if [ -n "$PYTHON" ]; then - { - echo "#!/bin/sh" - echo "exec \"$PYTHON"'" "$@"' - } > "$BINDIR/python" - chmod 755 "$BINDIR/python" -fi - -PYTHONPATH="$PYTHONDIR"; export PYTHONPATH - -run_one() { - rm -f "$1.err" - - mkdir "$HGTMP/$1" - cd "$HGTMP/$1" - fail=0 - HOME="$HGTMP/$1"; export HOME - OUT="$HGTMP/$1.out" - OUTOK="$TESTDIR/$1.out" - ERR="$TESTDIR/$1.err" - - if "$TESTDIR/$1" > "$OUT" 2>&1; then - : no error - else - echo "$1 failed with error code $?" - fail=1 - fi - - if [ -s "$OUT" -a ! -s "$OUTOK" ] ; then - cp "$OUT" "$ERR" - echo - echo "$1 generated unexpected output:" - cat "$ERR" - fail=1 - elif [ -r "$OUTOK" ]; then - if diff $DIFFOPTS "$OUTOK" "$OUT" > /dev/null; then - : no differences - else - cp "$OUT" "$ERR" - echo - echo "$1 output changed:" - diff $DIFFOPTS "$OUTOK" "$ERR" || true - fail=1 - fi - fi - - cd "$TESTDIR" - rm -f "$HGTMP/$1.out" - rm -rf "$HGTMP/$1" - return $fail -} - -# list of prerequisite programs -# stuff from coreutils (cat, rm, etc) are not tested -prereqs="python merge diff grep unzip gunzip bunzip2 sed" -missing='' -for pre in $prereqs ; do - if type $pre > /dev/null 2>&1 ; then - : prereq exists - else - missing="$pre $missing" - fi -done - -if [ "$missing" != '' ] ; then - echo "ERROR: the test suite needs some programs to execute correctly." - echo "The following programs are missing: " - for pre in $missing; do - echo " $pre" - done - exit 1 -fi - -TESTS="$*" -if [ -z "$TESTS" ] ; then - TESTS=`ls test-* | grep -v "[.~]"` -fi - -for f in $TESTS ; do - $ECHO_N ".${NNL}" - run_one $f || failed=`expr $failed + 1` - tests=`expr $tests + 1` -done - -echo -echo "Ran $tests tests, $failed failed." - -if [ -n "$TEST_COVERAGE" ]; then - unset PYTHONPATH - $ECHO_N "$BINDIR,$TESTDIR,$HGTMP/test-," > "$HGTMP/omit" - if [ -z "$COVERAGE_STDLIB" ]; then - "${PYTHON-python}" -c 'import sys; print ",".join(sys.path)' \ - >> "$HGTMP/omit" - fi - cd "$PYTHONDIR" - "${PYTHON-python}" "$TESTDIR/coverage.py" -r --omit="`cat \"$HGTMP/omit\"`" -fi - -if [ $failed -gt 0 ] ; then - exit 1 -fi -exit 0