mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-11-13 04:54:08 +01:00
test(gui): isolate window remapping from BEC and RPC dispatch
This commit is contained in:
1 parent
74f9cf0ff1
commit
44a42bbfa2
3 files changed
+145
-1
No files matched your search
@@ -1,15 +1,17 @@
|
||||
import argparse
|
||||
from threading import Thread
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import pytest
|
||||
from bec_lib.service_config import ServiceConfig
|
||||
from qtpy.QtCore import QCoreApplication, QEvent, QObject, Qt
|
||||
from qtpy.QtCore import QCoreApplication, QEvent, QObject, Qt, QThread
|
||||
from qtpy.QtWidgets import QWidget
|
||||
|
||||
from bec_widgets.applications import companion_app as companion_app_module
|
||||
from bec_widgets.applications.companion_app import GUIServer
|
||||
from bec_widgets.utils import rpc_server as rpc_server_module
|
||||
from bec_widgets.utils.bec_connector import BECConnector
|
||||
from bec_widgets.utils.bec_dispatcher import QtThreadSafeCallback
|
||||
from bec_widgets.utils.rpc_server import RegistryNotReadyError, RPCServer, SingleshotRPCRepeat
|
||||
|
||||
from .client_mocks import mocked_client
|
||||
@@ -251,6 +253,39 @@ def test_repeated_wayland_raises_share_pending_remap(rpc_server, dummy_widget, m
|
||||
assert events.hide_events == events.show_events == 1
|
||||
|
||||
|
||||
def test_wayland_raise_from_dispatcher_worker_runs_on_gui_thread(
|
||||
rpc_server, dummy_widget, monkeypatch, qtbot, qapp
|
||||
):
|
||||
monkeypatch.setattr(rpc_server_module.QApplication, "platformName", lambda: "wayland")
|
||||
monkeypatch.setattr(dummy_widget, "isActiveWindow", lambda: False)
|
||||
dummy_widget.show()
|
||||
events = WindowEvents(dummy_widget)
|
||||
activation_threads = []
|
||||
callback = QtThreadSafeCallback(rpc_server.on_rpc_update)
|
||||
instruction = {
|
||||
"action": "raise",
|
||||
"parameter": {"gui_id": dummy_widget.gui_id, "args": [], "kwargs": {}},
|
||||
}
|
||||
with (
|
||||
patch.object(rpc_server, "send_response") as response,
|
||||
patch.object(
|
||||
dummy_widget,
|
||||
"activateWindow",
|
||||
side_effect=lambda: activation_threads.append(QThread.currentThread()),
|
||||
),
|
||||
):
|
||||
worker = Thread(target=callback, args=(instruction, {"request_id": "raise-from-worker"}))
|
||||
worker.start()
|
||||
worker.join(timeout=2)
|
||||
assert not worker.is_alive()
|
||||
qtbot.waitUntil(lambda: bool(activation_threads) and response.called)
|
||||
|
||||
assert activation_threads == [qapp.thread()]
|
||||
assert events.hide_events == events.show_events == 1
|
||||
assert dummy_widget.isVisible()
|
||||
response.assert_called_once_with("raise-from-worker", True, {"result": None})
|
||||
|
||||
|
||||
@pytest.mark.parametrize("method", ["hide", "close", "show"])
|
||||
def test_visibility_request_cancels_pending_wayland_raise(
|
||||
rpc_server, dummy_widget, monkeypatch, qapp, method
|
||||
|
||||
Reference in new issue
Block a user