fix argparsing test

This commit is contained in:
Thomas Waldmann 2026-02-25 22:30:54 +01:00
parent 223a834a3d
commit a708397612
No known key found for this signature in database
GPG key ID: 243ACFA951F78E01

View file

@ -1,6 +1,8 @@
import argparse
import pytest
from jsonargparse import ArgumentParser
from . import Archiver, RK_ENCRYPTION, cmd
@ -93,15 +95,15 @@ class TestCommonOptions:
@pytest.fixture
def basic_parser(self):
parser = argparse.ArgumentParser(prog="test", description="test parser", add_help=False)
parser = ArgumentParser(prog="test", description="test parser", add_help=False)
parser.common_options = Archiver.CommonOptions(
self.define_common_options, suffix_precedence=("_level0", "_level1")
)
return parser
@pytest.fixture
def subparsers(self, basic_parser):
return basic_parser.add_subparsers(title="required arguments", metavar="<command>")
def subcommands(self, basic_parser):
return basic_parser.add_subcommands(required=False, title="required arguments", metavar="<command>")
@pytest.fixture
def parser(self, basic_parser):
@ -110,27 +112,28 @@ class TestCommonOptions:
@pytest.fixture
def common_parser(self, parser):
common_parser = argparse.ArgumentParser(add_help=False, prog="test")
common_parser = ArgumentParser(add_help=False, prog="test")
parser.common_options.add_common_group(common_parser, "_level1")
return common_parser
@pytest.fixture
def parse_vars_from_line(self, parser, subparsers, common_parser):
subparser = subparsers.add_parser(
"subcommand",
def parse_vars_from_line(self, parser, subcommands, common_parser):
from ...helpers.jap_helpers import flatten_namespace
subparser = ArgumentParser(
parents=[common_parser],
add_help=False,
description="foo",
epilog="bar",
help="baz",
formatter_class=argparse.RawDescriptionHelpFormatter,
)
subparser.set_defaults(func=1234)
subparser.add_argument("--foo-bar", dest="foo_bar", action="store_true")
subcommands.add_subcommand("subcmd", subparser, help="baz")
def parse_vars_from_line(*line):
print(line)
args = parser.parse_args(line)
args = flatten_namespace(args)
parser.common_options.resolve(args)
return vars(args)
@ -144,25 +147,25 @@ class TestCommonOptions:
"progress": False,
}
assert parse_vars_from_line("--error", "subcommand", "--critical") == {
assert parse_vars_from_line("--error", "subcmd", "--critical") == {
"append": [],
"lock_wait": 1,
"log_level": "critical",
"progress": False,
"foo_bar": False,
"func": 1234,
"subcommand": "subcmd",
}
with pytest.raises(SystemExit):
parse_vars_from_line("--foo-bar", "subcommand")
parse_vars_from_line("--foo-bar", "subcmd")
assert parse_vars_from_line("--append=foo", "--append", "bar", "subcommand", "--append", "baz") == {
assert parse_vars_from_line("--append=foo", "--append", "bar", "subcmd", "--append", "baz") == {
"append": ["foo", "bar", "baz"],
"lock_wait": 1,
"log_level": "warning",
"progress": False,
"foo_bar": False,
"func": 1234,
"subcommand": "subcmd",
}
@pytest.mark.parametrize("position", ("before", "after", "both"))
@ -171,7 +174,7 @@ class TestCommonOptions:
line = []
if position in ("before", "both"):
line.append(flag)
line.append("subcommand")
line.append("subcmd")
if position in ("after", "both"):
line.append(flag)
@ -181,7 +184,7 @@ class TestCommonOptions:
"log_level": "warning",
"progress": False,
"foo_bar": False,
"func": 1234,
"subcommand": "subcmd",
args_key: args_value,
}