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