diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/test_result.py')
-rw-r--r-- | packages/Python/lldbsuite/test/test_result.py | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/packages/Python/lldbsuite/test/test_result.py b/packages/Python/lldbsuite/test/test_result.py index 9665d672a79a..01db1f691636 100644 --- a/packages/Python/lldbsuite/test/test_result.py +++ b/packages/Python/lldbsuite/test/test_result.py @@ -13,15 +13,15 @@ from __future__ import print_function # System modules import inspect +import os # Third-party modules import unittest2 # LLDB Modules -import lldbsuite from . import configuration -from .result_formatter import EventBuilder - +from lldbsuite.test_event.event_builder import EventBuilder +from lldbsuite.test_event import build_exception class LLDBTestResult(unittest2.TextTestResult): """ @@ -113,8 +113,6 @@ class LLDBTestResult(unittest2.TextTestResult): def hardMarkAsSkipped(self,test): getattr(test, test._testMethodName).__func__.__unittest_skip__ = True getattr(test, test._testMethodName).__func__.__unittest_skip_why__ = "test case does not fall in any category of interest for this run" - test.__class__.__unittest_skip__ = True - test.__class__.__unittest_skip_why__ = "test case does not fall in any category of interest for this run" def startTest(self, test): if configuration.shouldSkipBecauseOfCategories(self.getCategoriesForTest(test)): @@ -140,17 +138,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 |