[tor-commits] [stem/master] Note command to just re-run test failures

atagar at torproject.org atagar at torproject.org
Thu Jan 8 17:49:04 UTC 2015


commit 6c15247fbfd991090f91d0c4f28f36d0e31b4b43
Author: Damian Johnson <atagar at torproject.org>
Date:   Thu Jan 8 09:45:46 2015 -0800

    Note command to just re-run test failures
    
    When our tests fail include the commands to just re-run those tests. Neat idea
    from Nick on...
    
      https://trac.torproject.org/projects/tor/ticket/14113
---
 run_tests.py   |   15 ++++++++++-----
 test/output.py |    9 +++++++++
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/run_tests.py b/run_tests.py
index d157276..c0fa4be 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -307,13 +307,18 @@ def main():
   runtime_label = '(%i seconds)' % (time.time() - start_time)
 
   if error_tracker.has_errors_occured():
-    if args.quiet:
-      println('', STDERR)  # extra newline
-
     println('TESTING FAILED %s' % runtime_label, ERROR, STDERR)
 
     for line in error_tracker:
       println('  %s' % line, ERROR, STDERR)
+
+    error_modules = error_tracker.get_modules()
+
+    if len(error_modules) < 10 and not args.specific_test:
+      println('\nYou can re-run just these tests with:\n', ERROR, STDERR)
+
+      for module in error_modules:
+        println('  %s --test %s' % (' '.join(sys.argv), module), ERROR, STDERR)
   else:
     if skipped_tests > 0:
       println('%i TESTS WERE SKIPPED' % skipped_tests, STATUS)
@@ -373,7 +378,7 @@ def _get_args(argv):
 
       args['run_targets'] = run_targets
       args['attribute_targets'] = attribute_targets
-    elif opt in ('-l', '--test'):
+    elif opt in ('-t', '--test'):
       args['specific_test'] = arg
     elif opt in ('-l', '--log'):
       arg = arg.upper()
@@ -451,7 +456,7 @@ def _run_test(args, test_class, output_filters, logging_buffer):
     if args.quiet:
       println(label, STATUS, NO_NL, STDERR)
       println(' failed (%0.2fs)' % (time.time() - start_time), ERROR, STDERR)
-      println(test.output.apply_filters(test_results.getvalue(), *output_filters), NO_NL, STDERR)
+      println(test.output.apply_filters(test_results.getvalue(), *output_filters), STDERR)
     else:
       println(' failed (%0.2fs)' % (time.time() - start_time), ERROR)
       println(test.output.apply_filters(test_results.getvalue(), *output_filters), NO_NL)
diff --git a/test/output.py b/test/output.py
index f338753..e88d3de 100644
--- a/test/output.py
+++ b/test/output.py
@@ -196,6 +196,7 @@ class ErrorTracker(object):
 
   def __init__(self):
     self._errors = []
+    self._error_modules = set()
     self._category = None
     self._error_noted = False
 
@@ -232,10 +233,18 @@ class ErrorTracker(object):
         else:
           self._errors.append(line_content)
 
+        module_match = re.match('.*\((test\.\S+)\.\S+\).*', line_content)
+
+        if module_match:
+          self._error_modules.add(module_match.group(1))
+
       return line_content
 
     return _error_tracker
 
+  def get_modules(self):
+    return self._error_modules
+
   def __iter__(self):
     for error_line in self._errors:
       yield error_line





More information about the tor-commits mailing list