##// END OF EJS Templates
run-tests: convert to argparse...
Gregory Szorc -
r35188:b4b0aed7 default
parent child Browse files
Show More
@@ -45,11 +45,11 b''
45 45
46 46 from __future__ import absolute_import, print_function
47 47
48 import argparse
48 49 import difflib
49 50 import distutils.version as version
50 51 import errno
51 52 import json
52 import optparse
53 53 import os
54 54 import random
55 55 import re
@@ -296,122 +296,125 b' def parsettestcases(path):'
296 296
297 297 def getparser():
298 298 """Obtain the OptionParser used by the CLI."""
299 parser = optparse.OptionParser("%prog [options] [tests]")
299 parser = argparse.ArgumentParser(usage='%(prog)s [options] [tests]')
300 300
301 301 # keep these sorted
302 parser.add_option("--blacklist", action="append",
302 parser.add_argument("--blacklist", action="append",
303 303 help="skip tests listed in the specified blacklist file")
304 parser.add_option("--whitelist", action="append",
304 parser.add_argument("--whitelist", action="append",
305 305 help="always run tests listed in the specified whitelist file")
306 parser.add_option("--test-list", action="append",
307 help="read tests to run from the specified file")
308 parser.add_option("--changed", type="string",
306 parser.add_argument("--test-list", action="append",
307 help="read tests to run from the specified file")
308 parser.add_argument("--changed",
309 309 help="run tests that are changed in parent rev or working directory")
310 parser.add_option("-C", "--annotate", action="store_true",
310 parser.add_argument("-C", "--annotate", action="store_true",
311 311 help="output files annotated with coverage")
312 parser.add_option("-c", "--cover", action="store_true",
312 parser.add_argument("-c", "--cover", action="store_true",
313 313 help="print a test coverage report")
314 parser.add_option("--color", choices=["always", "auto", "never"],
315 default=os.environ.get('HGRUNTESTSCOLOR', 'auto'),
316 help="colorisation: always|auto|never (default: auto)")
317 parser.add_option("-d", "--debug", action="store_true",
314 parser.add_argument("--color", choices=["always", "auto", "never"],
315 default=os.environ.get('HGRUNTESTSCOLOR', 'auto'),
316 help="colorisation: always|auto|never (default: auto)")
317 parser.add_argument("-d", "--debug", action="store_true",
318 318 help="debug mode: write output of test scripts to console"
319 319 " rather than capturing and diffing it (disables timeout)")
320 parser.add_option("-f", "--first", action="store_true",
320 parser.add_argument("-f", "--first", action="store_true",
321 321 help="exit on the first test failure")
322 parser.add_option("-H", "--htmlcov", action="store_true",
322 parser.add_argument("-H", "--htmlcov", action="store_true",
323 323 help="create an HTML report of the coverage of the files")
324 parser.add_option("-i", "--interactive", action="store_true",
324 parser.add_argument("-i", "--interactive", action="store_true",
325 325 help="prompt to accept changed output")
326 parser.add_option("-j", "--jobs", type="int",
326 parser.add_argument("-j", "--jobs", type=int,
327 327 help="number of jobs to run in parallel"
328 328 " (default: $%s or %d)" % defaults['jobs'])
329 parser.add_option("--keep-tmpdir", action="store_true",
329 parser.add_argument("--keep-tmpdir", action="store_true",
330 330 help="keep temporary directory after running tests")
331 parser.add_option("-k", "--keywords",
331 parser.add_argument("-k", "--keywords",
332 332 help="run tests matching keywords")
333 parser.add_option("--list-tests", action="store_true",
333 parser.add_argument("--list-tests", action="store_true",
334 334 help="list tests instead of running them")
335 parser.add_option("-l", "--local", action="store_true",
335 parser.add_argument("-l", "--local", action="store_true",
336 336 help="shortcut for --with-hg=<testdir>/../hg, "
337 337 "and --with-chg=<testdir>/../contrib/chg/chg if --chg is set")
338 parser.add_option("--loop", action="store_true",
338 parser.add_argument("--loop", action="store_true",
339 339 help="loop tests repeatedly")
340 parser.add_option("--runs-per-test", type="int", dest="runs_per_test",
340 parser.add_argument("--runs-per-test", type=int, dest="runs_per_test",
341 341 help="run each test N times (default=1)", default=1)
342 parser.add_option("-n", "--nodiff", action="store_true",
342 parser.add_argument("-n", "--nodiff", action="store_true",
343 343 help="skip showing test changes")
344 parser.add_option("--outputdir", type="string",
344 parser.add_argument("--outputdir",
345 345 help="directory to write error logs to (default=test directory)")
346 parser.add_option("-p", "--port", type="int",
346 parser.add_argument("-p", "--port", type=int,
347 347 help="port on which servers should listen"
348 348 " (default: $%s or %d)" % defaults['port'])
349 parser.add_option("--compiler", type="string",
349 parser.add_argument("--compiler",
350 350 help="compiler to build with")
351 parser.add_option("--pure", action="store_true",
351 parser.add_argument("--pure", action="store_true",
352 352 help="use pure Python code instead of C extensions")
353 parser.add_option("-R", "--restart", action="store_true",
353 parser.add_argument("-R", "--restart", action="store_true",
354 354 help="restart at last error")
355 parser.add_option("-r", "--retest", action="store_true",
355 parser.add_argument("-r", "--retest", action="store_true",
356 356 help="retest failed tests")
357 parser.add_option("-S", "--noskips", action="store_true",
357 parser.add_argument("-S", "--noskips", action="store_true",
358 358 help="don't report skip tests verbosely")
359 parser.add_option("--shell", type="string",
359 parser.add_argument("--shell",
360 360 help="shell to use (default: $%s or %s)" % defaults['shell'])
361 parser.add_option("-t", "--timeout", type="int",
361 parser.add_argument("-t", "--timeout", type=int,
362 362 help="kill errant tests after TIMEOUT seconds"
363 363 " (default: $%s or %d)" % defaults['timeout'])
364 parser.add_option("--slowtimeout", type="int",
364 parser.add_argument("--slowtimeout", type=int,
365 365 help="kill errant slow tests after SLOWTIMEOUT seconds"
366 366 " (default: $%s or %d)" % defaults['slowtimeout'])
367 parser.add_option("--time", action="store_true",
367 parser.add_argument("--time", action="store_true",
368 368 help="time how long each test takes")
369 parser.add_option("--json", action="store_true",
370 help="store test result data in 'report.json' file")
371 parser.add_option("--tmpdir", type="string",
369 parser.add_argument("--json", action="store_true",
370 help="store test result data in 'report.json' file")
371 parser.add_argument("--tmpdir",
372 372 help="run tests in the given temporary directory"
373 373 " (implies --keep-tmpdir)")
374 parser.add_option("-v", "--verbose", action="store_true",
374 parser.add_argument("-v", "--verbose", action="store_true",
375 375 help="output verbose messages")
376 parser.add_option("--xunit", type="string",
377 help="record xunit results at specified path")
378 parser.add_option("--view", type="string",
376 parser.add_argument("--xunit",
377 help="record xunit results at specified path")
378 parser.add_argument("--view",
379 379 help="external diff viewer")
380 parser.add_option("--with-hg", type="string",
380 parser.add_argument("--with-hg",
381 381 metavar="HG",
382 382 help="test using specified hg script rather than a "
383 383 "temporary installation")
384 parser.add_option("--chg", action="store_true",
385 help="install and use chg wrapper in place of hg")
386 parser.add_option("--with-chg", metavar="CHG",
387 help="use specified chg wrapper in place of hg")
388 parser.add_option("--ipv6", action="store_true",
389 help="prefer IPv6 to IPv4 for network related tests")
390 parser.add_option("-3", "--py3k-warnings", action="store_true",
384 parser.add_argument("--chg", action="store_true",
385 help="install and use chg wrapper in place of hg")
386 parser.add_argument("--with-chg", metavar="CHG",
387 help="use specified chg wrapper in place of hg")
388 parser.add_argument("--ipv6", action="store_true",
389 help="prefer IPv6 to IPv4 for network related tests")
390 parser.add_argument("-3", "--py3k-warnings", action="store_true",
391 391 help="enable Py3k warnings on Python 2.7+")
392 392 # This option should be deleted once test-check-py3-compat.t and other
393 393 # Python 3 tests run with Python 3.
394 parser.add_option("--with-python3", metavar="PYTHON3",
395 help="Python 3 interpreter (if running under Python 2)"
396 " (TEMPORARY)")
397 parser.add_option('--extra-config-opt', action="append",
398 help='set the given config opt in the test hgrc')
399 parser.add_option('--random', action="store_true",
400 help='run tests in random order')
401 parser.add_option('--profile-runner', action='store_true',
402 help='run statprof on run-tests')
403 parser.add_option('--allow-slow-tests', action='store_true',
404 help='allow extremely slow tests')
405 parser.add_option('--showchannels', action='store_true',
406 help='show scheduling channels')
407 parser.add_option('--known-good-rev', type="string",
408 metavar="known_good_rev",
409 help=("Automatically bisect any failures using this "
410 "revision as a known-good revision."))
411 parser.add_option('--bisect-repo', type="string",
412 metavar='bisect_repo',
413 help=("Path of a repo to bisect. Use together with "
414 "--known-good-rev"))
394 parser.add_argument("--with-python3", metavar="PYTHON3",
395 help="Python 3 interpreter (if running under Python 2)"
396 " (TEMPORARY)")
397 parser.add_argument('--extra-config-opt', action="append",
398 help='set the given config opt in the test hgrc')
399 parser.add_argument('--random', action="store_true",
400 help='run tests in random order')
401 parser.add_argument('--profile-runner', action='store_true',
402 help='run statprof on run-tests')
403 parser.add_argument('--allow-slow-tests', action='store_true',
404 help='allow extremely slow tests')
405 parser.add_argument('--showchannels', action='store_true',
406 help='show scheduling channels')
407 parser.add_argument('--known-good-rev',
408 metavar="known_good_rev",
409 help=("Automatically bisect any failures using this "
410 "revision as a known-good revision."))
411 parser.add_argument('--bisect-repo',
412 metavar='bisect_repo',
413 help=("Path of a repo to bisect. Use together with "
414 "--known-good-rev"))
415
416 parser.add_argument('tests', metavar='TESTS', nargs='*',
417 help='Tests to run')
415 418
416 419 for option, (envvar, default) in defaults.items():
417 420 defaults[option] = type(default)(os.environ.get(envvar, default))
@@ -421,7 +424,7 b' def getparser():'
421 424
422 425 def parseargs(args, parser):
423 426 """Parse arguments with our OptionParser and validate results."""
424 (options, args) = parser.parse_args(args)
427 options = parser.parse_args(args)
425 428
426 429 # jython is always pure
427 430 if 'java' in sys.platform or '__pypy__' in sys.modules:
@@ -550,7 +553,7 b' def parseargs(args, parser):'
550 553 if options.showchannels:
551 554 options.nodiff = True
552 555
553 return (options, args)
556 return options
554 557
555 558 def rename(src, dst):
556 559 """Like os.rename(), trade atomicity and opened files friendliness
@@ -2298,18 +2301,16 b' class TestRunner(object):'
2298 2301 oldmask = os.umask(0o22)
2299 2302 try:
2300 2303 parser = parser or getparser()
2301 options, args = parseargs(args, parser)
2302 # positional arguments are paths to test files to run, so
2303 # we make sure they're all bytestrings
2304 args = [_bytespath(a) for a in args]
2304 options = parseargs(args, parser)
2305 tests = [_bytespath(a) for a in options.tests]
2305 2306 if options.test_list is not None:
2306 2307 for listfile in options.test_list:
2307 2308 with open(listfile, 'rb') as f:
2308 args.extend(t for t in f.read().splitlines() if t)
2309 tests.extend(t for t in f.read().splitlines() if t)
2309 2310 self.options = options
2310 2311
2311 2312 self._checktools()
2312 testdescs = self.findtests(args)
2313 testdescs = self.findtests(tests)
2313 2314 if options.profile_runner:
2314 2315 import statprof
2315 2316 statprof.start()
@@ -32,8 +32,7 b' error paths'
32 32 #if execbit
33 33 $ touch hg
34 34 $ run-tests.py --with-hg=./hg
35 Usage: run-tests.py [options] [tests]
36
35 usage: run-tests.py [options] [tests]
37 36 run-tests.py: error: --with-hg must specify an executable hg script
38 37 [2]
39 38 $ rm hg
@@ -1383,8 +1382,7 b' support bisecting a separate repo'
1383 1382 [1]
1384 1383
1385 1384 $ rt --bisect-repo=../test-bisect test-bisect-dependent.t
1386 Usage: run-tests.py [options] [tests]
1387
1385 usage: run-tests.py [options] [tests]
1388 1386 run-tests.py: error: --bisect-repo cannot be used without --known-good-rev
1389 1387 [2]
1390 1388
General Comments 0
You need to be logged in to leave comments. Login now