mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-05-12 17:45:42 +02:00
feat: move to lazy widget import
This commit is contained in:
@@ -239,7 +239,7 @@ class TestBasicDockArea:
|
||||
assert basic_dock_area.widget_map(bec_widgets_only=False)["panel_bec"] is panel_bec
|
||||
|
||||
def test_new_widget_string_creates_widget(self, basic_dock_area, qtbot):
|
||||
basic_dock_area.new("DarkModeButton")
|
||||
basic_dock_area.new("RingProgressBar")
|
||||
qtbot.waitUntil(lambda: len(basic_dock_area.dock_list()) > 0, timeout=1000)
|
||||
|
||||
assert basic_dock_area.widget_list()
|
||||
@@ -623,7 +623,7 @@ class TestDockManagement:
|
||||
initial_count = len(advanced_dock_area.dock_list())
|
||||
|
||||
# Create a widget by string name
|
||||
widget = advanced_dock_area.new("DarkModeButton")
|
||||
widget = advanced_dock_area.new("RingProgressBar")
|
||||
|
||||
# Wait for the dock to be created (since it's async)
|
||||
qtbot.wait(200)
|
||||
@@ -691,7 +691,7 @@ class TestDockManagement:
|
||||
initial_count = len(widget_map)
|
||||
|
||||
# Create a widget
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
qtbot.wait(200)
|
||||
|
||||
# Check widget map updated
|
||||
@@ -705,7 +705,7 @@ class TestDockManagement:
|
||||
initial_count = len(widget_list)
|
||||
|
||||
# Create a widget
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
qtbot.wait(200)
|
||||
|
||||
# Check widget list updated
|
||||
@@ -715,8 +715,8 @@ class TestDockManagement:
|
||||
def test_delete_all(self, advanced_dock_area, qtbot):
|
||||
"""Test delete_all functionality."""
|
||||
# Create multiple widgets
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
|
||||
# Wait for docks to be created
|
||||
qtbot.wait(200)
|
||||
@@ -772,7 +772,7 @@ class TestWorkspaceLocking:
|
||||
def test_lock_workspace_property_setter(self, advanced_dock_area, qtbot):
|
||||
"""Test workspace_is_locked property setter."""
|
||||
# Create a dock first
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
qtbot.wait(200)
|
||||
|
||||
# Initially unlocked
|
||||
@@ -887,8 +887,8 @@ class TestToolbarFunctionality:
|
||||
def test_attach_all_action(self, advanced_dock_area, qtbot):
|
||||
"""Test attach_all toolbar action."""
|
||||
# Create floating docks
|
||||
advanced_dock_area.new("DarkModeButton", start_floating=True)
|
||||
advanced_dock_area.new("DarkModeButton", start_floating=True)
|
||||
advanced_dock_area.new("RingProgressBar", start_floating=True)
|
||||
advanced_dock_area.new("RingProgressBar", start_floating=True)
|
||||
|
||||
qtbot.wait(200)
|
||||
|
||||
@@ -916,7 +916,7 @@ class TestToolbarFunctionality:
|
||||
# Floating entry
|
||||
settings.setArrayIndex(0)
|
||||
settings.setValue("object_name", "FloatingWaveform")
|
||||
settings.setValue("widget_class", "DarkModeButton")
|
||||
settings.setValue("widget_class", "RingProgressBar")
|
||||
settings.setValue("closable", True)
|
||||
settings.setValue("floatable", True)
|
||||
settings.setValue("movable", True)
|
||||
@@ -934,7 +934,7 @@ class TestToolbarFunctionality:
|
||||
# Anchored entry
|
||||
settings.setArrayIndex(1)
|
||||
settings.setValue("object_name", "EmbeddedWaveform")
|
||||
settings.setValue("widget_class", "DarkModeButton")
|
||||
settings.setValue("widget_class", "RingProgressBar")
|
||||
settings.setValue("closable", True)
|
||||
settings.setValue("floatable", True)
|
||||
settings.setValue("movable", True)
|
||||
@@ -1760,9 +1760,9 @@ class TestProfileManagement:
|
||||
settings = open_runtime_settings("test_manifest")
|
||||
|
||||
# Create real docks
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
|
||||
# Wait for docks to be created
|
||||
qtbot.wait(1000)
|
||||
@@ -1870,7 +1870,7 @@ class TestWorkspaceProfileOperations:
|
||||
settings.beginWriteArray("manifest/widgets", 1)
|
||||
settings.setArrayIndex(0)
|
||||
settings.setValue("object_name", "test_widget")
|
||||
settings.setValue("widget_class", "DarkModeButton")
|
||||
settings.setValue("widget_class", "RingProgressBar")
|
||||
settings.setValue("closable", True)
|
||||
settings.setValue("floatable", True)
|
||||
settings.setValue("movable", True)
|
||||
@@ -1976,7 +1976,7 @@ class TestWorkspaceProfileOperations:
|
||||
settings.beginWriteArray("manifest/widgets", 1)
|
||||
settings.setArrayIndex(0)
|
||||
settings.setValue("object_name", "source_widget")
|
||||
settings.setValue("widget_class", "DarkModeButton")
|
||||
settings.setValue("widget_class", "RingProgressBar")
|
||||
settings.setValue("closable", True)
|
||||
settings.setValue("floatable", True)
|
||||
settings.setValue("movable", True)
|
||||
@@ -1985,7 +1985,7 @@ class TestWorkspaceProfileOperations:
|
||||
|
||||
advanced_dock_area.load_profile(source_profile)
|
||||
qtbot.wait(500)
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
qtbot.wait(500)
|
||||
|
||||
class StubDialog:
|
||||
@@ -2029,7 +2029,7 @@ class TestWorkspaceProfileOperations:
|
||||
settings.beginWriteArray("manifest/widgets", 1)
|
||||
settings.setArrayIndex(0)
|
||||
settings.setValue("object_name", f"{profile}_widget")
|
||||
settings.setValue("widget_class", "DarkModeButton")
|
||||
settings.setValue("widget_class", "RingProgressBar")
|
||||
settings.setValue("closable", True)
|
||||
settings.setValue("floatable", True)
|
||||
settings.setValue("movable", True)
|
||||
@@ -2038,7 +2038,7 @@ class TestWorkspaceProfileOperations:
|
||||
|
||||
advanced_dock_area.load_profile(profile_a)
|
||||
qtbot.wait(500)
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
qtbot.wait(500)
|
||||
|
||||
advanced_dock_area.load_profile(profile_b)
|
||||
@@ -2468,8 +2468,8 @@ class TestModeTransitions:
|
||||
def test_mode_switching_preserves_existing_docks(self, advanced_dock_area, qtbot):
|
||||
"""Test that mode switching doesn't affect existing docked widgets."""
|
||||
# Create some widgets
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("DarkModeButton")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
advanced_dock_area.new("RingProgressBar")
|
||||
qtbot.wait(200)
|
||||
|
||||
initial_dock_count = len(advanced_dock_area.dock_list())
|
||||
|
||||
@@ -5,7 +5,8 @@ import black
|
||||
import isort
|
||||
import pytest
|
||||
|
||||
from bec_widgets.utils.generate_cli import ClientGenerator
|
||||
from bec_widgets.utils.generate_cli import ClientGenerator, write_designer_plugins
|
||||
from bec_widgets.utils.generate_designer_plugin import DesignerPluginInfo
|
||||
from bec_widgets.utils.plugin_utils import BECClassContainer, BECClassInfo
|
||||
|
||||
# pylint: disable=missing-function-docstring
|
||||
@@ -59,6 +60,10 @@ class MockViewWithContent:
|
||||
"""Activate view."""
|
||||
|
||||
|
||||
class MockDesignerWidget:
|
||||
pass
|
||||
|
||||
|
||||
def test_client_generator_with_black_formatting():
|
||||
generator = ClientGenerator(base=True)
|
||||
container = BECClassContainer()
|
||||
@@ -285,3 +290,17 @@ c = a + b"""
|
||||
content = file.read()
|
||||
|
||||
assert corrected in content
|
||||
|
||||
|
||||
def test_write_designer_plugins(tmp_path):
|
||||
file_name = tmp_path / "designer_plugins.py"
|
||||
|
||||
write_designer_plugins([DesignerPluginInfo(MockDesignerWidget)], str(file_name))
|
||||
|
||||
with open(file_name, "r", encoding="utf-8") as file:
|
||||
content = file.read()
|
||||
|
||||
assert '"MockDesignerWidget":' in content
|
||||
assert '"tests.unit_tests.test_generate_cli_client"' in content
|
||||
assert '"MockDesignerWidget"' in content
|
||||
assert "MockDesignerWidgetPlugin" not in content
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from unittest.mock import patch
|
||||
|
||||
from bec_widgets.utils.bec_widget import BECWidget
|
||||
from bec_widgets.utils.plugin_utils import BECClassContainer, BECClassInfo
|
||||
from bec_widgets.utils import plugin_utils
|
||||
from bec_widgets.utils.rpc_widget_handler import RPCWidgetHandler
|
||||
|
||||
|
||||
@@ -10,21 +9,22 @@ def test_rpc_widget_handler():
|
||||
assert "Image" in handler.widget_classes
|
||||
assert "RingProgressBar" in handler.widget_classes
|
||||
assert "BECDockArea" in handler.widget_classes
|
||||
|
||||
|
||||
class _TestPluginWidget(BECWidget): ...
|
||||
assert isinstance(handler.widget_classes["Image"], tuple)
|
||||
|
||||
|
||||
@patch(
|
||||
"bec_widgets.utils.rpc_widget_handler.get_all_plugin_widgets",
|
||||
return_value=BECClassContainer(
|
||||
[
|
||||
BECClassInfo(name="DeviceComboBox", obj=_TestPluginWidget, module="", file=""),
|
||||
BECClassInfo(name="NewPluginWidget", obj=_TestPluginWidget, module="", file=""),
|
||||
]
|
||||
),
|
||||
"bec_widgets.utils.bec_plugin_helper.get_plugin_rpc_widget_registry",
|
||||
return_value={
|
||||
"Image": ("plugin.module", "PluginImage"),
|
||||
"NewPluginWidget": ("plugin.module", "NewPluginWidget"),
|
||||
},
|
||||
)
|
||||
def test_duplicate_plugins_not_allowed(_):
|
||||
handler = RPCWidgetHandler()
|
||||
assert handler.widget_classes["DeviceComboBox"] is not _TestPluginWidget
|
||||
assert handler.widget_classes["NewPluginWidget"] is _TestPluginWidget
|
||||
plugin_utils.rpc_widget_registry.cache_clear()
|
||||
|
||||
try:
|
||||
handler = RPCWidgetHandler()
|
||||
assert handler.widget_classes["Image"] != ("plugin.module", "PluginImage")
|
||||
assert handler.widget_classes["NewPluginWidget"] == ("plugin.module", "NewPluginWidget")
|
||||
finally:
|
||||
plugin_utils.rpc_widget_registry.cache_clear()
|
||||
|
||||
Reference in New Issue
Block a user