diff --git a/src/borg/testsuite/archiver/argparsing_test.py b/src/borg/testsuite/archiver/argparsing_test.py index 974becf33..58d09076d 100644 --- a/src/borg/testsuite/archiver/argparsing_test.py +++ b/src/borg/testsuite/archiver/argparsing_test.py @@ -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="") + def subcommands(self, basic_parser): + return basic_parser.add_subcommands(required=False, title="required arguments", metavar="") @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, }