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") |