tests/run-tests.py
changeset 19249 de45df2688a9
parent 19248 6a127fa5de23
child 19250 5fa946330970
equal deleted inserted replaced
19248:6a127fa5de23 19249:de45df2688a9
   850             if answer.lower() in "y yes".split():
   850             if answer.lower() in "y yes".split():
   851                 if test.endswith(".t"):
   851                 if test.endswith(".t"):
   852                     rename(testpath + ".err", testpath)
   852                     rename(testpath + ".err", testpath)
   853                 else:
   853                 else:
   854                     rename(testpath + ".err", testpath + ".out")
   854                     rename(testpath + ".err", testpath + ".out")
   855                 return 'p', test, ''
   855                 return '.', test, ''
   856         return 'f', test, msg
   856         return '!', test, msg
   857 
   857 
   858     def success():
   858     def success():
   859         return 'p', test, ''
   859         return '.', test, ''
   860 
   860 
   861     def ignore(msg):
   861     def ignore(msg):
   862         return 'i', test, msg
   862         return 'i', test, msg
   863 
   863 
   864     def describe(ret):
   864     def describe(ret):
   935         times.append((test, endtime - starttime))
   935         times.append((test, endtime - starttime))
   936     vlog("# Ret was:", ret)
   936     vlog("# Ret was:", ret)
   937 
   937 
   938     killdaemons()
   938     killdaemons()
   939 
   939 
   940     mark = '.'
       
   941 
       
   942     skipped = (ret == SKIPPED_STATUS)
   940     skipped = (ret == SKIPPED_STATUS)
   943 
   941 
   944     # If we're not in --debug mode and reference output file exists,
   942     # If we're not in --debug mode and reference output file exists,
   945     # check test output against it.
   943     # check test output against it.
   946     if options.debug:
   944     if options.debug:
   958         for line in out:
   956         for line in out:
   959             f.write(line)
   957             f.write(line)
   960         f.close()
   958         f.close()
   961 
   959 
   962     if skipped:
   960     if skipped:
   963         mark = 's'
       
   964         if out is None:                 # debug mode: nothing to parse
   961         if out is None:                 # debug mode: nothing to parse
   965             missing = ['unknown']
   962             missing = ['unknown']
   966             failed = None
   963             failed = None
   967         else:
   964         else:
   968             missing, failed = parsehghaveoutput(out)
   965             missing, failed = parsehghaveoutput(out)
   972             result = fail("hghave failed checking for %s" % failed[-1], ret)
   969             result = fail("hghave failed checking for %s" % failed[-1], ret)
   973             skipped = False
   970             skipped = False
   974         else:
   971         else:
   975             result = skip(missing[-1])
   972             result = skip(missing[-1])
   976     elif ret == 'timeout':
   973     elif ret == 'timeout':
   977         mark = 't'
       
   978         result = fail("timed out", ret)
   974         result = fail("timed out", ret)
   979     elif out != refout:
   975     elif out != refout:
   980         mark = '!'
       
   981         if not options.nodiff:
   976         if not options.nodiff:
   982             iolock.acquire()
   977             iolock.acquire()
   983             if options.view:
   978             if options.view:
   984                 os.system("%s %s %s" % (options.view, ref, err))
   979                 os.system("%s %s %s" % (options.view, ref, err))
   985             else:
   980             else:
   988         if ret:
   983         if ret:
   989             result = fail("output changed and " + describe(ret), ret)
   984             result = fail("output changed and " + describe(ret), ret)
   990         else:
   985         else:
   991             result = fail("output changed", ret)
   986             result = fail("output changed", ret)
   992     elif ret:
   987     elif ret:
   993         mark = '!'
       
   994         result = fail(describe(ret), ret)
   988         result = fail(describe(ret), ret)
   995     else:
   989     else:
   996         result = success()
   990         result = success()
   997 
   991 
   998     if not options.verbose:
   992     if not options.verbose:
   999         iolock.acquire()
   993         iolock.acquire()
  1000         sys.stdout.write(mark)
   994         sys.stdout.write(result[0])
  1001         sys.stdout.flush()
   995         sys.stdout.flush()
  1002         iolock.release()
   996         iolock.release()
  1003 
   997 
  1004     if not options.keep_tmpdir:
   998     if not options.keep_tmpdir:
  1005         shutil.rmtree(testtmp, True)
   999         shutil.rmtree(testtmp, True)
  1114         try:
  1108         try:
  1115             childresults = pickle.load(fp)
  1109             childresults = pickle.load(fp)
  1116         except (pickle.UnpicklingError, EOFError):
  1110         except (pickle.UnpicklingError, EOFError):
  1117             sys.exit(255)
  1111             sys.exit(255)
  1118         else:
  1112         else:
  1119             passed += len(childresults['p'])
  1113             passed += len(childresults['.'])
  1120             skipped += len(childresults['s'])
  1114             skipped += len(childresults['s'])
  1121             failed += len(childresults['f'])
  1115             failed += len(childresults['!'])
  1122             skips.extend(childresults['s'])
  1116             skips.extend(childresults['s'])
  1123             fails.extend(childresults['f'])
  1117             fails.extend(childresults['!'])
  1124         if options.time:
  1118         if options.time:
  1125             childtimes = pickle.load(fp)
  1119             childtimes = pickle.load(fp)
  1126             times.extend(childtimes)
  1120             times.extend(childtimes)
  1127 
  1121 
  1128         vlog('pid %d exited, status %d' % (pid, status))
  1122         vlog('pid %d exited, status %d' % (pid, status))
  1145         outputtimes(options)
  1139         outputtimes(options)
  1146     if options.anycoverage:
  1140     if options.anycoverage:
  1147         outputcoverage(options)
  1141         outputcoverage(options)
  1148     sys.exit(failures != 0)
  1142     sys.exit(failures != 0)
  1149 
  1143 
  1150 results = dict(p=[], f=[], s=[], i=[])
  1144 results = {'.':[], '!':[], 's':[], 'i':[]}
  1151 resultslock = threading.Lock()
  1145 resultslock = threading.Lock()
  1152 times = []
  1146 times = []
  1153 iolock = threading.Lock()
  1147 iolock = threading.Lock()
  1154 
  1148 
  1155 def runqueue(options, tests):
  1149 def runqueue(options, tests):
  1186                 print "running all tests"
  1180                 print "running all tests"
  1187                 tests = orig
  1181                 tests = orig
  1188 
  1182 
  1189         runqueue(options, tests)
  1183         runqueue(options, tests)
  1190 
  1184 
  1191         failed = len(results['f'])
  1185         failed = len(results['!'])
  1192         tested = len(results['p']) + failed
  1186         tested = len(results['.']) + failed
  1193         skipped = len(results['s'])
  1187         skipped = len(results['s'])
  1194         ignored = len(results['i'])
  1188         ignored = len(results['i'])
  1195 
  1189 
  1196         if options.child:
  1190         if options.child:
  1197             fp = os.fdopen(options.child, 'wb')
  1191             fp = os.fdopen(options.child, 'wb')
  1201             fp.close()
  1195             fp.close()
  1202         else:
  1196         else:
  1203             print
  1197             print
  1204             for s in results['s']:
  1198             for s in results['s']:
  1205                 print "Skipped %s: %s" % s
  1199                 print "Skipped %s: %s" % s
  1206             for s in results['f']:
  1200             for s in results['!']:
  1207                 print "Failed %s: %s" % s
  1201                 print "Failed %s: %s" % s
  1208             _checkhglib("Tested")
  1202             _checkhglib("Tested")
  1209             print "# Ran %d tests, %d skipped, %d failed." % (
  1203             print "# Ran %d tests, %d skipped, %d failed." % (
  1210                 tested, skipped + ignored, failed)
  1204                 tested, skipped + ignored, failed)
  1211             if options.time:
  1205             if options.time: