diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/test_result.py')
-rw-r--r-- | packages/Python/lldbsuite/test/test_result.py | 95 |
1 files changed, 72 insertions, 23 deletions
diff --git a/packages/Python/lldbsuite/test/test_result.py b/packages/Python/lldbsuite/test/test_result.py index 01db1f6916368..7bfe9708386c8 100644 --- a/packages/Python/lldbsuite/test/test_result.py +++ b/packages/Python/lldbsuite/test/test_result.py @@ -23,6 +23,7 @@ from . import configuration from lldbsuite.test_event.event_builder import EventBuilder from lldbsuite.test_event import build_exception + class LLDBTestResult(unittest2.TextTestResult): """ Enforce a singleton pattern to allow introspection of test progress. @@ -39,11 +40,15 @@ class LLDBTestResult(unittest2.TextTestResult): def getTerminalSize(): import os env = os.environ + def ioctl_GWINSZ(fd): try: - import fcntl, termios, struct, os + import fcntl + import termios + import struct + import os cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, - '1234')) + '1234')) except: return return cr @@ -78,15 +83,18 @@ class LLDBTestResult(unittest2.TextTestResult): def _config_string(self, test): compiler = getattr(test, "getCompiler", None) arch = getattr(test, "getArchitecture", None) - return "%s-%s" % (compiler() if compiler else "", arch() if arch else "") + return "%s-%s" % (compiler() if compiler else "", + arch() if arch else "") def _exc_info_to_string(self, err, test): """Overrides superclass TestResult's method in order to append our test config info string to the exception info string.""" if hasattr(test, "getArchitecture") and hasattr(test, "getCompiler"): - return '%sConfig=%s-%s' % (super(LLDBTestResult, self)._exc_info_to_string(err, test), - test.getArchitecture(), - test.getCompiler()) + return '%sConfig=%s-%s' % (super(LLDBTestResult, + self)._exc_info_to_string(err, + test), + test.getArchitecture(), + test.getCompiler()) else: return super(LLDBTestResult, self)._exc_info_to_string(err, test) @@ -103,23 +111,41 @@ class LLDBTestResult(unittest2.TextTestResult): """ test_categories = [] test_method = getattr(test, test._testMethodName) - if test_method != None and hasattr(test_method, "categories"): + if test_method is not None and hasattr(test_method, "categories"): test_categories.extend(test_method.categories) test_categories.extend(test.getCategories()) return test_categories - def hardMarkAsSkipped(self,test): + 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" + getattr( + test, + test._testMethodName).__func__.__unittest_skip_why__ = "test case does not fall in any category of interest for this run" + + def checkExclusion(self, exclusion_list, name): + if exclusion_list: + import re + for item in exclusion_list: + if re.search(item, name): + return True + return False def startTest(self, test): - if configuration.shouldSkipBecauseOfCategories(self.getCategoriesForTest(test)): + if configuration.shouldSkipBecauseOfCategories( + self.getCategoriesForTest(test)): self.hardMarkAsSkipped(test) - configuration.setCrashInfoHook("%s at %s" % (str(test),inspect.getfile(test.__class__))) + if self.checkExclusion( + configuration.skip_tests, test.id()): + self.hardMarkAsSkipped(test) + + configuration.setCrashInfoHook( + "%s at %s" % + (str(test), inspect.getfile( + test.__class__))) self.counter += 1 - #if self.counter == 4: + # if self.counter == 4: # import crashinfo # crashinfo.testCrashReporterDescription(None) test.test_number = self.counter @@ -131,9 +157,16 @@ class LLDBTestResult(unittest2.TextTestResult): EventBuilder.event_for_start(test)) def addSuccess(self, test): + if self.checkExclusion( + configuration.xfail_tests, test.id()): + self.addUnexpectedSuccess(test, None) + return + super(LLDBTestResult, self).addSuccess(test) if configuration.parsable: - self.stream.write("PASS: LLDB (%s) :: %s\n" % (self._config_string(test), str(test))) + self.stream.write( + "PASS: LLDB (%s) :: %s\n" % + (self._config_string(test), str(test))) if self.results_formatter: self.results_formatter.handle_event( EventBuilder.event_for_success(test)) @@ -150,7 +183,6 @@ class LLDBTestResult(unittest2.TextTestResult): 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. @@ -172,7 +204,9 @@ class LLDBTestResult(unittest2.TextTestResult): if method: method() if configuration.parsable: - self.stream.write("FAIL: LLDB (%s) :: %s\n" % (self._config_string(test), str(test))) + self.stream.write( + "FAIL: LLDB (%s) :: %s\n" % + (self._config_string(test), str(test))) if self.results_formatter: # Handle build errors as a separate event type if self._isBuildError(err): @@ -188,32 +222,41 @@ class LLDBTestResult(unittest2.TextTestResult): if method: method() if configuration.parsable: - self.stream.write("CLEANUP ERROR: LLDB (%s) :: %s\n" % (self._config_string(test), str(test))) + self.stream.write( + "CLEANUP ERROR: LLDB (%s) :: %s\n" % + (self._config_string(test), str(test))) if self.results_formatter: self.results_formatter.handle_event( EventBuilder.event_for_cleanup_error( test, err)) def addFailure(self, test, err): + if self.checkExclusion( + configuration.xfail_tests, test.id()): + self.addExpectedFailure(test, err, None) + return + configuration.sdir_has_content = True super(LLDBTestResult, self).addFailure(test, err) method = getattr(test, "markFailure", None) if method: method() if configuration.parsable: - self.stream.write("FAIL: LLDB (%s) :: %s\n" % (self._config_string(test), str(test))) + self.stream.write( + "FAIL: LLDB (%s) :: %s\n" % + (self._config_string(test), str(test))) if configuration.useCategories: test_categories = self.getCategoriesForTest(test) for category in test_categories: if category in configuration.failuresPerCategory: - configuration.failuresPerCategory[category] = configuration.failuresPerCategory[category] + 1 + configuration.failuresPerCategory[ + category] = configuration.failuresPerCategory[category] + 1 else: configuration.failuresPerCategory[category] = 1 if self.results_formatter: self.results_formatter.handle_event( EventBuilder.event_for_failure(test, err)) - def addExpectedFailure(self, test, err, bugnumber): configuration.sdir_has_content = True super(LLDBTestResult, self).addExpectedFailure(test, err, bugnumber) @@ -221,11 +264,13 @@ class LLDBTestResult(unittest2.TextTestResult): if method: method(err, bugnumber) if configuration.parsable: - self.stream.write("XFAIL: LLDB (%s) :: %s\n" % (self._config_string(test), str(test))) + self.stream.write( + "XFAIL: LLDB (%s) :: %s\n" % + (self._config_string(test), str(test))) if self.results_formatter: self.results_formatter.handle_event( EventBuilder.event_for_expected_failure( - test, err, bugnumber)) + test, err, bugnumber)) def addSkip(self, test, reason): configuration.sdir_has_content = True @@ -234,7 +279,9 @@ class LLDBTestResult(unittest2.TextTestResult): if method: method() if configuration.parsable: - self.stream.write("UNSUPPORTED: LLDB (%s) :: %s (%s) \n" % (self._config_string(test), str(test), reason)) + self.stream.write( + "UNSUPPORTED: LLDB (%s) :: %s (%s) \n" % + (self._config_string(test), str(test), reason)) if self.results_formatter: self.results_formatter.handle_event( EventBuilder.event_for_skip(test, reason)) @@ -246,7 +293,9 @@ class LLDBTestResult(unittest2.TextTestResult): if method: method(bugnumber) if configuration.parsable: - self.stream.write("XPASS: LLDB (%s) :: %s\n" % (self._config_string(test), str(test))) + self.stream.write( + "XPASS: LLDB (%s) :: %s\n" % + (self._config_string(test), str(test))) if self.results_formatter: self.results_formatter.handle_event( EventBuilder.event_for_unexpected_success( |