tests/run-tests.py
changeset 8060 84d0fe34427b
parent 7813 076401cf2b63
child 8091 e85cc856d2e1
equal deleted inserted replaced
8059:41a2c5cbcb6a 8060:84d0fe34427b
    34 import time
    34 import time
    35 
    35 
    36 # reserved exit code to skip test (used by hghave)
    36 # reserved exit code to skip test (used by hghave)
    37 SKIPPED_STATUS = 80
    37 SKIPPED_STATUS = 80
    38 SKIPPED_PREFIX = 'skipped: '
    38 SKIPPED_PREFIX = 'skipped: '
       
    39 FAILED_PREFIX  = 'hghave check failed: '
    39 
    40 
    40 required_tools = ["python", "diff", "grep", "unzip", "gunzip", "bunzip2", "sed"]
    41 required_tools = ["python", "diff", "grep", "unzip", "gunzip", "bunzip2", "sed"]
    41 
    42 
    42 defaults = {
    43 defaults = {
    43     'jobs': ('HGTEST_JOBS', 1),
    44     'jobs': ('HGTEST_JOBS', 1),
   127                 lines.append(last)
   128                 lines.append(last)
   128             return lines
   129             return lines
   129         lines.append(text[i:n+1])
   130         lines.append(text[i:n+1])
   130         i = n + 1
   131         i = n + 1
   131 
   132 
   132 def extract_missing_features(lines):
   133 def parse_hghave_output(lines):
   133     '''Extract missing/unknown features log lines as a list'''
   134     '''Parse hghave log lines.
       
   135     Return tuple of lists (missing, failed):
       
   136       * the missing/unknown features
       
   137       * the features for which existence check failed'''
   134     missing = []
   138     missing = []
       
   139     failed = []
   135     for line in lines:
   140     for line in lines:
   136         if not line.startswith(SKIPPED_PREFIX):
   141         if line.startswith(SKIPPED_PREFIX):
   137             continue
   142             line = line.splitlines()[0]
   138         line = line.splitlines()[0]
   143             missing.append(line[len(SKIPPED_PREFIX):])
   139         missing.append(line[len(SKIPPED_PREFIX):])
   144         elif line.startswith(FAILED_PREFIX):
   140 
   145             line = line.splitlines()[0]
   141     return missing
   146             failed.append(line[len(FAILED_PREFIX):])
       
   147 
       
   148     return missing, failed
   142 
   149 
   143 def show_diff(expected, output):
   150 def show_diff(expected, output):
   144     for line in difflib.unified_diff(expected, output,
   151     for line in difflib.unified_diff(expected, output,
   145             "Expected output", "Test output"):
   152             "Expected output", "Test output"):
   146         sys.stdout.write(line)
   153         sys.stdout.write(line)
   406         f.close()
   413         f.close()
   407     else:
   414     else:
   408         ref_out = []
   415         ref_out = []
   409     if skipped:
   416     if skipped:
   410         mark = 's'
   417         mark = 's'
   411         missing = extract_missing_features(out)
   418         missing, failed = parse_hghave_output(out)
   412         if not missing:
   419         if not missing:
   413             missing = ['irrelevant']
   420             missing = ['irrelevant']
   414         skip(missing[-1])
   421         if failed:
       
   422             fail("hghave failed checking for %s" % failed[-1])
       
   423             skipped = False
       
   424         else:
       
   425             skip(missing[-1])
   415     elif out != ref_out:
   426     elif out != ref_out:
   416         mark = '!'
   427         mark = '!'
   417         if ret:
   428         if ret:
   418             fail("output changed and returned error code %d" % ret)
   429             fail("output changed and returned error code %d" % ret)
   419         else:
   430         else: