Mercurial > hg
comparison tests/run-tests.py @ 35188:d997b82152e8
run-tests: organize options into argument groups
And sort arguments so help output is more legible.
There are probably a ton of ways to group things. I tried to
picture the test harness as a pipeline and attempted to draw boundaries
around stages in that pipeline to create the groupings.
Differential Revision: https://phab.mercurial-scm.org/D1475
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 20 Nov 2017 21:08:18 -0800 |
parents | b4b0aed7bfaf |
children | 073843b5e353 |
comparison
equal
deleted
inserted
replaced
35187:b4b0aed7bfaf | 35188:d997b82152e8 |
---|---|
296 | 296 |
297 def getparser(): | 297 def getparser(): |
298 """Obtain the OptionParser used by the CLI.""" | 298 """Obtain the OptionParser used by the CLI.""" |
299 parser = argparse.ArgumentParser(usage='%(prog)s [options] [tests]') | 299 parser = argparse.ArgumentParser(usage='%(prog)s [options] [tests]') |
300 | 300 |
301 # keep these sorted | 301 selection = parser.add_argument_group('Test Selection') |
302 parser.add_argument("--blacklist", action="append", | 302 selection.add_argument('--allow-slow-tests', action='store_true', |
303 help='allow extremely slow tests') | |
304 selection.add_argument("--blacklist", action="append", | |
303 help="skip tests listed in the specified blacklist file") | 305 help="skip tests listed in the specified blacklist file") |
304 parser.add_argument("--whitelist", action="append", | 306 selection.add_argument("--changed", |
307 help="run tests that are changed in parent rev or working directory") | |
308 selection.add_argument("-k", "--keywords", | |
309 help="run tests matching keywords") | |
310 selection.add_argument("-r", "--retest", action="store_true", | |
311 help = "retest failed tests") | |
312 selection.add_argument("--test-list", action="append", | |
313 help="read tests to run from the specified file") | |
314 selection.add_argument("--whitelist", action="append", | |
305 help="always run tests listed in the specified whitelist file") | 315 help="always run tests listed in the specified whitelist file") |
306 parser.add_argument("--test-list", action="append", | 316 selection.add_argument('tests', metavar='TESTS', nargs='*', |
307 help="read tests to run from the specified file") | 317 help='Tests to run') |
308 parser.add_argument("--changed", | 318 |
309 help="run tests that are changed in parent rev or working directory") | 319 harness = parser.add_argument_group('Test Harness Behavior') |
310 parser.add_argument("-C", "--annotate", action="store_true", | 320 harness.add_argument('--bisect-repo', |
311 help="output files annotated with coverage") | 321 metavar='bisect_repo', |
312 parser.add_argument("-c", "--cover", action="store_true", | 322 help=("Path of a repo to bisect. Use together with " |
313 help="print a test coverage report") | 323 "--known-good-rev")) |
314 parser.add_argument("--color", choices=["always", "auto", "never"], | 324 harness.add_argument("-d", "--debug", action="store_true", |
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 help="debug mode: write output of test scripts to console" | 325 help="debug mode: write output of test scripts to console" |
319 " rather than capturing and diffing it (disables timeout)") | 326 " rather than capturing and diffing it (disables timeout)") |
320 parser.add_argument("-f", "--first", action="store_true", | 327 harness.add_argument("-f", "--first", action="store_true", |
321 help="exit on the first test failure") | 328 help="exit on the first test failure") |
322 parser.add_argument("-H", "--htmlcov", action="store_true", | 329 harness.add_argument("-i", "--interactive", action="store_true", |
323 help="create an HTML report of the coverage of the files") | |
324 parser.add_argument("-i", "--interactive", action="store_true", | |
325 help="prompt to accept changed output") | 330 help="prompt to accept changed output") |
326 parser.add_argument("-j", "--jobs", type=int, | 331 harness.add_argument("-j", "--jobs", type=int, |
327 help="number of jobs to run in parallel" | 332 help="number of jobs to run in parallel" |
328 " (default: $%s or %d)" % defaults['jobs']) | 333 " (default: $%s or %d)" % defaults['jobs']) |
329 parser.add_argument("--keep-tmpdir", action="store_true", | 334 harness.add_argument("--keep-tmpdir", action="store_true", |
330 help="keep temporary directory after running tests") | 335 help="keep temporary directory after running tests") |
331 parser.add_argument("-k", "--keywords", | 336 harness.add_argument('--known-good-rev', |
332 help="run tests matching keywords") | 337 metavar="known_good_rev", |
333 parser.add_argument("--list-tests", action="store_true", | 338 help=("Automatically bisect any failures using this " |
339 "revision as a known-good revision.")) | |
340 harness.add_argument("--list-tests", action="store_true", | |
334 help="list tests instead of running them") | 341 help="list tests instead of running them") |
335 parser.add_argument("-l", "--local", action="store_true", | 342 harness.add_argument("--loop", action="store_true", |
343 help="loop tests repeatedly") | |
344 harness.add_argument('--random', action="store_true", | |
345 help='run tests in random order') | |
346 harness.add_argument("-p", "--port", type=int, | |
347 help="port on which servers should listen" | |
348 " (default: $%s or %d)" % defaults['port']) | |
349 harness.add_argument('--profile-runner', action='store_true', | |
350 help='run statprof on run-tests') | |
351 harness.add_argument("-R", "--restart", action="store_true", | |
352 help="restart at last error") | |
353 harness.add_argument("--runs-per-test", type=int, dest="runs_per_test", | |
354 help="run each test N times (default=1)", default=1) | |
355 harness.add_argument("--shell", | |
356 help="shell to use (default: $%s or %s)" % defaults['shell']) | |
357 harness.add_argument('--showchannels', action='store_true', | |
358 help='show scheduling channels') | |
359 harness.add_argument("--slowtimeout", type=int, | |
360 help="kill errant slow tests after SLOWTIMEOUT seconds" | |
361 " (default: $%s or %d)" % defaults['slowtimeout']) | |
362 harness.add_argument("-t", "--timeout", type=int, | |
363 help="kill errant tests after TIMEOUT seconds" | |
364 " (default: $%s or %d)" % defaults['timeout']) | |
365 harness.add_argument("--tmpdir", | |
366 help="run tests in the given temporary directory" | |
367 " (implies --keep-tmpdir)") | |
368 harness.add_argument("-v", "--verbose", action="store_true", | |
369 help="output verbose messages") | |
370 | |
371 hgconf = parser.add_argument_group('Mercurial Configuration') | |
372 hgconf.add_argument("--chg", action="store_true", | |
373 help="install and use chg wrapper in place of hg") | |
374 hgconf.add_argument("--compiler", | |
375 help="compiler to build with") | |
376 hgconf.add_argument('--extra-config-opt', action="append", | |
377 help='set the given config opt in the test hgrc') | |
378 hgconf.add_argument("-l", "--local", action="store_true", | |
336 help="shortcut for --with-hg=<testdir>/../hg, " | 379 help="shortcut for --with-hg=<testdir>/../hg, " |
337 "and --with-chg=<testdir>/../contrib/chg/chg if --chg is set") | 380 "and --with-chg=<testdir>/../contrib/chg/chg if --chg is set") |
338 parser.add_argument("--loop", action="store_true", | 381 hgconf.add_argument("--ipv6", action="store_true", |
339 help="loop tests repeatedly") | 382 help="prefer IPv6 to IPv4 for network related tests") |
340 parser.add_argument("--runs-per-test", type=int, dest="runs_per_test", | 383 hgconf.add_argument("--pure", action="store_true", |
341 help="run each test N times (default=1)", default=1) | |
342 parser.add_argument("-n", "--nodiff", action="store_true", | |
343 help="skip showing test changes") | |
344 parser.add_argument("--outputdir", | |
345 help="directory to write error logs to (default=test directory)") | |
346 parser.add_argument("-p", "--port", type=int, | |
347 help="port on which servers should listen" | |
348 " (default: $%s or %d)" % defaults['port']) | |
349 parser.add_argument("--compiler", | |
350 help="compiler to build with") | |
351 parser.add_argument("--pure", action="store_true", | |
352 help="use pure Python code instead of C extensions") | 384 help="use pure Python code instead of C extensions") |
353 parser.add_argument("-R", "--restart", action="store_true", | 385 hgconf.add_argument("-3", "--py3k-warnings", action="store_true", |
354 help="restart at last error") | 386 help="enable Py3k warnings on Python 2.7+") |
355 parser.add_argument("-r", "--retest", action="store_true", | 387 hgconf.add_argument("--with-chg", metavar="CHG", |
356 help="retest failed tests") | 388 help="use specified chg wrapper in place of hg") |
357 parser.add_argument("-S", "--noskips", action="store_true", | 389 hgconf.add_argument("--with-hg", |
358 help="don't report skip tests verbosely") | |
359 parser.add_argument("--shell", | |
360 help="shell to use (default: $%s or %s)" % defaults['shell']) | |
361 parser.add_argument("-t", "--timeout", type=int, | |
362 help="kill errant tests after TIMEOUT seconds" | |
363 " (default: $%s or %d)" % defaults['timeout']) | |
364 parser.add_argument("--slowtimeout", type=int, | |
365 help="kill errant slow tests after SLOWTIMEOUT seconds" | |
366 " (default: $%s or %d)" % defaults['slowtimeout']) | |
367 parser.add_argument("--time", action="store_true", | |
368 help="time how long each test takes") | |
369 parser.add_argument("--json", action="store_true", | |
370 help="store test result data in 'report.json' file") | |
371 parser.add_argument("--tmpdir", | |
372 help="run tests in the given temporary directory" | |
373 " (implies --keep-tmpdir)") | |
374 parser.add_argument("-v", "--verbose", action="store_true", | |
375 help="output verbose messages") | |
376 parser.add_argument("--xunit", | |
377 help="record xunit results at specified path") | |
378 parser.add_argument("--view", | |
379 help="external diff viewer") | |
380 parser.add_argument("--with-hg", | |
381 metavar="HG", | 390 metavar="HG", |
382 help="test using specified hg script rather than a " | 391 help="test using specified hg script rather than a " |
383 "temporary installation") | 392 "temporary installation") |
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 help="enable Py3k warnings on Python 2.7+") | |
392 # This option should be deleted once test-check-py3-compat.t and other | 393 # This option should be deleted once test-check-py3-compat.t and other |
393 # Python 3 tests run with Python 3. | 394 # Python 3 tests run with Python 3. |
394 parser.add_argument("--with-python3", metavar="PYTHON3", | 395 hgconf.add_argument("--with-python3", metavar="PYTHON3", |
395 help="Python 3 interpreter (if running under Python 2)" | 396 help="Python 3 interpreter (if running under Python 2)" |
396 " (TEMPORARY)") | 397 " (TEMPORARY)") |
397 parser.add_argument('--extra-config-opt', action="append", | 398 |
398 help='set the given config opt in the test hgrc') | 399 reporting = parser.add_argument_group('Results Reporting') |
399 parser.add_argument('--random', action="store_true", | 400 reporting.add_argument("-C", "--annotate", action="store_true", |
400 help='run tests in random order') | 401 help="output files annotated with coverage") |
401 parser.add_argument('--profile-runner', action='store_true', | 402 reporting.add_argument("--color", choices=["always", "auto", "never"], |
402 help='run statprof on run-tests') | 403 default=os.environ.get('HGRUNTESTSCOLOR', 'auto'), |
403 parser.add_argument('--allow-slow-tests', action='store_true', | 404 help="colorisation: always|auto|never (default: auto)") |
404 help='allow extremely slow tests') | 405 reporting.add_argument("-c", "--cover", action="store_true", |
405 parser.add_argument('--showchannels', action='store_true', | 406 help="print a test coverage report") |
406 help='show scheduling channels') | 407 reporting.add_argument("-H", "--htmlcov", action="store_true", |
407 parser.add_argument('--known-good-rev', | 408 help="create an HTML report of the coverage of the files") |
408 metavar="known_good_rev", | 409 reporting.add_argument("--json", action="store_true", |
409 help=("Automatically bisect any failures using this " | 410 help="store test result data in 'report.json' file") |
410 "revision as a known-good revision.")) | 411 reporting.add_argument("--outputdir", |
411 parser.add_argument('--bisect-repo', | 412 help="directory to write error logs to (default=test directory)") |
412 metavar='bisect_repo', | 413 reporting.add_argument("-n", "--nodiff", action="store_true", |
413 help=("Path of a repo to bisect. Use together with " | 414 help="skip showing test changes") |
414 "--known-good-rev")) | 415 reporting.add_argument("-S", "--noskips", action="store_true", |
415 | 416 help="don't report skip tests verbosely") |
416 parser.add_argument('tests', metavar='TESTS', nargs='*', | 417 reporting.add_argument("--time", action="store_true", |
417 help='Tests to run') | 418 help="time how long each test takes") |
419 reporting.add_argument("--view", | |
420 help="external diff viewer") | |
421 reporting.add_argument("--xunit", | |
422 help="record xunit results at specified path") | |
418 | 423 |
419 for option, (envvar, default) in defaults.items(): | 424 for option, (envvar, default) in defaults.items(): |
420 defaults[option] = type(default)(os.environ.get(envvar, default)) | 425 defaults[option] = type(default)(os.environ.get(envvar, default)) |
421 parser.set_defaults(**defaults) | 426 parser.set_defaults(**defaults) |
422 | 427 |