def test_cmd_default(default_command):
    cmd = create_cmd()
    if default_command is not None:
        cmd.default = default_command
    add_comm(cmd)
    add_comm2(cmd)
    add_comm3(cmd)
    cmd.queue("comm")
    cmd.queue("comm2")
    cmd.queue("")
    cmd.queue("quit")
    cmd.run()
    expected_lines = [
        COMM_TEXT,
        COMM_TEXT2,
    ]
    if default_command is IGNORE or default_command is None:
        pass
    elif default_command is REPEAT_LAST:
        expected_lines.append(COMM_TEXT2)
    elif default_command == "comm3":
        expected_lines.append(COMM_TEXT3)
    expected_lines.append("")
    expected_text = '\n'.join(expected_lines)
    #print(cmd.stdout.getvalue())
    #print(repr(cmd.stdout.getvalue()))
    #print()
    #print(repr(expected_text))
    assert cmd.stdout.getvalue() == expected_text
def cmdhis():
    cmd = create_cmd()
    add_comm(cmd)
    add_comm2(cmd)
    add_comm3(cmd)
    add_history(cmd)
    return cmd
def test_cmdx_queue_command0_doc(cmdx):
    doc = "Hi, folk!"
    cmd = create_cmd()
    cmd.doc = doc
    cmd = cmdx(cmd)
    cmd.queue("comm")
    cmd.run()
    debug_cmd(cmd)
    assert cmd.stdout.getvalue() == doc + '\n' + COMM_TEXT + '\n'
def test_ignore():
    cmd = create_cmd()
    add_comm(cmd)
    add_comm2(cmd)
    add_quit(cmd)
    cmd.exec_command_line("comm")
    assert cmd.stdout.getvalue() == COMM_TEXT + '\n'
    assert not IGNORE(cmd)
    cmd.queue("quit")
    cmd.run()
    assert cmd.stdout.getvalue() == COMM_TEXT + '\n'
def test_repeat_last():
    cmd = create_cmd()
    add_comm(cmd)
    add_comm2(cmd)
    add_quit(cmd)
    cmd.exec_command_line("comm")
    assert cmd.stdout.getvalue() == COMM_TEXT + '\n'
    assert not REPEAT_LAST(cmd)
    cmd.queue("quit")
    cmd.run()
    assert cmd.stdout.getvalue() == COMM_TEXT + '\n' + COMM_TEXT + '\n'
def cmd():
    cmd = create_cmd()

    @cmd.command
    def foo(interpreter):
        "This is foo command"
        interpreter.output(TEXT_FOO)
        return False

    @foo.topic
    def fx(interpreter):
        interpreter.output("foo fx")

    _grp = cmd.group(name="grp")

    @_grp.topic
    def gx(interpreter):
        interpreter.output("grp gx")

    @argument("--debug", "-d",
        action="store_true",
        help="enable debug mode")
    @_grp.command
    def bar(interpreter):
        "This is grp.bar command"
        interpreter.output(TEXT_BAR)
        return False

    @_grp.command
    def baz(interpreter):
        "This is grp.baz command"
        interpreter.output(TEXT_BAZ)
        return False

    @baz.document
    def baz(interpreter):
        interpreter.output("baz baz baz")

    @baz.topic(name="by")
    def ay(interpreter):
        interpreter.output("baz by")

    return cmd
def cmd():
    cmd = create_cmd()
    @cmd.command
    def bar(interpreter):
        interpreter.output(TEXT_BAR)
        return False

    @cmd.command
    def baz(interpreter):
        interpreter.output(TEXT_BAZ)
        return False

    @cmd.topic
    def bazbaz(interpreter):
        pass

    grpx = cmd.group("grpx")

    @grpx.command
    def grpx_0(interpreter):
        interpreter.output("grpx_0!")

    subgrpx = grpx.group("subgrpx")

    @subgrpx.command
    def subgrpx_0(interpreter):
        interpreter.output("subgrpx_0!")

    grpy = cmd.group("grpy")

    @grpy.command
    def grpy_0(interpreter):
        interpreter.output("grpy_0!")

    @argument("--name", "-n")
    @cmd.command
    def greet(interpreter, name):
        interpreter.output("Hello, {}!".format(name))
        return False

    return cmd
def test_load(tmpdir):
    cmd = create_cmd()
    add_comm(cmd)
    add_comm2(cmd)
    add_comm3(cmd)
    add_quit(cmd)
    fname = os.path.join(tmpdir.strpath, "load.txt")
    with open(fname, "w") as f_out:
        f_out.write("comm\n")
        f_out.write("comm3\n")
        f_out.write("comm2\n")
        f_out.write("quit\n")
    assert not LOAD(cmd, fname)
    cmd.run()
    expected_lines = [
        COMM_TEXT,
        COMM_TEXT3,
        COMM_TEXT2,
        '',
    ]
    assert cmd.stdout.getvalue() == '\n'.join(expected_lines)
def cmd():
    cmd = create_cmd()
    @cmd.command
    def foo(interpreter):
        interpreter.output("foo!")
        return False

    _bar = cmd.group("bar")

    @_bar.command(name="bar0")
    def bar_0(interpreter):
        interpreter.output("bar.bar0!")

    @_bar.command(name="bar1")
    def bar_1(interpreter):
        interpreter.output("bar.bar1!")

    _bar_sub = _bar.group("sub")

    @_bar_sub.command(name="sub0")
    def bar_sub_sub0(interpreter):
        interpreter.output("bar.sub.sub0!")

    _baz = cmd.group("baz")

    @_baz.command(name="baz0")
    def baz_0(interpreter):
        interpreter.output("baz.baz0!")

    _baz_sub = _baz.group("sub")

    @_baz_sub.command(name="sub0")
    def baz_sub_sub0(interpreter):
        interpreter.output("baz.sub.sub0!")


    return cmd
def test_shell_fail():
    cmd = create_cmd()
    assert not SHELL(cmd, 'non_existent_command')
    assert cmd.stdout.getvalue() == ""
    assert cmd.stderr.getvalue() != ""
def test_shell_ok():
    text = 'Hello, world!'
    cmd = create_cmd()
    assert not SHELL(cmd, 'echo', text)
    assert cmd.stdout.getvalue() == text + '\n'
def test_quit():
    cmd = create_cmd()
    assert QUIT(cmd)
def cmdpy():
    cmd = create_cmd()
    add_py(cmd)
    add_history(cmd)
    return cmd