summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcmd2.py6
-rw-r--r--tests/test_argparse.py16
2 files changed, 19 insertions, 3 deletions
diff --git a/cmd2.py b/cmd2.py
index f5c1dab0..7540bd00 100755
--- a/cmd2.py
+++ b/cmd2.py
@@ -248,9 +248,9 @@ def with_argument_parser(argparser):
argparse.ArgumentParser.
"""
def arg_decorator(func):
- def cmd_wrapper(instance, arg):
+ def cmd_wrapper(instance, cmdline):
# Use shlex to split the command line into a list of arguments based on shell rules
- lexed_arglist = shlex.split(arg, posix=POSIX_SHLEX)
+ lexed_arglist = shlex.split(cmdline, posix=POSIX_SHLEX)
# If not using POSIX shlex, make sure to strip off outer quotes for convenience
if not POSIX_SHLEX and STRIP_QUOTES_FOR_NON_POSIX:
temp_arglist = []
@@ -258,7 +258,7 @@ def with_argument_parser(argparser):
temp_arglist.append(strip_quotes(arg))
lexed_arglist = temp_arglist
opts = argparser.parse_args(lexed_arglist)
- func(instance, arg, opts)
+ func(instance, cmdline, opts)
# argparser defaults the program name to sys.argv[0]
# we want it to be the name of our command
diff --git a/tests/test_argparse.py b/tests/test_argparse.py
index e9dbc1b3..52ce7de8 100644
--- a/tests/test_argparse.py
+++ b/tests/test_argparse.py
@@ -2,6 +2,7 @@
"""
Cmd2 testing for argument parsing
"""
+import re
import argparse
import pytest
@@ -43,6 +44,16 @@ class ArgparseApp(cmd2.Cmd):
self.stdout.write('<{0}>{1}</{0}>'.format(args.tag[0], ' '.join(args.content)))
self.stdout.write('\n')
+ argparser = argparse.ArgumentParser()
+ argparser.add_argument('args', nargs='*')
+ @cmd2.with_argument_parser(argparser)
+ def do_compare(self, cmdline, args=None):
+ cmdline_str = re.sub('\s+', ' ', cmdline)
+ args_str = re.sub('\s+', ' ', ' '.join(args.args))
+ if cmdline_str == args_str:
+ self.stdout.write('True')
+ else:
+ self.stdout.write('False')
@pytest.fixture
def argparse_app():
@@ -88,4 +99,9 @@ def test_argparse_prog(argparse_app):
out = run_cmd(argparse_app, 'help tag')
progname = out[0].split(' ')[1]
assert progname == 'tag'
+
+def test_argparse_cmdline(argparse_app):
+ out = run_cmd(argparse_app, 'compare this is a test')
+ assert out[0] == 'True'
+
\ No newline at end of file