More web refactor. Tighten suspend terminal code.
This commit is contained in:
1 parent
5044455582
commit
1249aa791c
9 files changed
+1636
-64
No files matched your search
@@ -525,6 +525,114 @@ class InputEventManagerX11FocusRegressionTests(unittest.TestCase):
|
||||
oldScript.removeKeyGrabs.assert_called_once_with()
|
||||
oldScript.addKeyGrabs.assert_not_called()
|
||||
|
||||
def test_xterm_grabs_restore_on_x11_focus_change_without_keyboard_event(self):
|
||||
manager = input_event_manager.InputEventManager()
|
||||
activeScript = mock.Mock()
|
||||
scriptManager = mock.Mock()
|
||||
scriptManager.get_active_script.return_value = activeScript
|
||||
screen = mock.Mock()
|
||||
activeWindow = object()
|
||||
screen.get_active_window.return_value = activeWindow
|
||||
manager._scriptWithSuspendedGrabsForXterm = activeScript
|
||||
|
||||
with (
|
||||
mock.patch.object(input_event_manager.script_manager, "get_manager", return_value=scriptManager),
|
||||
mock.patch.object(manager, "_x11_window_xterm_match", return_value=False) as matcher,
|
||||
mock.patch.object(input_event_manager.debug, "print_tokens"),
|
||||
):
|
||||
manager._on_active_x11_window_changed(screen, None)
|
||||
|
||||
matcher.assert_called_once_with(activeWindow)
|
||||
activeScript.addKeyGrabs.assert_called_once_with()
|
||||
self.assertIsNone(manager._scriptWithSuspendedGrabsForXterm)
|
||||
|
||||
def test_xterm_focus_check_failure_starts_recovery_timer(self):
|
||||
manager = input_event_manager.InputEventManager()
|
||||
manager._device = object()
|
||||
manager._scriptWithSuspendedGrabsForXterm = object()
|
||||
screen = mock.Mock()
|
||||
screen.get_active_window.side_effect = RuntimeError("focus unavailable")
|
||||
|
||||
with (
|
||||
mock.patch.object(input_event_manager.GLib, "timeout_add", return_value=23),
|
||||
mock.patch.object(input_event_manager.debug, "print_message"),
|
||||
):
|
||||
manager._on_active_x11_window_changed(screen, None)
|
||||
|
||||
self.assertEqual(manager._xtermRecoverySourceId, 23)
|
||||
|
||||
def test_xterm_focus_monitor_is_connected_only_once(self):
|
||||
manager = input_event_manager.InputEventManager()
|
||||
screen = mock.Mock()
|
||||
screen.connect.return_value = 17
|
||||
|
||||
manager._ensure_xterm_focus_monitor(screen)
|
||||
manager._ensure_xterm_focus_monitor(screen)
|
||||
|
||||
screen.connect.assert_called_once_with(
|
||||
"active-window-changed",
|
||||
manager._on_active_x11_window_changed,
|
||||
)
|
||||
|
||||
def test_xterm_suspension_starts_fallback_when_focus_monitor_is_unavailable(self):
|
||||
manager = input_event_manager.InputEventManager()
|
||||
manager._device = object()
|
||||
activeScript = mock.Mock()
|
||||
scriptManager = mock.Mock()
|
||||
scriptManager.get_active_script.return_value = activeScript
|
||||
|
||||
with (
|
||||
mock.patch.object(input_event_manager.script_manager, "get_manager", return_value=scriptManager),
|
||||
mock.patch.object(input_event_manager.GLib, "timeout_add", return_value=23) as timeoutAdd,
|
||||
mock.patch.object(input_event_manager.debug, "print_tokens"),
|
||||
):
|
||||
manager._suspend_key_grabs_for_xterm()
|
||||
|
||||
timeoutAdd.assert_called_once_with(100, manager._poll_xterm_grab_recovery)
|
||||
self.assertEqual(manager._xtermRecoverySourceId, 23)
|
||||
|
||||
def test_xterm_grab_restore_failure_keeps_retry_state(self):
|
||||
manager = input_event_manager.InputEventManager()
|
||||
manager._device = object()
|
||||
activeScript = mock.Mock()
|
||||
activeScript.addKeyGrabs.side_effect = RuntimeError("grab failed")
|
||||
scriptManager = mock.Mock()
|
||||
scriptManager.get_active_script.return_value = activeScript
|
||||
manager._scriptWithSuspendedGrabsForXterm = activeScript
|
||||
|
||||
with (
|
||||
mock.patch.object(input_event_manager.script_manager, "get_manager", return_value=scriptManager),
|
||||
mock.patch.object(input_event_manager.GLib, "timeout_add", return_value=23),
|
||||
mock.patch.object(input_event_manager.debug, "print_message"),
|
||||
mock.patch.object(input_event_manager.debug, "print_tokens"),
|
||||
):
|
||||
manager._restore_key_grabs_after_xterm()
|
||||
|
||||
self.assertIs(manager._scriptWithSuspendedGrabsForXterm, activeScript)
|
||||
self.assertEqual(manager._xtermRecoverySourceId, 23)
|
||||
activeScript.removeKeyGrabs.assert_called_once_with()
|
||||
|
||||
def test_stopping_key_watcher_disconnects_xterm_focus_monitor(self):
|
||||
manager = input_event_manager.InputEventManager()
|
||||
screen = mock.Mock()
|
||||
manager._xtermFocusScreen = screen
|
||||
manager._xtermFocusHandlerId = 17
|
||||
manager._xtermRecoverySourceId = 23
|
||||
manager._scriptWithSuspendedGrabsForXterm = object()
|
||||
|
||||
with (
|
||||
mock.patch.object(input_event_manager.GLib, "source_remove") as sourceRemove,
|
||||
mock.patch.object(input_event_manager.debug, "print_message"),
|
||||
):
|
||||
manager.stop_key_watcher()
|
||||
|
||||
screen.disconnect.assert_called_once_with(17)
|
||||
sourceRemove.assert_called_once_with(23)
|
||||
self.assertIsNone(manager._xtermFocusScreen)
|
||||
self.assertEqual(manager._xtermFocusHandlerId, 0)
|
||||
self.assertEqual(manager._xtermRecoverySourceId, 0)
|
||||
self.assertIsNone(manager._scriptWithSuspendedGrabsForXterm)
|
||||
|
||||
def test_identifier_is_xterm_matches_exact_xterm_only(self):
|
||||
self.assertTrue(input_event_manager.InputEventManager._identifier_is_xterm("xterm"))
|
||||
self.assertTrue(input_event_manager.InputEventManager._identifier_is_xterm("/usr/bin/xterm"))
|
||||
|
||||
Reference in new issue
Block a user