#!/bin/sh -e
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
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"
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"
PATH="$INST/bin:$PATH"; export PATH
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 -u "$OUTOK" "$OUT" > /dev/null; then
: no differences
else
cp "$OUT" "$ERR"
echo
echo "$1 output changed:"
diff -u "$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 md5sum gunzip 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 "."
run_one $f || failed=`expr $failed + 1`
tests=`expr $tests + 1`
done
echo
echo "Ran $tests tests, $failed failed."
if [ $failed -gt 0 ] ; then
exit 1
fi
exit 0