"""Regression tests for keybinding API compatibility.""" from __future__ import annotations import pytest from cthulhu import keybindings class DummyHandler: description = "dummy handler" @pytest.mark.unit def test_keybinding_accepts_lightweight_command_manager_form(): binding = keybindings.KeyBinding("KP_Divide", keybindings.CTHULHU_MODIFIER_MASK) assert binding.keysymstring == "KP_Divide" assert binding.modifier_mask == keybindings.defaultModifierMask assert binding.modifiers == keybindings.CTHULHU_MODIFIER_MASK assert binding.handler is None assert binding.click_count == 1 @pytest.mark.unit def test_keybinding_accepts_lightweight_positional_click_count(): binding = keybindings.KeyBinding("a", keybindings.CTHULHU_MODIFIER_MASK, 2) assert binding.modifier_mask == keybindings.defaultModifierMask assert binding.modifiers == keybindings.CTHULHU_MODIFIER_MASK assert binding.click_count == 2 @pytest.mark.unit def test_keybinding_preserves_legacy_handler_form(): handler = DummyHandler() binding = keybindings.KeyBinding( "b", keybindings.defaultModifierMask, keybindings.CTHULHU_SHIFT_MODIFIER_MASK, handler, 3, ) assert binding.modifier_mask == keybindings.defaultModifierMask assert binding.modifiers == keybindings.CTHULHU_SHIFT_MODIFIER_MASK assert binding.handler is handler assert binding.click_count == 3 @pytest.mark.unit def test_keybinding_exposes_command_manager_helpers(): binding = keybindings.KeyBinding("c", keybindings.CTHULHU_MODIFIER_MASK) assert keybindings.get_modifier_names is keybindings.getModifierNames assert keybindings.CTHULHU_ALT_SHIFT_MODIFIER_MASK == ( keybindings.CTHULHU_MODIFIER_MASK | keybindings.ALT_MODIFIER_MASK | keybindings.SHIFT_MODIFIER_MASK ) binding.set_grab_ids([42]) assert binding.get_grab_ids() == [42] @pytest.mark.unit def test_keybinding_add_grabs_accepts_explicit_cthulhu_modifiers(monkeypatch): binding = keybindings.KeyBinding("d", keybindings.CTHULHU_MODIFIER_MASK) captured = {} class FakeInputEventManager: def add_grabs_for_keybinding(self, grab_binding, cthulhu_modifiers): captured["binding"] = grab_binding captured["cthulhu_modifiers"] = cthulhu_modifiers return [7] from cthulhu import input_event_manager monkeypatch.setattr( input_event_manager, "get_manager", lambda: FakeInputEventManager(), ) binding.add_grabs(["Insert"]) assert captured == {"binding": binding, "cthulhu_modifiers": ["Insert"]} assert binding.get_grab_ids() == [7]