From dc747c6fa05d9abb6b7ab45f3714e4ed01b50a0f Mon Sep 17 00:00:00 2001 From: Kevin Van Brunt Date: Fri, 12 Jul 2019 16:23:03 -0400 Subject: Added unit tests for unfinished flag errors --- cmd2/argparse_completer.py | 8 ++---- tests/test_argparse_completer.py | 53 ++++++++++++++++++++++++++++++++++------ 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): -- cgit v1.2.1