Coverage for tests/test_key_manager.py: 98%

62 statements  

« prev     ^ index     » next       coverage.py v7.2.2, created at 2023-03-24 11:53 -0300

1# test_keybinds.py 

2 

3from __future__ import annotations 

4 

5import pytest 

6from pyselector.key_manager import Keybind 

7from pyselector.key_manager import KeybindError 

8from pyselector.key_manager import KeyManager 

9 

10 

11@pytest.fixture 

12def key_manager() -> KeyManager: 

13 return KeyManager() 

14 

15 

16@pytest.fixture 

17def test_keybind() -> tuple[str, str, bool]: 

18 return ("alt-n", "add record", False) 

19 

20 

21def test_add_keybind( 

22 key_manager: KeyManager, test_keybind: tuple[str, str, bool] 

23) -> None: 

24 bind, description, hidden = test_keybind 

25 keybind = key_manager.add(bind, description, lambda: None, hidden=hidden) 

26 assert isinstance(keybind, Keybind) 

27 assert keybind.bind == bind 

28 assert keybind.description == description 

29 assert keybind.hidden == hidden 

30 

31 

32def test_register_keybind( 

33 key_manager: KeyManager, test_keybind: tuple[str, str, bool] 

34) -> None: 

35 bind, description, hidden = test_keybind 

36 keybind = Keybind( 

37 id=1, 

38 bind=bind, 

39 code=10, 

40 description=description, 

41 hidden=hidden, 

42 callback=lambda: None, 

43 ) 

44 registered_keybind = key_manager.register(keybind) 

45 assert registered_keybind == keybind 

46 

47 

48def test_register_and_replace_keybind( 

49 key_manager: KeyManager, test_keybind: tuple[str, str, bool] 

50) -> None: 

51 bind, description, hidden = test_keybind 

52 keybind = Keybind( 

53 id=1, 

54 bind=bind, 

55 code=10, 

56 description=description, 

57 hidden=hidden, 

58 callback=lambda: None, 

59 ) 

60 key_manager.register(keybind) 

61 key_manager.register(keybind, exist_ok=True) 

62 

63 

64def test_register_existing_keybind( 

65 key_manager: KeyManager, test_keybind: tuple[str, str, bool] 

66) -> None: 

67 bind, description, hidden = test_keybind 

68 keybind = Keybind( 

69 id=1, 

70 bind=bind, 

71 code=10, 

72 description=description, 

73 hidden=hidden, 

74 callback=lambda: None, 

75 ) 

76 key_manager.register(keybind) 

77 with pytest.raises(KeybindError): 

78 key_manager.register(keybind) 

79 

80 

81def test_unregister_keybind( 

82 key_manager: KeyManager, test_keybind: tuple[str, str, bool] 

83) -> None: 

84 bind, description, hidden = test_keybind 

85 keybind = Keybind( 

86 id=1, 

87 bind=bind, 

88 code=10, 

89 description=description, 

90 hidden=hidden, 

91 callback=lambda: None, 

92 ) 

93 key_manager.register(keybind) 

94 key_manager.unregister(bind) 

95 assert key_manager.list_registered == [] 

96 

97 

98def test_unregister_keybind_error(key_manager: KeyManager) -> None: 

99 with pytest.raises(KeybindError): 

100 key_manager.unregister("CTRL+XX") 

101 

102 

103def test_toggle_all_keybinds(key_manager: KeyManager) -> None: 

104 key_manager.add("CTRL+S", "Save file", lambda: None) 

105 key_manager.add("CTRL+Z", "Undo last action", lambda: None) 

106 key_manager.add("CTRL+X", "Cut selected text", lambda: None) 

107 key_manager.toggle_all() 

108 for keybind in key_manager.list_registered: 

109 assert keybind.hidden 

110 

111 

112def test_toggle_hidden_keybinds(key_manager: KeyManager) -> None: 

113 key_manager.add("CTRL+S", "Save file", lambda: None, hidden=False) 

114 key_manager.add("CTRL+Z", "Undo last action", lambda: None, hidden=False) 

115 key_manager.add("CTRL+X", "Cut selected text", lambda: None, hidden=False) 

116 key_manager.add("CTRL+P", "Ignore", lambda: None, hidden=True) 

117 

118 key_manager.toggle_hidden() 

119 assert len(key_manager.temp_hidden) == 3 

120 

121 for keybind in key_manager.temp_hidden: 

122 assert keybind.hidden 

123 

124 key_manager.toggle_hidden(restore=True) 

125 for keybind in key_manager.temp_hidden: 

126 assert not keybind.hidden