def test_multiple_default_type(): opt = click.Option(["-a"], multiple=True, default=(1, 2)) assert opt.nargs == 1 assert opt.multiple assert opt.type is click.INT ctx = click.Context(click.Command("test")) assert opt.get_default(ctx) == (1, 2)
def test_missing_option_string_cast(): ctx = click.Context(click.Command("")) with pytest.raises(click.MissingParameter) as excinfo: click.Option(["-a"], required=True).full_process_value(ctx, None) assert str(excinfo.value) == "missing parameter: a"
def test_multiple_default_composite_type(): opt = click.Option(["-a"], multiple=True, default=[(1, "a")]) assert opt.nargs == 2 assert opt.multiple assert isinstance(opt.type, click.Tuple) assert opt.type.types == [click.INT, click.STRING] ctx = click.Context(click.Command("test")) assert opt.get_default(ctx) == ((1, "a"), )
def test_invalid_option(runner): with pytest.raises(TypeError, match="name was passed") as exc_info: click.Option(["foo"]) message = str(exc_info.value) assert "name was passed (foo)" in message assert "declare an argument" in message assert "'--foo'" in message
def test_group_add_command_name(runner): cli = click.Group("cli") cmd = click.Command("a", params=[click.Option(["-x"], required=True)]) cli.add_command(cmd, "b") # Check that the command is accessed through the registered name, # not the original name. result = runner.invoke(cli, ["b"], default_map={"b": {"x": 3}}) assert result.exit_code == 0
def test_init_bad_default_list(runner, multiple, nargs, default): type = (str, str) if nargs == 2 else None with pytest.raises(ValueError, match="default"): click.Option(["-a"], type=type, multiple=multiple, nargs=nargs, default=default)
def test_show_default_boolean_flag_value(runner): """When a boolean flag only has one opt, it will show the default value, not the opt name. """ opt = click.Option(("--cache", ), is_flag=True, show_default=True, help="Enable the cache.") ctx = click.Context(click.Command("test")) message = opt.get_help_record(ctx)[1] assert "[default: False]" in message
def test_propagate_show_default_setting(runner): """A context's ``show_default`` setting defaults to the value from the parent context. """ group = click.Group( commands={ "sub": click.Command("sub", params=[click.Option(["-a"], default="a")]), }, context_settings={"show_default": True}, ) result = runner.invoke(group, ["sub", "--help"]) assert "[default: a]" in result.output
def test_cast_multi_default(runner, nargs, multiple, default, expect): if nargs == -1: param = click.Argument(["a"], nargs=nargs, default=default) else: param = click.Option(["-a"], nargs=nargs, multiple=multiple, default=default) cli = click.Command("cli", params=[param], callback=lambda a: a) result = runner.invoke(cli, standalone_mode=False) assert result.exception is None assert result.return_value == expect
def test_show_default_boolean_flag_name(runner, default, expect): """When a boolean flag has distinct True/False opts, it should show the default opt name instead of the default value. It should only show one name even if multiple are declared. """ opt = click.Option( ("--cache/--no-cache", "--c/--nc"), default=default, show_default=True, help="Enable/Disable the cache.", ) ctx = click.Context(click.Command("test")) message = opt.get_help_record(ctx)[1] assert f"[default: {expect}]" in message
def test_help_invalid_default(runner): cli = click.Command( "cli", params=[ click.Option( ["-a"], type=click.Path(exists=True), default="not found", show_default=True, ), ], ) result = runner.invoke(cli, ["--help"]) assert result.exit_code == 0 assert "default: not found" in result.output
def test_context_formatter_class(): """A context with a custom ``formatter_class`` should format help using that type. """ class CustomFormatter(click.HelpFormatter): def write_heading(self, heading): heading = click.style(heading, fg="yellow") return super().write_heading(heading) class CustomContext(click.Context): formatter_class = CustomFormatter context = CustomContext(click.Command("test", params=[click.Option(["--value"])]), color=True) assert "\x1b[33mOptions\x1b[0m:" in context.get_help()
def test_show_default_string(runner): """When show_default is a string show that value as default.""" opt = click.Option(["--limit"], show_default="unlimited") ctx = click.Context(click.Command("cli")) message = opt.get_help_record(ctx)[1] assert "[default: (unlimited)]" in message
click.Argument(["name"]), { "name": "name", "param_type_name": "argument", "opts": ["name"], "secondary_opts": [], "type": STRING_PARAM_TYPE[1], "required": True, "nargs": 1, "multiple": False, "default": None, "envvar": None, }, ) NUMBER_OPTION = ( click.Option(["-c", "--count", "number"], default=1), { "name": "number", "param_type_name": "option", "opts": ["-c", "--count"], "secondary_opts": [], "type": INT_PARAM_TYPE[1], "required": False, "nargs": 1, "multiple": False, "default": 1, "envvar": None, "help": None, "prompt": None, "is_flag": False, "flag_value": False,
def test_intrange_default_help_text(runner, type, expect): option = click.Option(["--count"], type=type, show_default=True, default=2) context = click.Context(click.Command("test")) result = option.get_help_record(context)[1] assert expect in result
def test_type_from_flag_value(): param = click.Option(["-a", "x"], default=True, flag_value=4) assert param.type is click.INT param = click.Option(["-b", "x"], flag_value=8) assert param.type is click.INT
def test_do_not_show_no_default(runner): """When show_default is True and no default is set do not show None.""" opt = click.Option(["--limit"], show_default=True) ctx = click.Context(click.Command("cli")) message = opt.get_help_record(ctx)[1] assert "[default: None]" not in message
def test_init_good_default_list(runner, multiple, nargs, default): click.Option(["-a"], multiple=multiple, nargs=nargs, default=default)
def test_flag_duplicate_names(runner): with pytest.raises(ValueError, match="cannot use the same flag for true/false"): click.Option(["--foo/--foo"], default=False)
def test_confirm_repeat(runner): cli = click.Command( "cli", params=[click.Option(["--a/--no-a"], default=None, prompt=True)] ) result = runner.invoke(cli, input="\ny\n") assert result.output == "A [y/n]: \nError: invalid input\nA [y/n]: y\n"
def test_suggest_possible_options(runner, value, expect): cli = click.Command( "cli", params=[click.Option(["--bound"]), click.Option(["--count"])]) result = runner.invoke(cli, [value]) assert expect in result.output