From 8af9881e9b9b03c62f2a3d05daf9622139587169 Mon Sep 17 00:00:00 2001
From: Massimiliano Culpo <massimiliano.culpo@googlemail.com>
Date: Mon, 24 Oct 2016 20:07:08 +0200
Subject: [PATCH] spack test : exits after ctrl+c fixes #2029 (#2082)

---
 lib/spack/spack/test/__init__.py     | 38 +++++++++++++++++-----------
 lib/spack/spack/test/tally_plugin.py |  4 +++
 2 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/lib/spack/spack/test/__init__.py b/lib/spack/spack/test/__init__.py
index 0a946ff2ff..f6847d2929 100644
--- a/lib/spack/spack/test/__init__.py
+++ b/lib/spack/spack/test/__init__.py
@@ -107,25 +107,33 @@ def run(names, outputDir, verbose=False):
                 sys.exit(1)
 
     tally = Tally()
-    for test in names:
-        module = 'spack.test.' + test
-        print(module)
 
-        tty.msg("Running test: %s" % test)
+    modules = ['spack.test.' + test for test in names]
+    runOpts = ["--with-%s" % spack.test.tally_plugin.Tally.name]
 
-        runOpts = ["--with-%s" % spack.test.tally_plugin.Tally.name]
-
-        if outputDir:
-            xmlOutputFname = "unittests-{0}.xml".format(test)
-            xmlOutputPath = join_path(outputDir, xmlOutputFname)
-            runOpts += ["--with-xunit",
-                        "--xunit-file={0}".format(xmlOutputPath)]
-        argv = [""] + runOpts + [module]
-        nose.run(argv=argv, addplugins=[tally])
+    if outputDir:
+        xmlOutputFname = "unittests-{0}.xml".format(test)
+        xmlOutputPath = join_path(outputDir, xmlOutputFname)
+        runOpts += ["--with-xunit",
+                    "--xunit-file={0}".format(xmlOutputPath)]
+    argv = [""] + runOpts + modules
+    nose.run(argv=argv, addplugins=[tally])
 
     succeeded = not tally.failCount and not tally.errorCount
-    tty.msg("Tests Complete.", "%5d tests run" % tally.numberOfTestsRun,
-            "%5d failures" % tally.failCount, "%5d errors" % tally.errorCount)
+    tty.msg(
+        "Tests Complete.",
+        "%5d tests run" % tally.numberOfTestsRun,
+        "%5d failures" % tally.failCount,
+        "%5d errors" % tally.errorCount
+    )
+
+    if tally.fail_list:
+        items = [x for x in tally.fail_list]
+        tty.msg('List of failing tests:', *items)
+
+    if tally.error_list:
+        items = [x for x in tally.error_list]
+        tty.msg('List of tests with errors:', *items)
 
     if succeeded:
         tty.info("OK", format='g')
diff --git a/lib/spack/spack/test/tally_plugin.py b/lib/spack/spack/test/tally_plugin.py
index 808694d186..d848f2cb9f 100644
--- a/lib/spack/spack/test/tally_plugin.py
+++ b/lib/spack/spack/test/tally_plugin.py
@@ -35,6 +35,8 @@ def __init__(self):
         self.successCount = 0
         self.failCount = 0
         self.errorCount = 0
+        self.error_list = []
+        self.fail_list = []
 
     @property
     def numberOfTestsRun(self):
@@ -52,9 +54,11 @@ def addSuccess(self, test):
 
     def addError(self, test, err):
         self.errorCount += 1
+        self.error_list.append(test)
 
     def addFailure(self, test, err):
         self.failCount += 1
+        self.fail_list.append(test)
 
     def finalize(self, result):
         pass
-- 
GitLab