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 01db1f691636..7bfe9708386c 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(  | 
