1# -*- coding: utf-8 -*-
2
3import click
4from click._bashcomplete import get_choices
5
6
7def test_single_command():
8    @click.command()
9    @click.option('--local-opt')
10    def cli(local_opt):
11        pass
12
13    assert list(get_choices(cli, 'lol', [], '-')) == ['--local-opt']
14    assert list(get_choices(cli, 'lol', [], '')) == []
15
16
17def test_small_chain():
18    @click.group()
19    @click.option('--global-opt')
20    def cli(global_opt):
21        pass
22
23    @cli.command()
24    @click.option('--local-opt')
25    def sub(local_opt):
26        pass
27
28    assert list(get_choices(cli, 'lol', [], '')) == ['sub']
29    assert list(get_choices(cli, 'lol', [], '-')) == ['--global-opt']
30    assert list(get_choices(cli, 'lol', ['sub'], '')) == []
31    assert list(get_choices(cli, 'lol', ['sub'], '-')) == ['--local-opt']
32
33
34def test_long_chain():
35    @click.group('cli')
36    @click.option('--cli-opt')
37    def cli(cli_opt):
38        pass
39
40    @cli.group('asub')
41    @click.option('--asub-opt')
42    def asub(asub_opt):
43        pass
44
45    @asub.group('bsub')
46    @click.option('--bsub-opt')
47    def bsub(bsub_opt):
48        pass
49
50    @bsub.command('csub')
51    @click.option('--csub-opt')
52    def csub(csub_opt):
53        pass
54
55    assert list(get_choices(cli, 'lol', [], '-')) == ['--cli-opt']
56    assert list(get_choices(cli, 'lol', [], '')) == ['asub']
57    assert list(get_choices(cli, 'lol', ['asub'], '-')) == ['--asub-opt']
58    assert list(get_choices(cli, 'lol', ['asub'], '')) == ['bsub']
59    assert list(get_choices(cli, 'lol', ['asub', 'bsub'], '-')) == ['--bsub-opt']
60    assert list(get_choices(cli, 'lol', ['asub', 'bsub'], '')) == ['csub']
61    assert list(get_choices(cli, 'lol', ['asub', 'bsub', 'csub'], '-')) == ['--csub-opt']
62    assert list(get_choices(cli, 'lol', ['asub', 'bsub', 'csub'], '')) == []
63