fix: dispatch Wayland workspace events at runtime
This commit is contained in:
@@ -74,6 +74,42 @@ class CompositorStateAdapterRegressionTests(unittest.TestCase):
|
||||
self.assertFalse(backend.is_available("x11"))
|
||||
self.assertFalse(backend.is_available("wayland"))
|
||||
|
||||
def test_wayland_backend_installs_dispatch_watch_and_processes_runtime_events(self) -> None:
|
||||
fakeDisplay = mock.Mock()
|
||||
fakeRegistry = mock.Mock()
|
||||
fakeDisplay.connect = mock.Mock()
|
||||
fakeDisplay.get_registry = mock.Mock(return_value=fakeRegistry)
|
||||
fakeDisplay.get_fd = mock.Mock(return_value=17)
|
||||
fakeDisplay.roundtrip = mock.Mock()
|
||||
fakeDisplay.dispatch = mock.Mock(side_effect=[1, 0])
|
||||
fakeProtocols = mock.Mock()
|
||||
fakeProtocols.INTERFACE_NAME = "ext_workspace_manager_v1"
|
||||
fakeProtocols.INTERFACE_VERSION = 1
|
||||
fakeProtocols.ACTIVE_STATE_VALUE = 1
|
||||
fakeProtocols.has_runtime_support.return_value = True
|
||||
fakeProtocols.get_display_class.return_value = mock.Mock(return_value=fakeDisplay)
|
||||
emitSignal = mock.Mock()
|
||||
backend = compositor_state_wayland.WaylandSharedProtocolsBackend(
|
||||
environment={"WAYLAND_DISPLAY": "wayland-0"},
|
||||
protocols=fakeProtocols,
|
||||
)
|
||||
|
||||
with (
|
||||
mock.patch.object(compositor_state_wayland, "get_session_type", return_value="wayland"),
|
||||
mock.patch.object(compositor_state_wayland.GLib, "io_add_watch", return_value=41) as ioAddWatch,
|
||||
mock.patch.object(compositor_state_wayland.GLib, "source_remove") as sourceRemove,
|
||||
):
|
||||
backend.activate(emitSignal)
|
||||
|
||||
ioAddWatch.assert_called_once()
|
||||
watchCallback = ioAddWatch.call_args.args[3]
|
||||
self.assertTrue(watchCallback(17, compositor_state_wayland.GLib.IO_IN))
|
||||
self.assertEqual(fakeDisplay.dispatch.call_count, 2)
|
||||
|
||||
backend.deactivate()
|
||||
|
||||
sourceRemove.assert_called_once_with(41)
|
||||
|
||||
def test_local_ext_workspace_wrapper_supports_base_pywayland_without_distro_protocol_module(self) -> None:
|
||||
fakeClientModule = types.ModuleType("pywayland.client")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user