tests/run-tests
changeset 2085 f71e9656524f
parent 2069 15ec724ba351
child 2163 278f9b13c39a
--- 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