From 067ba65e102ec348330cf980be2ca958d6969dc9 Mon Sep 17 00:00:00 2001 From: Al Semjonovs Date: Mon, 26 Sep 2022 15:38:00 -0600 Subject: [PATCH] twister: Split up argument parsing into smaller functions Split argument parsing into smaller functions to be leveraged by west twister extension. Signed-off-by: Al Semjonovs --- scripts/pylib/twister/twisterlib/environment.py | 16 +++++++++++----- scripts/tests/twister/conftest.py | 5 +++-- scripts/twister | 10 +++++----- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/scripts/pylib/twister/twisterlib/environment.py b/scripts/pylib/twister/twisterlib/environment.py index 20c072f1d39..67c6ae67025 100644 --- a/scripts/pylib/twister/twisterlib/environment.py +++ b/scripts/pylib/twister/twisterlib/environment.py @@ -48,10 +48,11 @@ except subprocess.CalledProcessError as e: canonical_zephyr_base = os.path.realpath(ZEPHYR_BASE) canonical_topdir = os.path.realpath(topdir) -def parse_arguments(args): - parser = argparse.ArgumentParser( - description=__doc__, - formatter_class=argparse.RawDescriptionHelpFormatter) +def add_parse_arguments(parser = None): + if parser is None: + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) parser.fromfile_prefix_chars = "+" case_select = parser.add_argument_group("Test case selection", @@ -637,7 +638,12 @@ structure in the main Zephyr tree: boards///""") parser.add_argument("extra_test_args", nargs=argparse.REMAINDER, help="Additional args following a '--' are passed to the test binary") - options = parser.parse_args(args) + return parser + + +def parse_arguments(parser, args, options = None): + if options is None: + options = parser.parse_args(args) # Very early error handling if options.short_build_path and not options.ninja: diff --git a/scripts/tests/twister/conftest.py b/scripts/tests/twister/conftest.py index 39359c062f5..630ac69160c 100644 --- a/scripts/tests/twister/conftest.py +++ b/scripts/tests/twister/conftest.py @@ -14,7 +14,7 @@ sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/pylib/twister")) sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts")) from twisterlib.testplan import TestPlan from twisterlib.testinstance import TestInstance -from twisterlib.environment import TwisterEnv, parse_arguments +from twisterlib.environment import TwisterEnv, add_parse_arguments, parse_arguments def new_get_toolchain(*args, **kwargs): return 'zephyr' @@ -35,7 +35,8 @@ def testsuites_directory(): @pytest.fixture(name='class_env') def tesenv_obj(test_data, testsuites_dir, tmpdir_factory): """ Pytest fixture to initialize and return the class TestPlan object""" - options = parse_arguments([]) + parser = add_parse_arguments() + options = parse_arguments(parser, []) env = TwisterEnv(options) env.board_roots = [test_data +"board_config/1_level/2_level/"] env.test_roots = [testsuites_dir + '/tests', testsuites_dir + '/samples'] diff --git a/scripts/twister b/scripts/twister index f42602ff598..3b872fd46cb 100755 --- a/scripts/twister +++ b/scripts/twister @@ -196,7 +196,7 @@ sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/pylib/twister/")) sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/pylib/build_helpers")) from twisterlib.testplan import TestPlan -from twisterlib.environment import TwisterEnv, parse_arguments +from twisterlib.environment import TwisterEnv, add_parse_arguments, parse_arguments from twisterlib.reports import Reporting from twisterlib.hardwaremap import HardwareMap from twisterlib.coverage import run_coverage @@ -241,11 +241,9 @@ def setup_logging(outdir, log_file, verbose, timestamps): def init_color(colorama_strip): colorama.init(strip=colorama_strip) -def main(): +def main(options): start_time = time.time() - options = parse_arguments(sys.argv[1:]) - # Configure color output color_strip = False if options.force_color else None @@ -413,7 +411,9 @@ def main(): if __name__ == "__main__": ret = 0 try: - ret = main() + parser = add_parse_arguments() + options = parse_arguments(parser, sys.argv[1:]) + ret = main(options) finally: if (os.name != "nt") and os.isatty(1): # (OS is not Windows) and (stdout is interactive)