summaryrefslogtreecommitdiff
path: root/tests/test_argparse.py
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2020-04-22 23:31:03 -0400
committerKevin Van Brunt <kmvanbrunt@gmail.com>2020-04-22 23:31:03 -0400
commit8bb383b90df391b2a820adbf27aa47e0915679d3 (patch)
treeb99e2b6c3cd9dce66feb3fb2adcbf5523661ebaf /tests/test_argparse.py
parentf261f0df4d3831d47d5f38b12cc0d7bc747cd89d (diff)
parent6bfc6456dce9c2e87c24d0d3ba833323623b63bf (diff)
downloadcmd2-git-8bb383b90df391b2a820adbf27aa47e0915679d3.tar.gz
Merge branch 'master' into table_creator
Diffstat (limited to 'tests/test_argparse.py')
-rw-r--r--tests/test_argparse.py37
1 files changed, 32 insertions, 5 deletions
diff --git a/tests/test_argparse.py b/tests/test_argparse.py
index 21ec17e8..9510e8f2 100644
--- a/tests/test_argparse.py
+++ b/tests/test_argparse.py
@@ -4,11 +4,11 @@
Cmd2 testing for argument parsing
"""
import argparse
+from typing import Optional
+
import pytest
import cmd2
-from cmd2.utils import StdSim
-
from .conftest import run_cmd
# Prefer statically linked gnureadline if available (for macOS compatibility due to issues with libedit)
@@ -41,7 +41,7 @@ class ArgparseApp(cmd2.Cmd):
say_parser.add_argument('words', nargs='+', help='words to say')
@cmd2.with_argparser(say_parser)
- def do_say(self, args):
+ def do_say(self, args, *, keyword_arg: Optional[str] = None):
"""Repeat what you tell me to."""
words = []
for word in args.words:
@@ -57,6 +57,9 @@ class ArgparseApp(cmd2.Cmd):
self.stdout.write(' '.join(words))
self.stdout.write('\n')
+ if keyword_arg is not None:
+ print(keyword_arg)
+
tag_parser = argparse.ArgumentParser(description='create a html tag')
tag_parser.add_argument('tag', help='tag')
tag_parser.add_argument('content', nargs='+', help='content to surround with tag')
@@ -71,12 +74,15 @@ class ArgparseApp(cmd2.Cmd):
self.stdout.write('{}'.format(args.custom_stuff))
@cmd2.with_argument_list
- def do_arglist(self, arglist):
+ def do_arglist(self, arglist, *, keyword_arg: Optional[str] = None):
if isinstance(arglist, list):
self.stdout.write('True')
else:
self.stdout.write('False')
+ if keyword_arg is not None:
+ print(keyword_arg)
+
@cmd2.with_argument_list(preserve_quotes=True)
def do_preservelist(self, arglist):
self.stdout.write('{}'.format(arglist))
@@ -86,7 +92,7 @@ class ArgparseApp(cmd2.Cmd):
known_parser.add_argument('-s', '--shout', action='store_true', help='N00B EMULATION MODE')
known_parser.add_argument('-r', '--repeat', type=int, help='output [n] times')
@cmd2.with_argparser_and_unknown_args(known_parser)
- def do_speak(self, args, extra):
+ def do_speak(self, args, extra, *, keyword_arg: Optional[str] = None):
"""Repeat what you tell me to."""
words = []
for word in extra:
@@ -102,6 +108,9 @@ class ArgparseApp(cmd2.Cmd):
self.stdout.write(' '.join(words))
self.stdout.write('\n')
+ if keyword_arg is not None:
+ print(keyword_arg)
+
@cmd2.with_argparser_and_unknown_args(argparse.ArgumentParser(), preserve_quotes=True)
def do_test_argparse_with_list_quotes(self, args, extra):
self.stdout.write('{}'.format(' '.join(extra)))
@@ -129,6 +138,12 @@ def test_argparse_remove_quotes(argparse_app):
out, err = run_cmd(argparse_app, 'say "hello there"')
assert out == ['hello there']
+def test_argparser_kwargs(argparse_app, capsys):
+ """Test with_argparser wrapper passes through kwargs to command function"""
+ argparse_app.do_say('word', keyword_arg="foo")
+ out, err = capsys.readouterr()
+ assert out == "foo\n"
+
def test_argparse_preserve_quotes(argparse_app):
out, err = run_cmd(argparse_app, 'tag mytag "hello"')
assert out[0] == '<mytag>"hello"</mytag>'
@@ -161,6 +176,12 @@ def test_argparser_correct_args_with_quotes_and_midline_options(argparse_app):
out, err = run_cmd(argparse_app, "speak 'This is a' -s test of the emergency broadcast system!")
assert out == ['THIS IS A TEST OF THE EMERGENCY BROADCAST SYSTEM!']
+def test_argparser_and_unknown_args_kwargs(argparse_app, capsys):
+ """Test with_argparser_and_unknown_args wrapper passes through kwargs to command function"""
+ argparse_app.do_speak('', keyword_arg="foo")
+ out, err = capsys.readouterr()
+ assert out == "foo\n"
+
def test_argparse_quoted_arguments_multiple(argparse_app):
out, err = run_cmd(argparse_app, 'say "hello there" "rick & morty"')
assert out == ['hello there rick & morty']
@@ -186,6 +207,12 @@ def test_arglist(argparse_app):
out, err = run_cmd(argparse_app, 'arglist "we should" get these')
assert out[0] == 'True'
+def test_arglist_kwargs(argparse_app, capsys):
+ """Test with_argument_list wrapper passes through kwargs to command function"""
+ argparse_app.do_arglist('arg', keyword_arg="foo")
+ out, err = capsys.readouterr()
+ assert out == "foo\n"
+
def test_preservelist(argparse_app):
out, err = run_cmd(argparse_app, 'preservelist foo "bar baz"')
assert out[0] == "['foo', '\"bar baz\"']"