--- a/tests/run-tests
+++ b/tests/run-tests
@@ -1,4 +1,9 @@
#!/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
@@ -19,6 +24,16 @@ 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
@@ -64,7 +79,19 @@ else
fi
cd "$TESTDIR"
-BINDIR="$INST/bin"
+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
{
@@ -101,13 +128,13 @@ run_one() {
cat "$ERR"
fail=1
elif [ -r "$OUTOK" ]; then
- if diff -u "$OUTOK" "$OUT" > /dev/null; then
+ if diff $DIFFOPTS "$OUTOK" "$OUT" > /dev/null; then
: no differences
else
cp "$OUT" "$ERR"
echo
echo "$1 output changed:"
- diff -u "$OUTOK" "$ERR" || true
+ diff $DIFFOPTS "$OUTOK" "$ERR" || true
fail=1
fi
fi
@@ -153,6 +180,17 @@ 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