示例#1
0
def test_get_arguments(builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")

    builder.add_arguments(arg1, arg2)

    assert {"argument1": arg1, "argument2": arg2} == builder.get_arguments()
示例#2
0
    def _render_help(self, layout):  # type: (BlockLayout) -> None
        help = self._application.config.help
        commands = self._application.named_commands
        global_args_format = self._application.global_args_format

        builder = ArgsFormatBuilder()
        builder.add_argument(
            Argument("command", Argument.REQUIRED, "The command to execute"))
        builder.add_argument(
            Argument("arg", Argument.MULTI_VALUED,
                     "The arguments of the command"))
        builder.add_options(*global_args_format.get_options().values())

        args_format = builder.format

        self._render_name(layout, self._application)
        self._render_usage(layout, self._application, args_format)
        self._render_arguments(layout, args_format.get_arguments().values())

        if args_format.has_options():
            self._render_global_options(layout,
                                        args_format.get_options().values())

        if not commands.is_empty():
            self._render_commands(layout, commands)

        if help:
            self._render_description(layout, help)
示例#3
0
def test_get_argument_by_position(builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")

    builder.add_arguments(arg1, arg2)

    assert arg1 == builder.get_argument(0)
    assert arg2 == builder.get_argument(1)
示例#4
0
def test_fail_if_adding_required_argument_after_optional_argument_in_base_definition(
    base_format_builder, ):
    base_format_builder.add_argument(Argument("argument1"))

    builder = ArgsFormatBuilder(base_format_builder.format)

    with pytest.raises(CannotAddArgumentException):
        builder.add_argument(Argument("argument2", Argument.REQUIRED))
示例#5
0
def test_has_argument_at_position(builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")

    builder.add_arguments(arg1, arg2)

    assert builder.has_argument(0)
    assert builder.has_argument(1)
示例#6
0
def test_has_arguments(builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")

    builder.add_arguments(arg1, arg2)

    assert builder.has_arguments()
    assert builder.has_arguments()
示例#7
0
def test_argument_preserves_existing_arguments(builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")

    builder.add_argument(arg1)
    builder.add_argument(arg2)

    assert {"argument1": arg1, "argument2": arg2} == builder.get_arguments()
示例#8
0
def test_fail_if_adding_argument_with_existing_name_in_base_definition(
    base_format_builder, ):
    base_format_builder.add_argument(Argument("argument", Argument.REQUIRED))

    builder = ArgsFormatBuilder(base_format_builder.format)

    with pytest.raises(CannotAddArgumentException):
        builder.add_argument(Argument("argument", Argument.OPTIONAL))
示例#9
0
def test_optional_argument_with_default_value():
    arg = Argument("argument", Argument.OPTIONAL, default="Default")

    assert "argument" == arg.name
    assert not arg.is_required()
    assert arg.is_optional()
    assert not arg.is_multi_valued()
    assert "Default" == arg.default
    assert arg.description is None
示例#10
0
def test_create():
    arg = Argument("argument")

    assert "argument" == arg.name
    assert not arg.is_required()
    assert arg.is_optional()
    assert not arg.is_multi_valued()
    assert arg.default is None
    assert arg.description is None
示例#11
0
def test_optional_multi_valued_argument():
    arg = Argument("argument", Argument.OPTIONAL | Argument.MULTI_VALUED)

    assert "argument" == arg.name
    assert not arg.is_required()
    assert arg.is_optional()
    assert arg.is_multi_valued()
    assert arg.default == []
    assert arg.description is None
示例#12
0
def test_optional_argument():
    arg = Argument("argument", Argument.OPTIONAL)

    assert "argument" == arg.name
    assert not arg.is_required()
    assert arg.is_optional()
    assert not arg.is_multi_valued()
    assert arg.default is None
    assert arg.description is None
示例#13
0
def test_set_arguments(builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")
    arg3 = Argument("argument3")

    builder.add_argument(arg1)
    builder.set_arguments(arg2, arg3)

    assert {"argument2": arg2, "argument3": arg3} == builder.get_arguments()
示例#14
0
def test_fail_if_adding_optional_argument_after_multi_valued_argument_in_base_definition(
    base_format_builder, ):
    base_format_builder.add_argument(
        Argument("argument1", Argument.MULTI_VALUED))

    builder = ArgsFormatBuilder(base_format_builder.format)

    with pytest.raises(CannotAddArgumentException):
        builder.add_argument(Argument("argument2"))
示例#15
0
def test_parse_fails_if_missing_required_argument(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1", Argument.REQUIRED))
    builder.add_argument(Argument("argument2", Argument.REQUIRED))
    fmt = builder.format

    with pytest.raises(CannotParseArgsException):
        parser.parse(StringArgs("server add foo"), fmt)
示例#16
0
def test_optional_multi_valued_argument_with_default():
    arg = Argument(
        "argument", Argument.OPTIONAL | Argument.MULTI_VALUED, default=["foo", "bar"]
    )

    assert "argument" == arg.name
    assert not arg.is_required()
    assert arg.is_optional()
    assert arg.is_multi_valued()
    assert ["foo", "bar"] == arg.default
    assert arg.description is None
示例#17
0
def test_has_optional_argument(builder):
    arg1 = Argument("argument1", Argument.REQUIRED)
    arg2 = Argument("argument2", Argument.OPTIONAL)

    builder.add_argument(arg1)

    assert not builder.has_optional_argument()

    builder.add_argument(arg2)

    assert builder.has_optional_argument()
示例#18
0
def test_has_multi_valued_argument(builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2", Argument.MULTI_VALUED)

    builder.add_argument(arg1)

    assert not builder.has_multi_valued_argument()

    builder.add_argument(arg2)

    assert builder.has_multi_valued_argument()
示例#19
0
def test_has_argument_at_position_from_base_definition(base_format_builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")
    base_format_builder.add_argument(arg1)

    builder = ArgsFormatBuilder(base_format_builder.format)
    builder.add_argument(arg2)

    assert builder.has_argument(0)
    assert builder.has_argument(1)
    assert not builder.has_argument(1, False)
    assert builder.has_argument(0, False)
示例#20
0
def test_get_arguments_with_base_arguments(base_format_builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")

    base_format_builder.add_argument(arg1)

    builder = ArgsFormatBuilder(base_format_builder.format)

    builder.add_argument(arg2)

    assert {"argument1": arg1, "argument2": arg2} == builder.get_arguments()
    assert {"argument2": arg2} == builder.get_arguments(False)
示例#21
0
def test_parse_does_not_fail_if_missing_required_argument_and_lenient(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1", Argument.REQUIRED))
    builder.add_argument(Argument("argument2", Argument.REQUIRED))
    fmt = builder.format

    args = parser.parse(StringArgs("server add foo"), fmt, True)

    assert {"argument1": "foo"} == args.arguments(False)
    assert {} == args.options(False)
示例#22
0
def test_parse_arguments(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server")
    add = CommandName("add")
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1"))
    builder.add_argument(Argument("argument2"))
    fmt = builder.format

    args = parser.parse(StringArgs("server add foo bar"), fmt)

    assert {"argument1": "foo", "argument2": "bar"} == args.arguments(False)
    assert {} == args.options(False)
示例#23
0
def test_parse_arguments_ignores_missing_command_name_aliases(parser):
    builder = ArgsFormatBuilder()
    server = CommandName("server", ["server-alias"])
    add = CommandName("add", ["add-alias"])
    builder.add_command_names(server, add)
    builder.add_argument(Argument("argument1"))
    builder.add_argument(Argument("argument2"))
    fmt = builder.format

    args = parser.parse(StringArgs("server-alias foo bar"), fmt)

    assert {"argument1": "foo", "argument2": "bar"} == args.arguments(False)
    assert {} == args.options(False)
示例#24
0
def test_has_arguments_with_base_definition(base_format_builder):
    arg1 = Argument("argument1")
    arg2 = Argument("argument2")
    base_format_builder.add_argument(arg1)

    builder = ArgsFormatBuilder(base_format_builder.format)

    assert builder.has_arguments()
    assert not builder.has_arguments(False)

    builder.add_argument(arg2)

    assert builder.has_arguments()
    assert builder.has_arguments(False)
示例#25
0
def test_has_multi_valued_argument_with_base_definition(base_format_builder):
    base_format_builder.add_argument(Argument("argument", Argument.MULTI_VALUED))

    builder = ArgsFormatBuilder(base_format_builder.format)

    assert builder.has_multi_valued_argument()
    assert not builder.has_multi_valued_argument(False)
示例#26
0
def test_get_argument_by_position_from_base_definition(base_format_builder):
    arg = Argument("argument")
    base_format_builder.add_argument(arg)

    builder = ArgsFormatBuilder(base_format_builder.format)

    assert arg == builder.get_argument(0)
示例#27
0
def test_has_required_argument_with_base_definition(base_format_builder):
    base_format_builder.add_argument(Argument("argument", Argument.REQUIRED))

    builder = ArgsFormatBuilder(base_format_builder.format)

    assert builder.has_required_argument()
    assert not builder.has_required_argument(False)
示例#28
0
def test_has_optional_argument_with_base_definition(base_format_builder):
    base_format_builder.add_argument(Argument("argument", Argument.OPTIONAL))

    builder = ArgsFormatBuilder(base_format_builder.format)

    assert builder.has_optional_argument()
    assert not builder.has_optional_argument(False)
示例#29
0
def test_has_required_argument(builder):
    arg = Argument("argument", Argument.REQUIRED)

    assert not builder.has_required_argument()

    builder.add_argument(arg)

    assert builder.has_required_argument()
示例#30
0
def test_get_argument_fails_if_in_base_definition_but_include_base_disabled(
    base_format_builder, ):
    arg = Argument("argument")
    base_format_builder.add_argument(arg)

    builder = ArgsFormatBuilder(base_format_builder.format)

    with pytest.raises(NoSuchArgumentException):
        builder.get_argument("argument", False)