diff options
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/test_result.py')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/test_result.py | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/test_result.py b/lldb/packages/Python/lldbsuite/test/test_result.py index 949ebc84362..3b4b0f4486b 100644 --- a/lldb/packages/Python/lldbsuite/test/test_result.py +++ b/lldb/packages/Python/lldbsuite/test/test_result.py @@ -13,6 +13,7 @@ from __future__ import print_function # System modules import inspect +import os # Third-party modules import unittest2 @@ -20,7 +21,7 @@ import unittest2 # LLDB Modules from . import configuration from lldbsuite.test_event.event_builder import EventBuilder - +from lldbsuite.test_event import build_exception class LLDBTestResult(unittest2.TextTestResult): """ @@ -139,17 +140,48 @@ class LLDBTestResult(unittest2.TextTestResult): self.results_formatter.handle_event( EventBuilder.event_for_success(test)) + def _isBuildError(self, err_tuple): + exception = err_tuple[1] + return isinstance(exception, build_exception.BuildError) + + def _getTestPath(self, test): + if test is None: + return "" + elif hasattr(test, "test_filename"): + return test.test_filename + else: + return inspect.getsourcefile(test.__class__) + + + def _saveBuildErrorTuple(self, test, err): + # Adjust the error description so it prints the build command and build error + # rather than an uninformative Python backtrace. + build_error = err[1] + error_description = "{}\nTest Directory:\n{}".format( + str(build_error), + os.path.dirname(self._getTestPath(test))) + self.errors.append((test, error_description)) + self._mirrorOutput = True + def addError(self, test, err): configuration.sdir_has_content = True - super(LLDBTestResult, self).addError(test, err) + if self._isBuildError(err): + self._saveBuildErrorTuple(test, err) + else: + super(LLDBTestResult, self).addError(test, err) + method = getattr(test, "markError", None) if method: method() if configuration.parsable: self.stream.write("FAIL: LLDB (%s) :: %s\n" % (self._config_string(test), str(test))) if self.results_formatter: - self.results_formatter.handle_event( - EventBuilder.event_for_error(test, err)) + # Handle build errors as a separate event type + if self._isBuildError(err): + error_event = EventBuilder.event_for_build_error(test, err) + else: + error_event = EventBuilder.event_for_error(test, err) + self.results_formatter.handle_event(error_event) def addCleanupError(self, test, err): configuration.sdir_has_content = True |