From 69ef2cbe0984f8d3edcfa72108b57126d38b74b7 Mon Sep 17 00:00:00 2001 From: Gareth Rees Date: Tue, 21 May 2013 17:25:13 +0100 Subject: [PATCH] If a test case fails, show the output of the test case that failed, so that it isn't lost if the test suite is running on a build server such as travis ci. (works on os x.) Copied from Perforce Change: 182040 ServerID: perforce.ravenbrook.com --- mps/code/comm.gmk | 7 +++---- mps/code/mps.xcodeproj/project.pbxproj | 2 +- mps/{code => tool}/gcovfmt.py | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) rename mps/{code => tool}/gcovfmt.py (99%) diff --git a/mps/code/comm.gmk b/mps/code/comm.gmk index 9a96dfc7df9..2271fa9a4c0 100644 --- a/mps/code/comm.gmk +++ b/mps/code/comm.gmk @@ -239,12 +239,11 @@ TESTCASES=abqtest amcss amcsshe amcssth amsss amssshe apss arenacv awlut \ messtest mpmss mpsicv poolncv qs sacss segsmss steptest \ walkt0 testrun: $(TESTCASES) - OUTPUT=$$(mktemp /tmp/mps.log.XXXXXX); \ + OUTPUT=$$(mktemp -d /tmp/mps.log.XXXXXX); \ echo "Logging test output to $$OUTPUT"; \ $(^:%=(TESTCASE=$(PFM)/$(VARIETY)/%; \ - echo "\n\n-- Running $$TESTCASE at $$(date) --" >> $$OUTPUT && \ - echo "Running $$TESTCASE" && \ - $$TESTCASE >> $$OUTPUT) &&) true + echo "Running $$TESTCASE" && \ + $$TESTCASE > $$OUTPUT/$$TEST || (cat $$OUTPUT/$$TEST; exit 1)) &&) true # These convenience targets allow one to type "make foo" to build target # foo in selected varieties (or none, for the latter rule). diff --git a/mps/code/mps.xcodeproj/project.pbxproj b/mps/code/mps.xcodeproj/project.pbxproj index 3c9183c7be9..e863cebe535 100644 --- a/mps/code/mps.xcodeproj/project.pbxproj +++ b/mps/code/mps.xcodeproj/project.pbxproj @@ -2453,7 +2453,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# bttest & teletest cannot be run unattended\n# mv2test cannot be run because MV2 is broken\n# amcssth doesn't work on OS X (job001621)\nTESTCASES=\"abqtest amcss amcsshe amsss amssshe apss arenacv awlut \\\n awluthe btcv cbstest finalcv finaltest lockcov locv \\\n messtest mpmss mpsicv poolncv qs sacss segsmss steptest \\\n walkt0\"\nOUTPUT=$(mktemp /tmp/mps.log.XXXXXX)\necho \"Logging test output to $OUTPUT\"\nfor TEST in $TESTCASES; do\n TESTCASE=$TARGET_BUILD_DIR/$TEST\n printf \"\\n\\n-- Running $TESTCASE at $(date) --\\n\" >> $OUTPUT\n echo \"Running $TEST ($CONFIGURATION)\"\n $TESTCASE >> $OUTPUT || exit 1\ndone\necho \"All tests pass.\"\n\n# Coverage\nif [ \"$CONFIGURATION\" == \"Debug\" ]; then\n (cd xc/$PROJECT.build/$CONFIGURATION/$PROJECT.build/Objects-normal/x86_64 &&\n gcov mps.c 2>>$OUTPUT) |\n python gcovfmt.py $OUTPUT\nfi"; + shellScript = "# bttest & teletest cannot be run unattended\n# mv2test cannot be run because MV2 is broken\n# amcssth doesn't work on OS X (job001621)\nTESTCASES=\"abqtest amcss amcsshe amsss amssshe apss arenacv awlut \\\n awluthe btcv cbstest finalcv finaltest lockcov locv \\\n messtest mpmss mpsicv poolncv qs sacss segsmss steptest \\\n walkt0\"\nOUTPUT=$(mktemp -d /tmp/mps.log.XXXXXX)\necho \"Logging test output to $OUTPUT\"\nfor TEST in $TESTCASES; do\n TESTCASE=$TARGET_BUILD_DIR/$TEST\n echo \"Running $TEST ($CONFIGURATION)\"\n $TESTCASE > $OUTPUT/$TEST || (cat $OUTPUT/$TEST; exit 1)\ndone\necho \"All tests pass.\"\n\n# Coverage\nif [ \"$CONFIGURATION\" == \"Debug\" ]; then\n (cd xc/$PROJECT.build/$CONFIGURATION/$PROJECT.build/Objects-normal/x86_64 &&\n gcov mps.c 2> $OUTPUT/gcov) |\n python ../tool/gcovfmt.py $OUTPUT/coverage\nfi"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ diff --git a/mps/code/gcovfmt.py b/mps/tool/gcovfmt.py similarity index 99% rename from mps/code/gcovfmt.py rename to mps/tool/gcovfmt.py index ac6e9c73fe6..6d6212e8317 100755 --- a/mps/code/gcovfmt.py +++ b/mps/tool/gcovfmt.py @@ -43,7 +43,7 @@ def main(): else: out = stdout fmt1 = "{:<16s} {:<7s} {:<7s} {:<7s}\n" - fmt2 = "{:<16s} {:7d} {:7d} {:7.2f}\n" + fmt2 = "{:<16s} {:7d} {:7d} {:6.2f}%\n" underlines = "---------------- ------- ------- -------".split() out.write(fmt1.format(*"File Lines Covered Percent".split())) out.write(fmt1.format(*underlines))