Coverage for tests/test_fzf.py: 100%
39 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-29 11:30 -0300
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-29 11:30 -0300
1# test_fzf.py
3import pytest
4from pyselector.menus.fzf import Fzf
7@pytest.fixture
8def fzf() -> Fzf:
9 return Fzf()
12def test_check_command(fzf) -> None:
13 assert "fzf" in fzf.command
16def test_build_command_args(fzf) -> None:
17 args = fzf._build_command(
18 case_sensitive=True,
19 multi_select=True,
20 prompt="Testing>",
21 )
22 assert "+i" in args
23 assert "--prompt" in args
24 assert "--multi" in args
27def test_build_command_kwargs(fzf) -> None:
28 args = fzf._build_command(
29 case_sensitive=True,
30 multi_select=False,
31 prompt="Testing>",
32 mesg="Testing...",
33 height="40%",
34 cycle=True,
35 preview=True,
36 )
37 assert "--prompt" in args
38 assert "--header" in args
39 assert "--cycle" in args
40 assert "--no-preview" not in args
41 assert "--multi" not in args
42 assert "--height" in args
45def test_build_command_header(fzf) -> None:
46 alt_r = fzf.keybind.add(
47 key="alt-r",
48 description="Testing add keybind",
49 callback=lambda: None,
50 )
51 args = fzf._build_command(
52 case_sensitive=True,
53 multi_select=False,
54 prompt="Testing>",
55 )
56 assert "--header" in args
57 assert f"--bind={alt_r.bind}:" in args
60def test_build_command_multi_select(fzf) -> None:
61 args = fzf._build_command(
62 case_sensitive=True,
63 multi_select=True,
64 prompt="Testing>",
65 preview=False,
66 height="40%",
67 invalid_arg=True,
68 )
69 assert "--no-preview" in args
70 assert "--multi" in args
71 assert "--height" in args
74def test_prompt_single_selection(fzf) -> None:
75 item, keycode = fzf.prompt(
76 case_sensitive=False,
77 multi_select=False,
78 items=["A", "B", "C"],
79 )
80 assert len(item) == 1
83def test_prompt_multiple_selection(fzf) -> None:
84 items, keycode = fzf.prompt(
85 case_sensitive=False,
86 multi_select=True,
87 items=["A", "B", "C"],
88 mesg="> Use <tab> to select all items",
89 )
90 assert len(items) == 3
93def test_prompt_empty_items(fzf) -> None:
94 with pytest.raises(SystemExit):
95 item, keycode = fzf.prompt(
96 case_sensitive=False, multi_select=False, mesg="> Hit <Escape>"
97 )