Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Unified Diff: recipe_engine/test.py

Issue 2848443003: [recipes.py] add missing helpstrings, merge test subcommands into main parser. (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « recipe_engine/run.py ('k') | recipes.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: recipe_engine/test.py
diff --git a/recipe_engine/test.py b/recipe_engine/test.py
index bb31a762b5b75f5f1b68f38746f1f5db0d3dac8e..94fb5ad03f97b5a65d4efff6a2543115412a7db2 100644
--- a/recipe_engine/test.py
+++ b/recipe_engine/test.py
@@ -824,106 +824,96 @@ def re_encode(obj):
return obj
-def parse_args(args):
- """Returns parsed command line arguments."""
- parser = argparse.ArgumentParser()
+def add_subparser(parser):
+ helpstr='Generate or check expectations by simulation.'
+ test_p = parser.add_parser(
+ 'test',
+ help=helpstr, description=helpstr)
def normalize_filter(filt):
if not filt:
- parser.error('empty filters not allowed')
+ raise argparse.ArgumentTypeError('empty filters not allowed')
# filters missing a test_name portion imply that its a recipe prefix and we
# should run all tests for the matching recipes.
return filt if '.' in filt else filt+'*.*'
- subp = parser.add_subparsers(dest='command')
+ subp = test_p.add_subparsers(dest='subcommand')
- list_p = subp.add_parser('list', description='Print all test names')
- list_p.set_defaults(func=lambda opts: run_list(opts.json))
+ helpstr = 'Print all test names.'
+ list_p = subp.add_parser(
+ 'list', help=helpstr, description=helpstr)
+ list_p.set_defaults(subfunc=lambda opts: run_list(opts.json))
list_p.add_argument(
- '--json', metavar='FILE', type=argparse.FileType('w'),
- help='path to JSON output file')
+ '--json', metavar='FILE', type=argparse.FileType('w'),
+ help='path to JSON output file')
+ helpstr='Compare results of two test runs.'
diff_p = subp.add_parser(
- 'diff', description='Compare results of two test runs')
- diff_p.set_defaults(func=lambda opts: run_diff(
- opts.baseline, opts.actual, json_file=opts.json))
+ 'diff', help=helpstr, description=helpstr)
+ diff_p.set_defaults(subfunc=lambda opts: run_diff(
+ opts.baseline, opts.actual, json_file=opts.json))
diff_p.add_argument(
- '--baseline', metavar='FILE', type=argparse.FileType('r'),
- required=True,
- help='path to baseline JSON file')
+ '--baseline', metavar='FILE', type=argparse.FileType('r'),
+ required=True,
+ help='path to baseline JSON file')
diff_p.add_argument(
- '--actual', metavar='FILE', type=argparse.FileType('r'),
- required=True,
- help='path to actual JSON file')
+ '--actual', metavar='FILE', type=argparse.FileType('r'),
+ required=True,
+ help='path to actual JSON file')
diff_p.add_argument(
- '--json', metavar='FILE', type=argparse.FileType('w'),
- help='path to JSON output file')
-
- run_p = subp.add_parser('run', description='Run the tests')
- run_p.set_defaults(func=lambda opts: run_run(
- opts.filter, jobs=opts.jobs, train=opts.train, json_file=opts.json))
+ '--json', metavar='FILE', type=argparse.FileType('w'),
+ help='path to JSON output file')
+
+ glob_helpstr = (
+ 'glob filter for the tests to run; '
+ 'can be specified multiple times; '
+ 'the globs have the form of '
+ '`<recipe_name_glob>[.<test_name_glob>]`. If `.<test_name_glob>` '
+ 'is omitted, it is implied to be `*.*`, i.e. any recipe with this '
+ 'prefix and all tests.')
+
+ helpstr = 'Run the tests.'
+ run_p = subp.add_parser('run', help=helpstr, description=helpstr)
+ run_p.set_defaults(subfunc=lambda opts: run_run(
+ opts.filter, jobs=opts.jobs, train=opts.train, json_file=opts.json))
run_p.add_argument(
- '--jobs', metavar='N', type=int,
- default=multiprocessing.cpu_count(),
- help='run N jobs in parallel (default %(default)s)')
+ '--jobs', metavar='N', type=int,
+ default=multiprocessing.cpu_count(),
+ help='run N jobs in parallel (default %(default)s)')
run_p.add_argument(
- '--json', metavar='FILE', type=argparse.FileType('w'),
- help='path to JSON output file')
+ '--json', metavar='FILE', type=argparse.FileType('w'),
+ help='path to JSON output file')
run_p.add_argument(
- '--filter', action='append', type=normalize_filter,
- help='glob filter for the tests to run; '
- 'can be specified multiple times; '
- 'the globs have the form of '
- '`<recipe_name_glob>[.<test_name_glob>]`. If `.<test_name_glob>` '
- 'is omitted, it is implied to be `*.*`, i.e. any recipe with this '
- 'prefix and all tests.)')
+ '--filter', action='append', type=normalize_filter,
+ help=glob_helpstr)
# TODO(phajdan.jr): remove --train the switch in favor of train subcommand.
run_p.add_argument(
- '--train', action='store_true',
- help='re-generate recipe expectations (DEPRECATED)')
+ '--train', action='store_true',
+ help='re-generate recipe expectations (DEPRECATED)')
- train_p = subp.add_parser('train', description='Re-train recipe expectations')
- train_p.set_defaults(func=lambda opts: run_run(
- opts.filter, jobs=opts.jobs, json_file=opts.json, train=True))
+ helpstr = 'Re-train recipe expectations.'
+ train_p = subp.add_parser('train', help=helpstr, description=helpstr)
+ train_p.set_defaults(subfunc=lambda opts: run_run(
+ opts.filter, jobs=opts.jobs, json_file=opts.json, train=True))
train_p.add_argument(
- '--jobs', metavar='N', type=int,
- default=multiprocessing.cpu_count(),
- help='run N jobs in parallel (default %(default)s)')
+ '--jobs', metavar='N', type=int,
+ default=multiprocessing.cpu_count(),
+ help='run N jobs in parallel (default %(default)s)')
train_p.add_argument(
- '--json', metavar='FILE', type=argparse.FileType('w'),
- help='path to JSON output file')
+ '--json', metavar='FILE', type=argparse.FileType('w'),
+ help='path to JSON output file')
train_p.add_argument(
- '--filter', action='append', type=normalize_filter,
- help='glob filter for the tests to run; '
- 'can be specified multiple times; '
- 'the globs have the form of '
- '`<recipe_name_glob>[.<test_name_glob>]`. If `.<test_name_glob>` '
- 'is omitted, it is implied to be `*.*`, i.e. any recipe with this '
- 'prefix and all tests.)')
+ '--filter', action='append', type=normalize_filter,
+ help=glob_helpstr)
+ helpstr = 'Run the tests under debugger (pdb).'
debug_p = subp.add_parser(
- 'debug', description='Run the tests under debugger (pdb)')
- debug_p.set_defaults(func=lambda opts: run_run(
- opts.filter, debug=True))
+ 'debug', help=helpstr, description=helpstr)
+ debug_p.set_defaults(subfunc=lambda opts: run_run(
+ opts.filter, debug=True))
debug_p.add_argument(
- '--filter', action='append', type=normalize_filter,
- help='glob filter for the tests to run; '
- 'can be specified multiple times; '
- 'the globs have the form of '
- '`<recipe_name_glob>[.<test_name_glob>]`. If `.<test_name_glob>` '
- 'is omitted, it is implied to be `*.*`, i.e. any recipe with this '
- 'prefix and all tests.)')
-
- return parser.parse_args(args)
-
-
-def add_subparser(parser):
- # TODO(iannucci): add actual subparsers here, make main argparse parser to do
- # full commandline parsing to allow --help to work correctly.
- test_p = parser.add_parser(
- 'test',
- description='Generate or check expectations by simulation')
- test_p.add_argument('args', nargs=argparse.REMAINDER)
+ '--filter', action='append', type=normalize_filter,
+ help=glob_helpstr)
def postprocess_func(_parser, args):
# Auto-enable bootstrap for test command invocations (necessary to get
@@ -931,23 +921,23 @@ def add_subparser(parser):
if args.use_bootstrap is None:
args.use_bootstrap = True
- test_p.set_defaults(command='test', func=main,
- postprocess_func=postprocess_func)
+ test_p.set_defaults(
+ command='test', func=main,
+ postprocess_func=postprocess_func,
+ )
def main(package_deps, args):
"""Runs simulation tests on a given repo of recipes.
Args:
- universe_view: an UniverseView object to operate on
- raw_args: command line arguments to the 'test' command
- engine_flags: recipe engine command-line flags
+ package_deps (PackageDeps)
+ args: the parsed args (see add_subparser).
Returns:
Exit code
"""
universe = loader.RecipeUniverse(package_deps, args.package)
universe_view = loader.UniverseView(universe, package_deps.root_package)
- raw_args=args.args
engine_flags=args.operational_args.engine_flags
# Prevent flakiness caused by stale pyc files.
@@ -958,5 +948,4 @@ def main(package_deps, args):
global _ENGINE_FLAGS
_ENGINE_FLAGS = engine_flags
- args = parse_args(raw_args)
- return args.func(args)
+ return args.subfunc(args)
« no previous file with comments | « recipe_engine/run.py ('k') | recipes.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698