Remove python-atspi dependency
This commit is contained in:
@@ -118,6 +118,9 @@ class InputEventManagerKeyWatcherTests(unittest.TestCase):
|
||||
device = FakeDevice()
|
||||
fakeAtspi = self._fake_atspi((2, 60, 5), device)
|
||||
fakeAtspi.EventType = types.SimpleNamespace(KEY_PRESSED_EVENT=0, KEY_RELEASED_EVENT=1)
|
||||
fakeAtspi.DeviceListener = types.SimpleNamespace(new=mock.Mock(return_value=object()))
|
||||
fakeAtspi.register_keystroke_listener = mock.Mock(return_value=True)
|
||||
fakeAtspi.deregister_keystroke_listener = mock.Mock(return_value=True)
|
||||
fakeKeySet = [types.SimpleNamespace(keycode=38), types.SimpleNamespace(keycode=56)]
|
||||
|
||||
with (
|
||||
@@ -128,8 +131,6 @@ class InputEventManagerKeyWatcherTests(unittest.TestCase):
|
||||
"_get_x11_consumable_key_set",
|
||||
return_value=fakeKeySet,
|
||||
),
|
||||
mock.patch.object(input_event_manager.pyatspi.Registry, "registerKeystrokeListener") as register,
|
||||
mock.patch.object(input_event_manager.pyatspi.Registry, "deregisterKeystrokeListener") as deregister,
|
||||
mock.patch.object(manager, "_initialize_xterm_handoff") as initializeXtermHandoff,
|
||||
):
|
||||
manager.start_key_watcher()
|
||||
@@ -148,19 +149,18 @@ class InputEventManagerKeyWatcherTests(unittest.TestCase):
|
||||
shiftLockMask | numLockMask,
|
||||
shiftMask | shiftLockMask | numLockMask,
|
||||
]
|
||||
register.assert_called_once_with(
|
||||
listener = fakeAtspi.DeviceListener.new.return_value
|
||||
fakeAtspi.DeviceListener.new.assert_called_once_with(
|
||||
manager._process_selective_legacy_keyboard_event,
|
||||
key_set=fakeKeySet,
|
||||
mask=expectedMasks,
|
||||
kind=(0, 1),
|
||||
synchronous=True,
|
||||
preemptive=True,
|
||||
None,
|
||||
)
|
||||
deregister.assert_called_once_with(
|
||||
manager._process_selective_legacy_keyboard_event,
|
||||
key_set=fakeKeySet,
|
||||
mask=expectedMasks,
|
||||
kind=(0, 1),
|
||||
self.assertEqual(
|
||||
fakeAtspi.register_keystroke_listener.call_args_list,
|
||||
[mock.call(listener, fakeKeySet, mask, 3, 3) for mask in expectedMasks],
|
||||
)
|
||||
self.assertEqual(
|
||||
fakeAtspi.deregister_keystroke_listener.call_args_list,
|
||||
[mock.call(listener, fakeKeySet, mask, 3) for mask in expectedMasks],
|
||||
)
|
||||
initializeXtermHandoff.assert_called_once_with()
|
||||
self.assertEqual(
|
||||
@@ -171,6 +171,83 @@ class InputEventManagerKeyWatcherTests(unittest.TestCase):
|
||||
],
|
||||
)
|
||||
|
||||
def test_x11_consumable_listener_rolls_back_partial_registration(self) -> None:
|
||||
manager = input_event_manager.InputEventManager()
|
||||
device = FakeDevice()
|
||||
fakeAtspi = self._fake_atspi((2, 60, 5), device)
|
||||
fakeAtspi.EventType = types.SimpleNamespace(KEY_PRESSED_EVENT=0, KEY_RELEASED_EVENT=1)
|
||||
fakeAtspi.DeviceListener = types.SimpleNamespace(new=mock.Mock(return_value=object()))
|
||||
fakeAtspi.register_keystroke_listener = mock.Mock(
|
||||
side_effect=[True, True, False],
|
||||
)
|
||||
fakeAtspi.deregister_keystroke_listener = mock.Mock(return_value=True)
|
||||
fakeKeySet = [types.SimpleNamespace(keycode=56)]
|
||||
|
||||
with (
|
||||
mock.patch.object(input_event_manager, "Atspi", fakeAtspi),
|
||||
mock.patch.dict(input_event_manager.os.environ, {"XDG_SESSION_TYPE": "x11"}),
|
||||
mock.patch.object(
|
||||
input_event_manager,
|
||||
"_get_x11_consumable_key_set",
|
||||
return_value=fakeKeySet,
|
||||
),
|
||||
mock.patch.object(manager, "_initialize_xterm_handoff"),
|
||||
):
|
||||
manager.start_key_watcher()
|
||||
|
||||
expectedMasks = list(input_event_manager._X11_CONSUMABLE_MODIFIER_MASKS)
|
||||
listener = fakeAtspi.DeviceListener.new.return_value
|
||||
self.assertEqual(
|
||||
fakeAtspi.register_keystroke_listener.call_args_list,
|
||||
[
|
||||
mock.call(listener, fakeKeySet, expectedMasks[0], 3, 3),
|
||||
mock.call(listener, fakeKeySet, expectedMasks[1], 3, 3),
|
||||
mock.call(listener, fakeKeySet, expectedMasks[2], 3, 3),
|
||||
],
|
||||
)
|
||||
self.assertEqual(
|
||||
fakeAtspi.deregister_keystroke_listener.call_args_list,
|
||||
[
|
||||
mock.call(listener, fakeKeySet, expectedMasks[0], 3),
|
||||
mock.call(listener, fakeKeySet, expectedMasks[1], 3),
|
||||
],
|
||||
)
|
||||
self.assertFalse(manager._selective_legacy_listener_active)
|
||||
self.assertEqual(manager._selective_legacy_key_set, [])
|
||||
self.assertEqual(manager._selective_legacy_keycodes, set())
|
||||
|
||||
def test_x11_consumable_listener_preserves_failed_deregistration_for_retry(self) -> None:
|
||||
manager = input_event_manager.InputEventManager()
|
||||
listener = object()
|
||||
keySet = [types.SimpleNamespace(keycode=56)]
|
||||
manager._selective_legacy_listener_active = True
|
||||
manager._selective_legacy_listener = listener
|
||||
manager._selective_legacy_registered_masks = [0]
|
||||
manager._selective_legacy_key_set = keySet
|
||||
manager._selective_legacy_keycodes = {56}
|
||||
|
||||
with mock.patch.object(
|
||||
input_event_manager.Atspi,
|
||||
"deregister_keystroke_listener",
|
||||
side_effect=[False, True],
|
||||
) as deregister:
|
||||
manager._deregister_selective_legacy_key_listener()
|
||||
|
||||
self.assertTrue(manager._selective_legacy_listener_active)
|
||||
self.assertIs(manager._selective_legacy_listener, listener)
|
||||
self.assertEqual(manager._selective_legacy_registered_masks, [0])
|
||||
self.assertEqual(manager._selective_legacy_key_set, keySet)
|
||||
self.assertEqual(manager._selective_legacy_keycodes, {56})
|
||||
|
||||
manager._deregister_selective_legacy_key_listener()
|
||||
|
||||
self.assertEqual(deregister.call_count, 2)
|
||||
self.assertFalse(manager._selective_legacy_listener_active)
|
||||
self.assertIsNone(manager._selective_legacy_listener)
|
||||
self.assertEqual(manager._selective_legacy_registered_masks, [])
|
||||
self.assertEqual(manager._selective_legacy_key_set, [])
|
||||
self.assertEqual(manager._selective_legacy_keycodes, set())
|
||||
|
||||
def test_x11_consumable_keycodes_include_structural_navigation_but_not_tab(self) -> None:
|
||||
keycodes = {
|
||||
keysym: index + 20
|
||||
|
||||
Reference in New Issue
Block a user