tests/run-tests.py
changeset 33420 e80041832eec
parent 33203 cf826b9e9ea4
child 33500 9c6e64911de0
equal deleted inserted replaced
33419:7c33adc823e0 33420:e80041832eec
    86 
    86 
    87 origenviron = os.environ.copy()
    87 origenviron = os.environ.copy()
    88 osenvironb = getattr(os, 'environb', os.environ)
    88 osenvironb = getattr(os, 'environb', os.environ)
    89 processlock = threading.Lock()
    89 processlock = threading.Lock()
    90 
    90 
       
    91 with_color = False
       
    92 try: # is pygments installed
       
    93     import pygments
       
    94     import pygments.lexers as lexers
       
    95     import pygments.formatters as formatters
       
    96     with_color = True
       
    97 except ImportError:
       
    98     pass
       
    99 
       
   100 if not sys.stderr.isatty(): # check if the terminal is capable
       
   101     with_color = False
       
   102 
    91 if sys.version_info > (3, 5, 0):
   103 if sys.version_info > (3, 5, 0):
    92     PYTHON3 = True
   104     PYTHON3 = True
    93     xrange = range # we use xrange in one place, and we'd rather not use range
   105     xrange = range # we use xrange in one place, and we'd rather not use range
    94     def _bytespath(p):
   106     def _bytespath(p):
    95         return p.encode('utf-8')
   107         return p.encode('utf-8')
   253         help="run tests that are changed in parent rev or working directory")
   265         help="run tests that are changed in parent rev or working directory")
   254     parser.add_option("-C", "--annotate", action="store_true",
   266     parser.add_option("-C", "--annotate", action="store_true",
   255         help="output files annotated with coverage")
   267         help="output files annotated with coverage")
   256     parser.add_option("-c", "--cover", action="store_true",
   268     parser.add_option("-c", "--cover", action="store_true",
   257         help="print a test coverage report")
   269         help="print a test coverage report")
       
   270     parser.add_option("--color", choices=["always", "auto", "never"],
       
   271                       default="auto",
       
   272                       help="colorisation: always|auto|never (default: auto)")
   258     parser.add_option("-d", "--debug", action="store_true",
   273     parser.add_option("-d", "--debug", action="store_true",
   259         help="debug mode: write output of test scripts to console"
   274         help="debug mode: write output of test scripts to console"
   260              " rather than capturing and diffing it (disables timeout)")
   275              " rather than capturing and diffing it (disables timeout)")
   261     parser.add_option("-f", "--first", action="store_true",
   276     parser.add_option("-f", "--first", action="store_true",
   262         help="exit on the first test failure")
   277         help="exit on the first test failure")
   395     if options.chg and options.with_hg:
   410     if options.chg and options.with_hg:
   396         # chg shares installation location with hg
   411         # chg shares installation location with hg
   397         parser.error('--chg does not work when --with-hg is specified '
   412         parser.error('--chg does not work when --with-hg is specified '
   398                      '(use --with-chg instead)')
   413                      '(use --with-chg instead)')
   399 
   414 
       
   415     global with_color
       
   416     if options.color != 'auto':
       
   417         if options.color == 'never':
       
   418             with_color = False
       
   419         else: # 'always', for testing purposes
       
   420             with_color = True
       
   421 
   400     global useipv6
   422     global useipv6
   401     if options.ipv6:
   423     if options.ipv6:
   402         useipv6 = checksocketfamily('AF_INET6')
   424         useipv6 = checksocketfamily('AF_INET6')
   403     else:
   425     else:
   404         # only use IPv6 if IPv4 is unavailable and IPv6 is available
   426         # only use IPv6 if IPv4 is unavailable and IPv6 is available
  1623                     raise test.failureException(
  1645                     raise test.failureException(
  1624                         'server failed to start (HGPORT=%s)' % test._startport)
  1646                         'server failed to start (HGPORT=%s)' % test._startport)
  1625                 else:
  1647                 else:
  1626                     self.stream.write('\n')
  1648                     self.stream.write('\n')
  1627                     for line in lines:
  1649                     for line in lines:
       
  1650                         if with_color:
       
  1651                             line = pygments.highlight(
       
  1652                                     line,
       
  1653                                     lexers.DiffLexer(),
       
  1654                                     formatters.Terminal256Formatter())
  1628                         if PYTHON3:
  1655                         if PYTHON3:
  1629                             self.stream.flush()
  1656                             self.stream.flush()
  1630                             self.stream.buffer.write(line)
  1657                             self.stream.buffer.write(line)
  1631                             self.stream.buffer.flush()
  1658                             self.stream.buffer.flush()
  1632                         else:
  1659                         else: