Ejemplo n.º 1
0
def test_complete_command_help_no_tokens(ac_app):
    from cmd2.argparse_completer import AutoCompleter

    parser = Cmd2ArgumentParser()
    ac = AutoCompleter(parser, ac_app)

    completions = ac.complete_subcommand_help(tokens=[], text='', line='', begidx=0, endidx=0)
    assert not completions
Ejemplo n.º 2
0
def test_fail_alt_stderr(parser1, capfd, mock):
    completer = CompletionFinder()

    comp_line = 'media movies add '
    exp_out = '\013\013 '
    exp_err = '''
Hint:
  TITLE                   Movie Title'''

    mock.patch.dict(
        os.environ, {
            '_ARGCOMPLETE': '1',
            '_ARGCOMPLETE_IFS': '\013',
            'COMP_TYPE': '63',
            'COMP_LINE': comp_line,
            'COMP_POINT': str(len(comp_line))
        })
    mock.patch.object(os, 'fdopen', fdopen_fail_9)

    with pytest.raises(SystemExit):
        choices = {
            'actor': query_actors,  # function
        }
        autocompleter = AutoCompleter(parser1, arg_choices=choices)
        completer(parser1, autocompleter, exit_method=sys.exit)

    out, err = capfd.readouterr()
    assert out == exp_out
    assert err == exp_err
Ejemplo n.º 3
0
def test_invalid_ifs(parser1, mocker):
    completer = CompletionFinder()

    mocker.patch.dict(os.environ, {
        '_ARGCOMPLETE': '1',
        '_ARGCOMPLETE_IFS': '\013\013'
    })

    mocker.patch.object(os, 'fdopen', my_fdopen)

    with pytest.raises(SystemExit):
        completer(parser1, AutoCompleter(parser1), exit_method=sys.exit)
Ejemplo n.º 4
0
def test_autocomp_blank_token(ac_app):
    """Force a blank token to make sure AutoCompleter consumes them like argparse does"""
    from cmd2.argparse_completer import AutoCompleter

    blank = ''

    # Blank flag arg
    text = ''
    line = 'completer -m {} {}'.format(blank, text)
    endidx = len(line)
    begidx = endidx - len(text)

    completer = AutoCompleter(ac_app.completer_parser, ac_app)
    tokens = ['completer', '-f', blank, text]
    completions = completer.complete_command(tokens, text, line, begidx, endidx)
    assert completions == completions_from_function

    # Blank positional arg
    text = ''
    line = 'completer {} {}'.format(blank, text)
    endidx = len(line)
    begidx = endidx - len(text)

    completer = AutoCompleter(ac_app.completer_parser, ac_app)
    tokens = ['completer', blank, text]
    completions = completer.complete_command(tokens, text, line, begidx, endidx)
    assert completions == completions_from_method
Ejemplo n.º 5
0
def test_fail_alt_stdout(parser1, mocker):
    completer = CompletionFinder()

    comp_line = 'media movies list '
    mocker.patch.dict(
        os.environ, {
            '_ARGCOMPLETE': '1',
            '_ARGCOMPLETE_IFS': '\013',
            'COMP_TYPE': '63',
            'COMP_LINE': comp_line,
            'COMP_POINT': str(len(comp_line))
        })
    mocker.patch.object(os, 'fdopen', fdopen_fail_8)

    try:
        choices = {
            'actor': query_actors,  # function
        }
        autocompleter = AutoCompleter(parser1, arg_choices=choices)
        completer(parser1, autocompleter, exit_method=sys.exit)
    except SystemExit as err:
        assert err.code == 1
Ejemplo n.º 6
0
def test_commands(parser1, capfd, mock, comp_line, exp_out, exp_err):
    mock.patch.dict(
        os.environ, {
            '_ARGCOMPLETE': '1',
            '_ARGCOMPLETE_IFS': '\013',
            'COMP_TYPE': '63',
            'COMP_LINE': comp_line,
            'COMP_POINT': str(len(comp_line))
        })

    mock.patch.object(os, 'fdopen', my_fdopen)

    with pytest.raises(SystemExit):
        completer = CompletionFinder()

        choices = {
            'actor': query_actors,  # function
        }
        autocompleter = AutoCompleter(parser1, arg_choices=choices)
        completer(parser1, autocompleter, exit_method=sys.exit)

    out, err = capfd.readouterr()
    assert out == exp_out
    assert err == exp_err
Ejemplo n.º 7
0
def test_bash_nocomplete(parser1):
    completer = CompletionFinder()
    result = completer(parser1, AutoCompleter(parser1))
    assert result is None
Ejemplo n.º 8
0
bar_subparsers.add_parser('artichoke', help='artichoke help')
bar_subparsers.add_parser('cranberries', help='cranberries help')

# create the parser for the "sport" subcommand
parser_sport = base_subparsers.add_parser('sport', help='sport help')
sport_arg = parser_sport.add_argument('sport', help='Enter name of a sport')
setattr(sport_arg, 'arg_choices', sport_item_strs)

# Handle bash completion if it's installed
try:
    # only move forward if we can import CompletionFinder and AutoCompleter
    from cmd2.argcomplete_bridge import CompletionFinder
    from cmd2.argparse_completer import AutoCompleter
    if __name__ == '__main__':
        completer = CompletionFinder()
        completer(base_parser, AutoCompleter(base_parser))
except ImportError:
    pass

# Intentionally below the bash completion code to reduce tab completion lag
import cmd2


class SubcommandsExample(cmd2.Cmd):
    """
    Example cmd2 application where we a base command which has a couple subcommands
    and the "sport" subcommand has tab completion enabled.
    """
    def __init__(self):
        super().__init__()