run-tests
187 lines
| 4.0 KiB
| text/plain
|
TextLexer
/ tests / run-tests
Thomas Arendsen Hein
|
r544 | #!/bin/sh -e | ||
Vadim Gelfer
|
r2068 | # | ||
# 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 | ||||
mpm@selenic.com
|
r331 | |||
Thomas Arendsen Hein
|
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 | ||||
Vadim Gelfer
|
r1951 | HGRCPATH=""; export HGRCPATH | ||
mpm@selenic.com
|
r488 | |||
Thomas Arendsen Hein
|
r2023 | if [ `echo -n HG` = "-n HG" ] | ||
TK Soh
|
r1952 | then | ||
ECHO_N=echo | ||||
NNL="\c" | ||||
else | ||||
ECHO_N="echo -n" | ||||
NNL= | ||||
fi | ||||
Peter van Dijk
|
r1925 | |||
mpm@selenic.com
|
r489 | umask 022 | ||
mpm@selenic.com
|
r331 | tests=0 | ||
failed=0 | ||||
Thomas Arendsen Hein
|
r798 | |||
HGTMP="" | ||||
cleanup_exit() { | ||||
rm -rf "$HGTMP" | ||||
} | ||||
# Remove temporary files even if we get interrupted | ||||
Thomas Arendsen Hein
|
r835 | trap "cleanup_exit" 0 # normal exit | ||
trap "exit 255" 1 2 3 6 15 # HUP INT QUIT ABRT TERM | ||||
Thomas Arendsen Hein
|
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" | ||||
Peter van Dijk
|
r1923 | export TESTDIR | ||
Thomas Arendsen Hein
|
r798 | INST="$HGTMP/install" | ||
Robin Farine
|
r1558 | PYTHONDIR="$INST/lib/python" | ||
mpm@selenic.com
|
r397 | cd .. | ||
Robin Farine
|
r1558 | if ${PYTHON-python} setup.py install --home="$INST" \ | ||
--install-lib="$PYTHONDIR" > tests/install.err 2>&1 | ||||
Thomas Arendsen Hein
|
r798 | then | ||
rm tests/install.err | ||||
else | ||||
mpm@selenic.com
|
r398 | cat tests/install.err | ||
Thomas Arendsen Hein
|
r835 | exit 1 | ||
mpm@selenic.com
|
r398 | fi | ||
Thomas Arendsen Hein
|
r798 | cd "$TESTDIR" | ||
mpm@selenic.com
|
r397 | |||
Vadim Gelfer
|
r2068 | 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 | ||||
Thomas Arendsen Hein
|
r1878 | PATH="$BINDIR:$PATH"; export PATH | ||
if [ -n "$PYTHON" ]; then | ||||
{ | ||||
echo "#!/bin/sh" | ||||
echo "exec \"$PYTHON"'" "$@"' | ||||
} > "$BINDIR/python" | ||||
chmod 755 "$BINDIR/python" | ||||
fi | ||||
Robin Farine
|
r1558 | PYTHONPATH="$PYTHONDIR"; export PYTHONPATH | ||
Thomas Arendsen Hein
|
r798 | |||
run_one() { | ||||
rm -f "$1.err" | ||||
mpm@selenic.com
|
r331 | |||
Thomas Arendsen Hein
|
r798 | mkdir "$HGTMP/$1" | ||
cd "$HGTMP/$1" | ||||
mpm@selenic.com
|
r331 | fail=0 | ||
Thomas Arendsen Hein
|
r798 | HOME="$HGTMP/$1"; export HOME | ||
OUT="$HGTMP/$1.out" | ||||
OUTOK="$TESTDIR/$1.out" | ||||
ERR="$TESTDIR/$1.err" | ||||
mpm@selenic.com
|
r362 | |||
Thomas Arendsen Hein
|
r798 | if "$TESTDIR/$1" > "$OUT" 2>&1; then | ||
Thomas Arendsen Hein
|
r803 | : no error | ||
Thomas Arendsen Hein
|
r798 | else | ||
echo "$1 failed with error code $?" | ||||
mpm@selenic.com
|
r331 | fail=1 | ||
fi | ||||
mpm@selenic.com
|
r362 | |||
Thomas Arendsen Hein
|
r798 | if [ -s "$OUT" -a ! -s "$OUTOK" ] ; then | ||
cp "$OUT" "$ERR" | ||||
echo | ||||
echo "$1 generated unexpected output:" | ||||
cat "$ERR" | ||||
mpm@selenic.com
|
r331 | fail=1 | ||
Thomas Arendsen Hein
|
r798 | elif [ -r "$OUTOK" ]; then | ||
Thomas Arendsen Hein
|
r803 | if diff -u "$OUTOK" "$OUT" > /dev/null; then | ||
: no differences | ||||
else | ||||
Thomas Arendsen Hein
|
r833 | cp "$OUT" "$ERR" | ||
echo | ||||
echo "$1 output changed:" | ||||
diff -u "$OUTOK" "$ERR" || true | ||||
fail=1 | ||||
Thomas Arendsen Hein
|
r803 | fi | ||
mpm@selenic.com
|
r331 | fi | ||
Thomas Arendsen Hein
|
r798 | cd "$TESTDIR" | ||
rm -f "$HGTMP/$1.out" | ||||
rm -rf "$HGTMP/$1" | ||||
mpm@selenic.com
|
r362 | return $fail | ||
} | ||||
mpm@selenic.com
|
r331 | |||
Thomas Arendsen Hein
|
r1308 | # list of prerequisite programs | ||
eric@localhost.localdomain
|
r1279 | # stuff from coreutils (cat, rm, etc) are not tested | ||
Soh Tk-r28629
|
r1949 | prereqs="python merge diff grep unzip gunzip bunzip2 sed" | ||
eric@localhost.localdomain
|
r1279 | missing='' | ||
for pre in $prereqs ; do | ||||
if type $pre > /dev/null 2>&1 ; then | ||||
: prereq exists | ||||
Thomas Arendsen Hein
|
r1308 | else | ||
eric@localhost.localdomain
|
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 | ||||
Thomas Arendsen Hein
|
r804 | TESTS="$*" | ||
Thomas Arendsen Hein
|
r798 | if [ -z "$TESTS" ] ; then | ||
Thomas Arendsen Hein
|
r804 | TESTS=`ls test-* | grep -v "[.~]"` | ||
mpm@selenic.com
|
r362 | fi | ||
for f in $TESTS ; do | ||||
TK Soh
|
r1952 | $ECHO_N ".${NNL}" | ||
Thomas Arendsen Hein
|
r804 | run_one $f || failed=`expr $failed + 1` | ||
tests=`expr $tests + 1` | ||||
mpm@selenic.com
|
r331 | done | ||
echo | ||||
Thomas Arendsen Hein
|
r804 | echo "Ran $tests tests, $failed failed." | ||
mpm@selenic.com
|
r331 | |||
Vadim Gelfer
|
r2068 | 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 | ||||
mpm@selenic.com
|
r331 | if [ $failed -gt 0 ] ; then | ||
Thomas Arendsen Hein
|
r835 | exit 1 | ||
mpm@selenic.com
|
r331 | fi | ||
Thomas Arendsen Hein
|
r835 | exit 0 | ||