fix: tighten compositor adapter lifecycle
This commit is contained in:
@@ -6,6 +6,7 @@ from unittest import mock
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
|
||||
|
||||
from cthulhu import cthulhu_state
|
||||
from cthulhu import cthulhu
|
||||
from cthulhu import compositor_state_adapter
|
||||
from cthulhu import compositor_state_types
|
||||
|
||||
@@ -44,7 +45,18 @@ class CompositorStateAdapterRegressionTests(unittest.TestCase):
|
||||
|
||||
self.assertEqual(unavailableBackend.activate_calls, [])
|
||||
self.assertEqual(selectedBackend.activate_calls, [adapter])
|
||||
self.assertIs(adapter._workspaceBackend, selectedBackend)
|
||||
self.assertEqual(adapter.get_snapshot().backend_name, "selected")
|
||||
|
||||
def test_activate_is_idempotent_and_deactivates_previous_backend(self) -> None:
|
||||
backend = FakeWorkspaceBackend(True, "selected")
|
||||
adapter = compositor_state_adapter.CompositorStateAdapter(workspace_backends=[backend])
|
||||
|
||||
adapter.activate()
|
||||
adapter.activate()
|
||||
|
||||
self.assertEqual(backend.activate_calls, [adapter, adapter])
|
||||
self.assertEqual(backend.deactivate_calls, [adapter])
|
||||
self.assertEqual(adapter.get_snapshot().backend_name, "selected")
|
||||
|
||||
def test_sync_accessible_context_emits_focus_context_changed_when_active_window_token_changes(self) -> None:
|
||||
adapter = compositor_state_adapter.CompositorStateAdapter()
|
||||
@@ -96,6 +108,29 @@ class CompositorStateAdapterRegressionTests(unittest.TestCase):
|
||||
self.assertEqual(snapshot.active_window_token, "4242:Terminal")
|
||||
self.assertEqual(cthulhu_state.compositorSnapshot.active_window_token, "4242:Terminal")
|
||||
|
||||
def test_event_manager_startup_resyncs_adapter_after_focus_recovery(self) -> None:
|
||||
adapter = mock.Mock()
|
||||
adapter.sync_accessible_context = mock.Mock(return_value=None)
|
||||
listener = mock.Mock()
|
||||
window = object()
|
||||
focusedObject = object()
|
||||
|
||||
with (
|
||||
mock.patch.object(cthulhu.event_manager.Atspi.EventListener, "new", return_value=listener),
|
||||
mock.patch.object(cthulhu.event_manager.AXUtilities, "can_be_active_window", return_value=False),
|
||||
mock.patch.object(cthulhu.event_manager.AXUtilities, "find_active_window", return_value=window),
|
||||
mock.patch.object(cthulhu.event_manager.AXUtilities, "get_focused_object", return_value=focusedObject),
|
||||
mock.patch.object(cthulhu.event_manager.cthulhu, "setActiveWindow") as setActiveWindow,
|
||||
mock.patch.object(cthulhu.event_manager.cthulhu, "setLocusOfFocus") as setLocusOfFocus,
|
||||
):
|
||||
manager = cthulhu.event_manager.EventManager(mock.Mock())
|
||||
manager.set_compositor_state_adapter(adapter)
|
||||
manager._sync_focus_on_startup()
|
||||
|
||||
setActiveWindow.assert_called_once_with(window, alsoSetLocusOfFocus=True, notifyScript=False)
|
||||
setLocusOfFocus.assert_called_once_with(None, focusedObject, notifyScript=True, force=True)
|
||||
adapter.sync_accessible_context.assert_called_once_with("event-manager-startup")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user