Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: typ/runner.py

Issue 2363773008: Add better logging when failing to load a test. (Closed)
Patch Set: patch for review Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: typ/runner.py
diff --git a/typ/runner.py b/typ/runner.py
index 4d64b78027583dea405e27a62fd664f1a49dcd0f..a2f5c3df76df6af61852427cadf5157e4188e34b 100644
--- a/typ/runner.py
+++ b/typ/runner.py
@@ -345,7 +345,12 @@ class Runner(object):
self.top_level_dir, classifier,
name)
except (AttributeError, ImportError, SyntaxError) as e:
- self.print_('Failed to load "%s": %s' % (name, e))
+ ex_str = traceback.format_exc()
+ self.print_('Failed to load "%s" in find_tests: %s' %
+ (name, e))
+ self.print_(' %s' %
+ '\n '.join(ex_str.splitlines()))
+ self.print_(ex_str)
return 1, None
except _AddTestsError as e:
self.print_(str(e))
@@ -409,7 +414,7 @@ class Runner(object):
add_tests(loader.loadTestsFromName(name))
# pylint: disable=no-member
- if hasattr(loader, 'errors') and loader.errors:
+ if hasattr(loader, 'errors') and loader.errors: # pragma: python3
# In Python3's version of unittest, loader failures get converted
# into failed test cases, rather than raising exceptions. However,
# the errors also get recorded so you can err out immediately.
@@ -806,7 +811,7 @@ def _run_one_test(child, test_input):
# but could come up when testing non-typ code as well.
h.capture_output(divert=not child.passthrough)
- tb_str = ''
+ ex_str = ''
try:
orig_skip = unittest.skip
orig_skip_if = unittest.skipIf
@@ -817,21 +822,25 @@ def _run_one_test(child, test_input):
try:
suite = child.loader.loadTestsFromName(test_name)
except Exception as e:
+ ex_str = ('loadTestsFromName("%s") failed: %s\n%s\n' %
+ (test_name, e, traceback.format_exc()))
try:
suite = _load_via_load_tests(child, test_name)
+ ex_str += ('\nload_via_load_tests(\"%s\") returned %d tests\n' %
+ (test_name, len(list(suite))))
except Exception as e: # pragma: untested
suite = []
- tb_str = traceback.format_exc(e)
+ ex_str += ('\nload_via_load_tests("%s") failed: %s\n%s\n' %
+ (test_name, e, traceback.format_exc()))
finally:
unittest.skip = orig_skip
unittest.skipIf = orig_skip_if
tests = list(suite)
if len(tests) != 1:
- err = 'Failed to load %s' % test_name
- if tb_str: # pragma: untested
- err += (' (traceback follows):\n %s' %
- ' \n'.join(tb_str.splitlines()))
+ err = 'Failed to load "%s" in run_one_test' % test_name
+ if ex_str: # pragma: untested
+ err += '\n ' + '\n '.join(ex_str.splitlines())
h.restore_output()
return Result(test_name, ResultType.Failure, start, 0,
@@ -938,7 +947,7 @@ def _load_via_load_tests(child, test_name):
if suite:
for test_case in suite:
assert isinstance(test_case, unittest.TestCase)
- if test_case.id() == test_name:
+ if test_case.id() == test_name: # pragma: untested
new_suite.addTest(test_case)
break
comps.pop()
« no previous file with comments | « typ/json_results.py ('k') | typ/tests/main_test.py » ('j') | typ/tests/main_test.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698