comparison tests/run-tests.py @ 3625:cc0cd5942223

tests: add -R switch Restarts at first .err file if one exists, otherwise runs all tests
author Matt Mackall <mpm@selenic.com>
date Wed, 08 Nov 2006 13:20:08 -0600
parents a90a86929d04
children 02e9355c3420
comparison
equal deleted inserted replaced
3624:a90a86929d04 3625:cc0cd5942223
34 help="output files annotated with coverage") 34 help="output files annotated with coverage")
35 parser.add_option("-r", "--retest", action="store_true", 35 parser.add_option("-r", "--retest", action="store_true",
36 help="retest failed tests") 36 help="retest failed tests")
37 parser.add_option("-f", "--first", action="store_true", 37 parser.add_option("-f", "--first", action="store_true",
38 help="exit on the first test failure") 38 help="exit on the first test failure")
39 parser.add_option("-R", "--restart", action="store_true",
40 help="restart at last error")
39 41
40 parser.set_defaults(timeout=180) 42 parser.set_defaults(timeout=180)
41 (options, args) = parser.parse_args() 43 (options, args) = parser.parse_args()
42 verbose = options.verbose 44 verbose = options.verbose
43 coverage = options.cover or options.cover_stdlib or options.annotate 45 coverage = options.cover or options.cover_stdlib or options.annotate
353 options.timeout) 355 options.timeout)
354 except AttributeError: 356 except AttributeError:
355 print 'WARNING: cannot run tests with timeouts' 357 print 'WARNING: cannot run tests with timeouts'
356 options.timeout = 0 358 options.timeout = 0
357 359
358 tests = 0 360 tested = 0
359 failed = 0 361 failed = 0
360 skipped = 0 362 skipped = 0
361 363
362 if len(args) == 0: 364 if len(args) == 0:
363 args = os.listdir(".") 365 args = os.listdir(".")
364 args.sort() 366 args.sort()
365 367
368
369 tests = []
366 for test in args: 370 for test in args:
367 if (test.startswith("test-") and '~' not in test and 371 if (test.startswith("test-") and '~' not in test and
368 ('.' not in test or test.endswith('.py') or 372 ('.' not in test or test.endswith('.py') or
369 test.endswith('.bat'))): 373 test.endswith('.bat'))):
370 if options.retest and not os.path.exists(test + ".err"): 374 tests.append(test)
371 skipped += 1 375
372 continue 376 if options.restart:
373 ret = run_one(test) 377 orig = list(tests)
374 if ret is None: 378 while tests:
375 skipped += 1 379 if os.path.exists(tests[0] + ".err"):
376 elif not ret: 380 break
377 failed += 1 381 tests.pop(0)
378 if options.first: 382 if not tests:
379 break 383 print "running all tests"
380 tests += 1 384 tests = orig
381 385
382 print "\n# Ran %d tests, %d skipped, %d failed." % (tests, skipped, 386 for test in tests:
387 if options.retest and not os.path.exists(test + ".err"):
388 skipped += 1
389 continue
390 ret = run_one(test)
391 if ret is None:
392 skipped += 1
393 elif not ret:
394 failed += 1
395 if options.first:
396 break
397 tested += 1
398
399 print "\n# Ran %d tests, %d skipped, %d failed." % (tested, skipped,
383 failed) 400 failed)
384 if coverage: 401 if coverage:
385 output_coverage() 402 output_coverage()
386 except KeyboardInterrupt: 403 except KeyboardInterrupt:
387 failed = True 404 failed = True