Browse Source
Add twister command to west. Signed-off-by: Al Semjonovs <asemjonovs@google.com>pull/53809/head
3 changed files with 122 additions and 0 deletions
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
# Copyright (c) 2023 Google Inc |
||||
# |
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
|
||||
from argparse import Namespace |
||||
|
||||
from twister_cmd import Twister |
||||
import pytest |
||||
import argparse |
||||
|
||||
TEST_CASES = [ |
||||
{ |
||||
"r": [], |
||||
"c": False, |
||||
"test_only": False, |
||||
}, |
||||
{ |
||||
"r": ["-c", "-T tests/ztest/base"], |
||||
"c": True, |
||||
"T": [" tests/ztest/base"], |
||||
"test_only": False, |
||||
}, |
||||
{ |
||||
"r": ["--test-only"], |
||||
"c": False, |
||||
"test_only": True, |
||||
}, |
||||
] |
||||
|
||||
ARGS = Namespace( |
||||
help=None, |
||||
zephyr_base=None, |
||||
verbose=0, |
||||
command="twister", |
||||
) |
||||
|
||||
|
||||
@pytest.mark.parametrize("test_case", TEST_CASES) |
||||
def test_parse_remainder(test_case): |
||||
twister = Twister() |
||||
parser = argparse.ArgumentParser( |
||||
description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, |
||||
allow_abbrev=False |
||||
) |
||||
sub_p = parser.add_subparsers() |
||||
|
||||
twister.parser = twister.do_add_parser(sub_p) |
||||
options = twister._parse_arguments(args=test_case["r"], options=None) |
||||
|
||||
assert options.clobber_output == test_case["c"] |
||||
assert options.test_only == test_case["test_only"] |
||||
if "T" in test_case: |
||||
assert options.testsuite_root == test_case["T"] |
@ -0,0 +1,64 @@
@@ -0,0 +1,64 @@
|
||||
# Copyright (c) 2023 Google |
||||
# |
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
|
||||
import argparse |
||||
import os |
||||
import sys |
||||
|
||||
from west import log |
||||
from west.commands import WestCommand |
||||
|
||||
from zephyr_ext_common import ZEPHYR_SCRIPTS |
||||
|
||||
# Resolve path to twister libs and add imports |
||||
twister_path = ZEPHYR_SCRIPTS |
||||
os.environ["ZEPHYR_BASE"] = str(twister_path.parent) |
||||
|
||||
sys.path.insert(0, str(twister_path)) |
||||
sys.path.insert(0, str(twister_path / "pylib" / "twister")) |
||||
|
||||
from twisterlib.environment import add_parse_arguments, parse_arguments |
||||
from twisterlib.twister_main import main |
||||
|
||||
TWISTER_DESCRIPTION = """\ |
||||
Convenience wrapper for twister. The below options are shared with the twister |
||||
script and have the same effects as if you ran twister directly. Refer to the |
||||
twister documentation for more information. |
||||
""" |
||||
|
||||
|
||||
class Twister(WestCommand): |
||||
def __init__(self): |
||||
super(Twister, self).__init__( |
||||
"twister", |
||||
# Keep this in sync with the string in west-commands.yml. |
||||
"west twister wrapper", |
||||
TWISTER_DESCRIPTION, |
||||
accepts_unknown_args=True, |
||||
) |
||||
|
||||
def do_add_parser(self, parser_adder): |
||||
parser = parser_adder.add_parser( |
||||
self.name, |
||||
help=self.help, |
||||
formatter_class=argparse.RawDescriptionHelpFormatter, |
||||
description=self.description, |
||||
allow_abbrev=False |
||||
) |
||||
|
||||
parser = add_parse_arguments(parser) |
||||
|
||||
return parser |
||||
|
||||
def do_run(self, args, remainder): |
||||
log.dbg( |
||||
"args: {} remainder: {}".format(args, remainder), level=log.VERBOSE_EXTREME |
||||
) |
||||
|
||||
options = self._parse_arguments(args=remainder, options=args) |
||||
main(options) |
||||
|
||||
def _parse_arguments(self, args, options): |
||||
"""Helper function for testing purposes""" |
||||
return parse_arguments(self.parser, args, options) |
Loading…
Reference in new issue