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

1# test_fzf.py 

2 

3import pytest 

4from pyselector.menus.fzf import Fzf 

5 

6 

7@pytest.fixture 

8def fzf() -> Fzf: 

9 return Fzf() 

10 

11 

12def test_check_command(fzf) -> None: 

13 assert "fzf" in fzf.command 

14 

15 

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 

25 

26 

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 

43 

44 

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 

58 

59 

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 

72 

73 

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 

81 

82 

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 

91 

92 

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 )