tests/run-tests.py
changeset 33814 81b12f69ef5b
parent 33710 2e43c5cd57a7
child 33866 4e8a46c25fac
equal deleted inserted replaced
33813:1e71a27dee97 33814:81b12f69ef5b
    92 # ANSI color is unsupported prior to Windows 10
    92 # ANSI color is unsupported prior to Windows 10
    93 if os.name != 'nt':
    93 if os.name != 'nt':
    94     try: # is pygments installed
    94     try: # is pygments installed
    95         import pygments
    95         import pygments
    96         import pygments.lexers as lexers
    96         import pygments.lexers as lexers
       
    97         import pygments.lexer as lexer
    97         import pygments.formatters as formatters
    98         import pygments.formatters as formatters
       
    99         import pygments.token as token
       
   100         import pygments.style as style
    98         pygmentspresent = True
   101         pygmentspresent = True
    99         difflexer = lexers.DiffLexer()
   102         difflexer = lexers.DiffLexer()
   100         terminal256formatter = formatters.Terminal256Formatter()
   103         terminal256formatter = formatters.Terminal256Formatter()
   101     except ImportError:
   104     except ImportError:
   102         pass
   105         pass
       
   106 
       
   107 if pygmentspresent:
       
   108     class TestRunnerStyle(style.Style):
       
   109         default_style = ""
       
   110         skipped = token.string_to_tokentype("Token.Generic.Skipped")
       
   111         failed = token.string_to_tokentype("Token.Generic.Failed")
       
   112         error = token.string_to_tokentype("Token.Generic.Error")
       
   113         skippedname = token.string_to_tokentype("Token.Generic.SName")
       
   114         failedname = token.string_to_tokentype("Token.Generic.FName")
       
   115         styles = {
       
   116             skipped:         '#e5e5e5',
       
   117             skippedname:     '#00ffff',
       
   118             failed:          '#7f0000',
       
   119             failedname:      '#ff0000',
       
   120         }
       
   121 
       
   122     class TestRunnerLexer(lexer.RegexLexer):
       
   123         tokens = {
       
   124             'root': [
       
   125                 (r'^Skipped', token.Generic.Skipped, 'skipped'),
       
   126                 (r'^Failed ', token.Generic.Failed, 'failed'),
       
   127                 (r'^ERROR: ', token.Generic.Failed, 'failed'),
       
   128             ],
       
   129             'skipped': [
       
   130                 (r'[\w-]+\.t', token.Generic.SName),
       
   131                 (r':.*', token.Generic.Skipped),
       
   132             ],
       
   133             'failed': [
       
   134                 (r'[\w-]+\.t', token.Generic.FName),
       
   135                 (r'(:| ).*', token.Generic.Failed),
       
   136             ]
       
   137         }
   103 
   138 
   104 if sys.version_info > (3, 5, 0):
   139 if sys.version_info > (3, 5, 0):
   105     PYTHON3 = True
   140     PYTHON3 = True
   106     xrange = range # we use xrange in one place, and we'd rather not use range
   141     xrange = range # we use xrange in one place, and we'd rather not use range
   107     def _bytespath(p):
   142     def _bytespath(p):
  1596             with iolock:
  1631             with iolock:
  1597                 if reason == "timed out":
  1632                 if reason == "timed out":
  1598                     self.stream.write('t')
  1633                     self.stream.write('t')
  1599                 else:
  1634                 else:
  1600                     if not self._options.nodiff:
  1635                     if not self._options.nodiff:
  1601                         self.stream.write('\nERROR: %s output changed\n' % test)
  1636                         formatted = '\nERROR: %s output changed\n' % test
       
  1637                         if self.color:
       
  1638                             formatted = pygments.highlight(
       
  1639                                 formatted,
       
  1640                                 TestRunnerLexer(),
       
  1641                                 formatters.Terminal256Formatter(
       
  1642                                             style=TestRunnerStyle))
       
  1643                         self.stream.write(formatted)
  1602                     self.stream.write('!')
  1644                     self.stream.write('!')
  1603 
  1645 
  1604                 self.stream.flush()
  1646                 self.stream.flush()
  1605 
  1647 
  1606     def addSuccess(self, test):
  1648     def addSuccess(self, test):
  1998         with iolock:
  2040         with iolock:
  1999             self.stream.writeln('')
  2041             self.stream.writeln('')
  2000 
  2042 
  2001             if not self._runner.options.noskips:
  2043             if not self._runner.options.noskips:
  2002                 for test, msg in result.skipped:
  2044                 for test, msg in result.skipped:
  2003                     self.stream.writeln('Skipped %s: %s' % (test.name, msg))
  2045                     formatted = 'Skipped %s: %s' % (test.name, msg)
       
  2046                     if result.color:
       
  2047                         formatted = pygments.highlight(
       
  2048                             formatted,
       
  2049                             TestRunnerLexer(),
       
  2050                             formatters.Terminal256Formatter(
       
  2051                                             style=TestRunnerStyle)).strip("\n")
       
  2052                     self.stream.writeln(formatted)
  2004             for test, msg in result.failures:
  2053             for test, msg in result.failures:
  2005                 self.stream.writeln('Failed %s: %s' % (test.name, msg))
  2054                 formatted = 'Failed %s: %s' % (test.name, msg)
       
  2055                 if result.color:
       
  2056                     formatted = pygments.highlight(
       
  2057                         formatted,
       
  2058                         TestRunnerLexer(),
       
  2059                         formatters.Terminal256Formatter(
       
  2060                                         style=TestRunnerStyle)).strip("\n")
       
  2061                 self.stream.writeln(formatted)
  2006             for test, msg in result.errors:
  2062             for test, msg in result.errors:
  2007                 self.stream.writeln('Errored %s: %s' % (test.name, msg))
  2063                 self.stream.writeln('Errored %s: %s' % (test.name, msg))
  2008 
  2064 
  2009             if self._runner.options.xunit:
  2065             if self._runner.options.xunit:
  2010                 with open(self._runner.options.xunit, "wb") as xuf:
  2066                 with open(self._runner.options.xunit, "wb") as xuf: