run-tests
139 lines
| 2.8 KiB
| text/plain
|
TextLexer
/ tests / run-tests
|
r544 | #!/bin/sh -e | ||
|
r331 | |||
|
r798 | 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 | ||||
|
r488 | |||
|
r489 | umask 022 | ||
|
r331 | tests=0 | ||
failed=0 | ||||
|
r798 | |||
HGTMP="" | ||||
cleanup_exit() { | ||||
rm -rf "$HGTMP" | ||||
} | ||||
# Remove temporary files even if we get interrupted | ||||
|
r835 | trap "cleanup_exit" 0 # normal exit | ||
trap "exit 255" 1 2 3 6 15 # HUP INT QUIT ABRT TERM | ||||
|
r798 | |||
HGTMP="${TMPDIR-/tmp}/hgtests.$RANDOM.$RANDOM.$RANDOM.$$" | ||||
(umask 077 && mkdir "$HGTMP") || { | ||||
echo "Could not create temporary directory! Exiting." 1>&2 | ||||
exit 1 | ||||
} | ||||
TESTDIR="$PWD" | ||||
INST="$HGTMP/install" | ||||
|
r1558 | PYTHONDIR="$INST/lib/python" | ||
|
r397 | cd .. | ||
|
r1558 | if ${PYTHON-python} setup.py install --home="$INST" \ | ||
--install-lib="$PYTHONDIR" > tests/install.err 2>&1 | ||||
|
r798 | then | ||
rm tests/install.err | ||||
else | ||||
|
r398 | cat tests/install.err | ||
|
r835 | exit 1 | ||
|
r398 | fi | ||
|
r798 | cd "$TESTDIR" | ||
|
r397 | |||
|
r798 | PATH="$INST/bin:$PATH"; export PATH | ||
|
r1558 | PYTHONPATH="$PYTHONDIR"; export PYTHONPATH | ||
|
r798 | |||
run_one() { | ||||
rm -f "$1.err" | ||||
|
r331 | |||
|
r798 | mkdir "$HGTMP/$1" | ||
cd "$HGTMP/$1" | ||||
|
r331 | fail=0 | ||
|
r798 | HOME="$HGTMP/$1"; export HOME | ||
OUT="$HGTMP/$1.out" | ||||
OUTOK="$TESTDIR/$1.out" | ||||
ERR="$TESTDIR/$1.err" | ||||
|
r362 | |||
|
r798 | if "$TESTDIR/$1" > "$OUT" 2>&1; then | ||
|
r803 | : no error | ||
|
r798 | else | ||
echo "$1 failed with error code $?" | ||||
|
r331 | fail=1 | ||
fi | ||||
|
r362 | |||
|
r798 | if [ -s "$OUT" -a ! -s "$OUTOK" ] ; then | ||
cp "$OUT" "$ERR" | ||||
echo | ||||
echo "$1 generated unexpected output:" | ||||
cat "$ERR" | ||||
|
r331 | fail=1 | ||
|
r798 | elif [ -r "$OUTOK" ]; then | ||
|
r803 | if diff -u "$OUTOK" "$OUT" > /dev/null; then | ||
: no differences | ||||
else | ||||
|
r833 | cp "$OUT" "$ERR" | ||
echo | ||||
echo "$1 output changed:" | ||||
diff -u "$OUTOK" "$ERR" || true | ||||
fail=1 | ||||
|
r803 | fi | ||
|
r331 | fi | ||
|
r798 | cd "$TESTDIR" | ||
rm -f "$HGTMP/$1.out" | ||||
rm -rf "$HGTMP/$1" | ||||
|
r362 | return $fail | ||
} | ||||
|
r331 | |||
|
r1308 | # list of prerequisite programs | ||
|
r1279 | # stuff from coreutils (cat, rm, etc) are not tested | ||
prereqs="python merge diff grep unzip md5sum gunzip sed" | ||||
missing='' | ||||
for pre in $prereqs ; do | ||||
if type $pre > /dev/null 2>&1 ; then | ||||
: prereq exists | ||||
|
r1308 | else | ||
|
r1279 | 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 | ||||
|
r804 | TESTS="$*" | ||
|
r798 | if [ -z "$TESTS" ] ; then | ||
|
r804 | TESTS=`ls test-* | grep -v "[.~]"` | ||
|
r362 | fi | ||
for f in $TESTS ; do | ||||
echo -n "." | ||||
|
r804 | run_one $f || failed=`expr $failed + 1` | ||
tests=`expr $tests + 1` | ||||
|
r331 | done | ||
echo | ||||
|
r804 | echo "Ran $tests tests, $failed failed." | ||
|
r331 | |||
if [ $failed -gt 0 ] ; then | ||||
|
r835 | exit 1 | ||
|
r331 | fi | ||
|
r835 | exit 0 | ||