summaryrefslogtreecommitdiff
path: root/tests/test_argparse.py
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2020-08-25 01:46:04 -0400
committerKevin Van Brunt <kmvanbrunt@gmail.com>2020-08-25 10:10:14 -0400
commit9b5a98825a9b00807a40494e8c634c392077ccd2 (patch)
treeb8cfbaca2ec4622a981d96c33c7a964ca621108e /tests/test_argparse.py
parenta540cfc5373cee2272de6c81be8b6fa8a78c6462 (diff)
downloadcmd2-git-9b5a98825a9b00807a40494e8c634c392077ccd2.tar.gz
Fixed RecursionError when printing an argparse.Namespace caused by custom attribute cmd2 was adding
Added get_statement() function to argparse.Namespace which returns __statement__ attribute
Diffstat (limited to 'tests/test_argparse.py')
-rw-r--r--tests/test_argparse.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/test_argparse.py b/tests/test_argparse.py
index 0d46b15a..9806c9b5 100644
--- a/tests/test_argparse.py
+++ b/tests/test_argparse.py
@@ -290,6 +290,24 @@ class SubcommandApp(cmd2.Cmd):
func(self, args)
+ # Add a subcommand using as_subcommand_to decorator
+ has_subcmd_parser = cmd2.Cmd2ArgumentParser(description="Tests as_subcmd_to decorator")
+ has_subcmd_subparsers = has_subcmd_parser.add_subparsers(dest='subcommand', metavar='SUBCOMMAND')
+ has_subcmd_subparsers.required = True
+
+ @cmd2.with_argparser(has_subcmd_parser)
+ def do_test_subcmd_decorator(self, args: argparse.Namespace):
+ handler = args.get_handler()
+ handler(args)
+
+ subcmd_parser = cmd2.Cmd2ArgumentParser(add_help=False, description="The subcommand")
+
+ @cmd2.as_subcommand_to('test_subcmd_decorator', 'subcmd', subcmd_parser, help='the subcommand')
+ def subcmd_func(self, args: argparse.Namespace):
+ # Make sure printing the Namespace works. The way we originally added get_hander()
+ # to it resulted in a RecursionError when printing.
+ print(args)
+
@pytest.fixture
def subcommand_app():
app = SubcommandApp()
@@ -373,6 +391,11 @@ def test_add_another_subcommand(subcommand_app):
assert new_parser.prog == "base new_sub"
+def test_subcmd_decorator(subcommand_app):
+ out, err = run_cmd(subcommand_app, 'test_subcmd_decorator subcmd')
+ assert out[0].startswith('Namespace(')
+
+
def test_unittest_mock():
from unittest import mock
from cmd2 import CommandSetRegistrationError