tests/run-tests.py
changeset 7343 e47dab64be8d
parent 7214 0e8a9530d323
child 7448 7900d240c3d8
equal deleted inserted replaced
7342:1dcd2cc6878b 7343:e47dab64be8d
    61          " (default: $%s or %d)" % defaults['timeout'])
    61          " (default: $%s or %d)" % defaults['timeout'])
    62 parser.add_option("--tmpdir", type="string",
    62 parser.add_option("--tmpdir", type="string",
    63     help="run tests in the given temporary directory")
    63     help="run tests in the given temporary directory")
    64 parser.add_option("-v", "--verbose", action="store_true",
    64 parser.add_option("-v", "--verbose", action="store_true",
    65     help="output verbose messages")
    65     help="output verbose messages")
       
    66 parser.add_option("-n", "--nodiff", action="store_true",
       
    67     help="skip showing test changes")
    66 parser.add_option("--with-hg", type="string",
    68 parser.add_option("--with-hg", type="string",
    67     help="test existing install at given location")
    69     help="test existing install at given location")
    68 
    70 
    69 for option, default in defaults.items():
    71 for option, default in defaults.items():
    70     defaults[option] = int(os.environ.get(*default))
    72     defaults[option] = int(os.environ.get(*default))
    71 parser.set_defaults(**defaults)
    73 parser.set_defaults(**defaults)
    72 (options, args) = parser.parse_args()
    74 (options, args) = parser.parse_args()
    73 verbose = options.verbose
    75 verbose = options.verbose
       
    76 nodiff = options.nodiff
    74 coverage = options.cover or options.cover_stdlib or options.annotate
    77 coverage = options.cover or options.cover_stdlib or options.annotate
    75 python = sys.executable
    78 python = sys.executable
    76 
    79 
    77 if options.jobs < 1:
    80 if options.jobs < 1:
    78     print >> sys.stderr, 'ERROR: -j/--jobs must be positive'
    81     print >> sys.stderr, 'ERROR: -j/--jobs must be positive'
   306             print "\nSkipping %s: %s" % (test, msg)
   309             print "\nSkipping %s: %s" % (test, msg)
   307         return None
   310         return None
   308 
   311 
   309     def fail(msg):
   312     def fail(msg):
   310         fails.append((test, msg))
   313         fails.append((test, msg))
   311         print "\nERROR: %s %s" % (test, msg)
   314         if not nodiff:
       
   315             print "\nERROR: %s %s" % (test, msg)
   312         return None
   316         return None
   313 
   317 
   314     vlog("# Test", test)
   318     vlog("# Test", test)
   315 
   319 
   316     # create a fresh hgrc
   320     # create a fresh hgrc
   372     vlog("# Ret was:", ret)
   376     vlog("# Ret was:", ret)
   373 
   377 
   374     if options.timeout > 0:
   378     if options.timeout > 0:
   375         signal.alarm(0)
   379         signal.alarm(0)
   376 
   380 
       
   381     mark = '.'
       
   382 
   377     skipped = (ret == SKIPPED_STATUS)
   383     skipped = (ret == SKIPPED_STATUS)
   378     # If reference output file exists, check test output against it
   384     # If reference output file exists, check test output against it
   379     if os.path.exists(ref):
   385     if os.path.exists(ref):
   380         f = open(ref, "r")
   386         f = open(ref, "r")
   381         ref_out = splitnewlines(f.read())
   387         ref_out = splitnewlines(f.read())
   382         f.close()
   388         f.close()
   383     else:
   389     else:
   384         ref_out = []
   390         ref_out = []
   385     if skipped:
   391     if skipped:
       
   392         mark = 's'
   386         missing = extract_missing_features(out)
   393         missing = extract_missing_features(out)
   387         if not missing:
   394         if not missing:
   388             missing = ['irrelevant']
   395             missing = ['irrelevant']
   389         skip(missing[-1])
   396         skip(missing[-1])
   390     elif out != ref_out:
   397     elif out != ref_out:
       
   398         mark = '!'
   391         if ret:
   399         if ret:
   392             fail("output changed and returned error code %d" % ret)
   400             fail("output changed and returned error code %d" % ret)
   393         else:
   401         else:
   394             fail("output changed")
   402             fail("output changed")
   395         show_diff(ref_out, out)
   403             if not nodiff:
       
   404                 show_diff(ref_out, out)
   396         ret = 1
   405         ret = 1
   397     elif ret:
   406     elif ret:
       
   407         mark = '!'
   398         fail("returned error code %d" % ret)
   408         fail("returned error code %d" % ret)
   399 
   409 
   400     if not verbose:
   410     if not verbose:
   401         sys.stdout.write(skipped and 's' or '.')
   411         sys.stdout.write(mark)
   402         sys.stdout.flush()
   412         sys.stdout.flush()
   403 
   413 
   404     if ret != 0 and not skipped:
   414     if ret != 0 and not skipped:
   405         # Save errors to a file for diagnosis
   415         # Save errors to a file for diagnosis
   406         f = open(err, "wb")
   416         f = open(err, "wb")