regrtest: display test result (passed, failed, ...)

* in multiprocessing mode: always display the result
* sequential mode: only display the result if the test did not pass
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 447d99f..e503c13 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -15,7 +15,7 @@
     findtests, runtest,
     STDTESTS, NOTTESTS, PASSED, FAILED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED,
     INTERRUPTED, CHILD_ERROR,
-    PROGRESS_MIN_TIME)
+    PROGRESS_MIN_TIME, format_test_result)
 from test.libregrtest.setup import setup_tests
 from test import support
 try:
@@ -326,7 +326,9 @@
                 # if on a false return value from main.
                 cmd = ('result = runtest(self.ns, test); '
                        'self.accumulate_result(test, result)')
-                self.tracer.runctx(cmd, globals=globals(), locals=vars())
+                ns = dict(locals())
+                self.tracer.runctx(cmd, globals=globals(), locals=ns)
+                result = ns['result']
             else:
                 try:
                     result = runtest(self.ns, test)
@@ -337,10 +339,12 @@
                 else:
                     self.accumulate_result(test, result)
 
+            previous_test = format_test_result(test, result[0])
             test_time = time.monotonic() - start_time
             if test_time >= PROGRESS_MIN_TIME:
-                previous_test = '%s took %.0f sec' % (test, test_time)
-            else:
+                previous_test = "%s in %.0f sec" % (previous_test, test_time)
+            elif result[0] == PASSED:
+                # be quiet: say nothing if the test passed shortly
                 previous_test = None
 
             if self.ns.findleaks:
diff --git a/Lib/test/libregrtest/runtest.py b/Lib/test/libregrtest/runtest.py
index 601f2b2..ef1feb7 100644
--- a/Lib/test/libregrtest/runtest.py
+++ b/Lib/test/libregrtest/runtest.py
@@ -20,12 +20,20 @@
 INTERRUPTED = -4
 CHILD_ERROR = -5   # error in a child process
 
+_FORMAT_TEST_RESULT = {
+    PASSED: '%s passed',
+    FAILED: '%s failed',
+    ENV_CHANGED: '%s failed (env changed)',
+    SKIPPED: '%s skipped',
+    RESOURCE_DENIED: '%s skipped (resource denied)',
+    INTERRUPTED: '%s interrupted',
+    CHILD_ERROR: '%s crashed',
+}
+
 # Minimum duration of a test to display its duration or to mention that
 # the test is running in background
 PROGRESS_MIN_TIME = 30.0   # seconds
 
-
-
 # small set of tests to determine if we have a basically functioning interpreter
 # (i.e. if any of these fail, then anything else is likely to follow)
 STDTESTS = [
@@ -45,6 +53,11 @@
 NOTTESTS = set()
 
 
+def format_test_result(test_name, result):
+    fmt = _FORMAT_TEST_RESULT.get(result, "%s")
+    return fmt % test_name
+
+
 def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
     """Return a list of all applicable test modules."""
     testdir = findtestdir(testdir)
diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py
index 33f632d..9604c16 100644
--- a/Lib/test/libregrtest/runtest_mp.py
+++ b/Lib/test/libregrtest/runtest_mp.py
@@ -14,7 +14,8 @@
     sys.exit(2)
 
 from test.libregrtest.runtest import (
-    runtest, INTERRUPTED, CHILD_ERROR, PROGRESS_MIN_TIME)
+    runtest, INTERRUPTED, CHILD_ERROR, PROGRESS_MIN_TIME,
+    format_test_result)
 from test.libregrtest.setup import setup_tests
 
 
@@ -196,8 +197,8 @@
             regrtest.accumulate_result(test, result)
 
             # Display progress
-            text = test
             ok, test_time = result
+            text = format_test_result(test, ok)
             if (ok not in (CHILD_ERROR, INTERRUPTED)
                 and test_time >= PROGRESS_MIN_TIME
                 and not regrtest.ns.pgo):