import click


def test_basic_defaults(runner):
    @click.command()
    @click.option('--foo', default=42, type=click.FLOAT)
    def cli(foo):
        assert type(foo) is float
        click.echo('FOO:[%s]' % foo)

    result = runner.invoke(cli, [])
    assert not result.exception
    assert 'FOO:[42.0]' in result.output


def test_multiple_defaults(runner):
    @click.command()
    @click.option('--foo', default=[23, 42], type=click.FLOAT,
                  multiple=True)
    def cli(foo):
        for item in foo:
            assert type(item) is float
            click.echo(item)

    result = runner.invoke(cli, [])
    assert not result.exception
    assert result.output.splitlines() == [
        '23.0',
        '42.0',
    ]


def test_nargs_plus_multiple(runner):
    @click.command()
    @click.option('--arg', default=((1, 2), (3, 4)),
                  nargs=2, multiple=True, type=click.INT)
    def cli(arg):
        for item in arg:
            click.echo('<%d|%d>' % item)

    result = runner.invoke(cli, [])
    assert not result.exception
    assert result.output.splitlines() == [
        '<1|2>',
        '<3|4>',
    ]
