view tests/run-tests @ 2152:57729c56a23c

Show repo's revlog format on verify only if it doesn't match the default format. This makes it easier to run the tests with different revlog formats.
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Apr 2006 21:52:08 +0200
parents 15ec724ba351
children 278f9b13c39a
line wrap: on
line source

#!/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 install --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