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 = |
|
|
299 | parser = argparse.ArgumentParser(usage='%(prog)s [options] [tests]') | |
|
300 | 300 | |
|
301 | 301 | # keep these sorted |
|
302 |
parser.add_ |
|
|
302 | parser.add_argument("--blacklist", action="append", | |
|
303 | 303 | help="skip tests listed in the specified blacklist file") |
|
304 |
parser.add_ |
|
|
304 | parser.add_argument("--whitelist", action="append", | |
|
305 | 305 | help="always run tests listed in the specified whitelist file") |
|
306 |
parser.add_ |
|
|
307 |
|
|
|
308 |
parser.add_ |
|
|
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_ |
|
|
310 | parser.add_argument("-C", "--annotate", action="store_true", | |
|
311 | 311 | help="output files annotated with coverage") |
|
312 |
parser.add_ |
|
|
312 | parser.add_argument("-c", "--cover", action="store_true", | |
|
313 | 313 | help="print a test coverage report") |
|
314 |
parser.add_ |
|
|
315 | default=os.environ.get('HGRUNTESTSCOLOR', 'auto'), | |
|
316 | help="colorisation: always|auto|never (default: auto)") | |
|
317 |
parser.add_ |
|
|
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_ |
|
|
320 | parser.add_argument("-f", "--first", action="store_true", | |
|
321 | 321 | help="exit on the first test failure") |
|
322 |
parser.add_ |
|
|
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_ |
|
|
324 | parser.add_argument("-i", "--interactive", action="store_true", | |
|
325 | 325 | help="prompt to accept changed output") |
|
326 |
parser.add_ |
|
|
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_ |
|
|
329 | parser.add_argument("--keep-tmpdir", action="store_true", | |
|
330 | 330 | help="keep temporary directory after running tests") |
|
331 |
parser.add_ |
|
|
331 | parser.add_argument("-k", "--keywords", | |
|
332 | 332 | help="run tests matching keywords") |
|
333 |
parser.add_ |
|
|
333 | parser.add_argument("--list-tests", action="store_true", | |
|
334 | 334 | help="list tests instead of running them") |
|
335 |
parser.add_ |
|
|
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_ |
|
|
338 | parser.add_argument("--loop", action="store_true", | |
|
339 | 339 | help="loop tests repeatedly") |
|
340 |
parser.add_ |
|
|
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_ |
|
|
342 | parser.add_argument("-n", "--nodiff", action="store_true", | |
|
343 | 343 | help="skip showing test changes") |
|
344 |
parser.add_ |
|
|
344 | parser.add_argument("--outputdir", | |
|
345 | 345 | help="directory to write error logs to (default=test directory)") |
|
346 |
parser.add_ |
|
|
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_ |
|
|
349 | parser.add_argument("--compiler", | |
|
350 | 350 | help="compiler to build with") |
|
351 |
parser.add_ |
|
|
351 | parser.add_argument("--pure", action="store_true", | |
|
352 | 352 | help="use pure Python code instead of C extensions") |
|
353 |
parser.add_ |
|
|
353 | parser.add_argument("-R", "--restart", action="store_true", | |
|
354 | 354 | help="restart at last error") |
|
355 |
parser.add_ |
|
|
355 | parser.add_argument("-r", "--retest", action="store_true", | |
|
356 | 356 | help="retest failed tests") |
|
357 |
parser.add_ |
|
|
357 | parser.add_argument("-S", "--noskips", action="store_true", | |
|
358 | 358 | help="don't report skip tests verbosely") |
|
359 |
parser.add_ |
|
|
359 | parser.add_argument("--shell", | |
|
360 | 360 | help="shell to use (default: $%s or %s)" % defaults['shell']) |
|
361 |
parser.add_ |
|
|
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_ |
|
|
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_ |
|
|
367 | parser.add_argument("--time", action="store_true", | |
|
368 | 368 | help="time how long each test takes") |
|
369 |
parser.add_ |
|
|
370 |
|
|
|
371 |
parser.add_ |
|
|
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_ |
|
|
374 | parser.add_argument("-v", "--verbose", action="store_true", | |
|
375 | 375 | help="output verbose messages") |
|
376 |
parser.add_ |
|
|
377 |
|
|
|
378 |
parser.add_ |
|
|
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_ |
|
|
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_ |
|
|
385 | help="install and use chg wrapper in place of hg") | |
|
386 |
parser.add_ |
|
|
387 | help="use specified chg wrapper in place of hg") | |
|
388 |
parser.add_ |
|
|
389 | help="prefer IPv6 to IPv4 for network related tests") | |
|
390 |
parser.add_ |
|
|
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_ |
|
|
395 | help="Python 3 interpreter (if running under Python 2)" | |
|
396 | " (TEMPORARY)") | |
|
397 |
parser.add_ |
|
|
398 | help='set the given config opt in the test hgrc') | |
|
399 |
parser.add_ |
|
|
400 | help='run tests in random order') | |
|
401 |
parser.add_ |
|
|
402 | help='run statprof on run-tests') | |
|
403 |
parser.add_ |
|
|
404 | help='allow extremely slow tests') | |
|
405 |
parser.add_ |
|
|
406 | help='show scheduling channels') | |
|
407 |
parser.add_ |
|
|
408 | metavar="known_good_rev", | |
|
409 | help=("Automatically bisect any failures using this " | |
|
410 | "revision as a known-good revision.")) | |
|
411 |
parser.add_ |
|
|
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 |
|
|
|
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 |
|
|
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 |
|
|
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 |
|
|
|
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( |
|
|
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 |
|
|
|
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 |
|
|
|
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