summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2019-07-12 16:23:03 -0400
committerKevin Van Brunt <kmvanbrunt@gmail.com>2019-07-12 16:23:03 -0400
commitdc747c6fa05d9abb6b7ab45f3714e4ed01b50a0f (patch)
treeb3ab88c29cfb9ee5c6c7bf2398044e4685540b9d
parent6e826f2a4c2e69a838d1f985ab93d43374f3b92a (diff)
downloadcmd2-git-dc747c6fa05d9abb6b7ab45f3714e4ed01b50a0f.tar.gz
Added unit tests for unfinished flag errors
-rw-r--r--cmd2/argparse_completer.py8
-rw-r--r--tests/test_argparse_completer.py53
2 files changed, 48 insertions, 13 deletions
diff --git a/cmd2/argparse_completer.py b/cmd2/argparse_completer.py
index b957a8bf..c7284361 100644
--- a/cmd2/argparse_completer.py
+++ b/cmd2/argparse_completer.py
@@ -550,13 +550,9 @@ class AutoCompleter(object):
out_str += ' {0: <{width}} '.format(prefix, width=20)
out_str += "Flag requires "
+ # This handles ONE_OR_MORE
if flag_arg_state.max == float('inf'):
- out_str += "at least {} ".format(flag_arg_state.min)
-
- if flag_arg_state.min == 1:
- out_str += "argument"
- else:
- out_str += "arguments"
+ out_str += "at least {} argument".format(flag_arg_state.min)
else:
if flag_arg_state.min == flag_arg_state.max:
out_str += "{} ".format(flag_arg_state.min)
diff --git a/tests/test_argparse_completer.py b/tests/test_argparse_completer.py
index 3274ad0c..3be9561d 100644
--- a/tests/test_argparse_completer.py
+++ b/tests/test_argparse_completer.py
@@ -549,14 +549,53 @@ def test_autcomp_nargs(ac_app, args, completions):
assert ac_app.completion_matches == sorted(completions, key=ac_app.matches_sort_key)
-"""
-TODO: Add unit tests for unfinished flag errors
- # Double dash ends the current flag (even if all expected args aren't entered)
- ('--set_value --', positional_choices),
+@pytest.mark.parametrize('command_and_args, text, is_error', [
+ # Flag is finished before moving on
+ ('hint --flag foo --', '', False),
+ ('hint --flag foo --help', '', False),
+ ('hint --flag foo', '--', False),
+
+ ('nargs --one_or_more one --', '', False),
+ ('nargs --one_or_more one or --set_value', '', False),
+ ('nargs --one_or_more one or more', '--', False),
+
+ ('nargs --set_value set value --', '', False),
+ ('nargs --set_value set value --one_or_more', '', False),
+ ('nargs --set_value set value', '--', False),
+
+ ('nargs --range choices --', '', False),
+ ('nargs --range choices range --set_value', '', False),
+ ('nargs --range range', '--', False),
+
+ # Flag is not finished before moving on
+ ('hint --flag --', '', True),
+ ('hint --flag --help', '', True),
+ ('hint --flag', '--', True),
+
+ ('nargs --one_or_more --', '', True),
+ ('nargs --one_or_more --set_value', '', True),
+ ('nargs --one_or_more', '--', True),
+
+ ('nargs --set_value set --', '', True),
+ ('nargs --set_value set --one_or_more', '', True),
+ ('nargs --set_value set', '--', True),
+
+ ('nargs --range --', '', True),
+ ('nargs --range --set_value', '', True),
+ ('nargs --range', '--', True),
+])
+def test_unfinished_flag_error(ac_app, command_and_args, text, is_error, capsys):
+ line = '{} {}'.format(command_and_args, text)
+ endidx = len(line)
+ begidx = endidx - len(text)
- # Another flag can't start until all expected args are filled out
- ('--set_value --one_or_more', set_value_choices),
-"""
+ complete_tester(text, line, begidx, endidx, ac_app)
+
+ out, err = capsys.readouterr()
+ if is_error:
+ assert "Flag requires" in out
+ else:
+ assert not out
def test_completion_items_default_header(ac_app):