mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-06-03 11:58:36 +02:00
fix: remove device/signal line edit and abstraction layer for combobox/lineEdit
This commit is contained in:
@@ -1,152 +1,92 @@
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
from bec_lib.device import ReadoutPriority
|
||||
from qtpy.QtWidgets import QWidget
|
||||
|
||||
from bec_widgets.widgets.control.device_input.base_classes.device_input_base import (
|
||||
from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import (
|
||||
BECDeviceFilter,
|
||||
DeviceInputBase,
|
||||
DeviceComboBox,
|
||||
DeviceInputConfig,
|
||||
)
|
||||
from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import DeviceComboBox
|
||||
|
||||
from .client_mocks import mocked_client
|
||||
from .conftest import create_widget
|
||||
|
||||
|
||||
# DeviceInputBase is meant to be mixed in a QWidget
|
||||
class DeviceInputWidget(DeviceInputBase, QWidget):
|
||||
"""Thin wrapper around DeviceInputBase to make it a QWidget"""
|
||||
|
||||
def __init__(self, parent=None, client=None, config=None, gui_id=None, **kwargs):
|
||||
super().__init__(parent=parent, client=client, gui_id=gui_id, config=config, **kwargs)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def device_input_base(qtbot, mocked_client):
|
||||
"""Fixture with mocked FilterIO and WidgetIO"""
|
||||
with mock.patch("bec_widgets.utils.filter_io.FilterIO.set_selection"):
|
||||
with mock.patch("bec_widgets.utils.widget_io.WidgetIO.set_value"):
|
||||
with mock.patch("bec_widgets.utils.widget_io.WidgetIO.get_value"):
|
||||
widget = create_widget(qtbot=qtbot, widget=DeviceInputWidget, client=mocked_client)
|
||||
yield widget
|
||||
|
||||
|
||||
def test_device_input_base_init(device_input_base):
|
||||
"""Test init"""
|
||||
assert device_input_base is not None
|
||||
assert device_input_base.client is not None
|
||||
assert isinstance(device_input_base, DeviceInputBase)
|
||||
assert device_input_base.config.widget_class == "DeviceInputWidget"
|
||||
assert device_input_base.config.device_filter == []
|
||||
assert device_input_base.config.default is None
|
||||
assert device_input_base.devices == []
|
||||
|
||||
|
||||
def test_device_input_base_init_with_config(qtbot, mocked_client):
|
||||
"""Test init with Config"""
|
||||
def test_device_combobox_init_with_config(qtbot, mocked_client):
|
||||
config = {
|
||||
"widget_class": "DeviceInputWidget",
|
||||
"widget_class": "DeviceComboBox",
|
||||
"gui_id": "test_gui_id",
|
||||
"device_filter": [BECDeviceFilter.POSITIONER],
|
||||
"device_filter": [BECDeviceFilter.POSITIONER.value],
|
||||
"default": "samx",
|
||||
}
|
||||
widget = DeviceInputWidget(client=mocked_client, config=config)
|
||||
widget2 = DeviceInputWidget(
|
||||
client=mocked_client, config=DeviceInputConfig.model_validate(config)
|
||||
widget = create_widget(
|
||||
qtbot=qtbot,
|
||||
widget=DeviceComboBox,
|
||||
client=mocked_client,
|
||||
config=DeviceInputConfig.model_validate(config),
|
||||
)
|
||||
qtbot.addWidget(widget)
|
||||
qtbot.addWidget(widget2)
|
||||
qtbot.waitExposed(widget)
|
||||
qtbot.waitExposed(widget2)
|
||||
for w in [widget, widget2]:
|
||||
assert w.config.gui_id == "test_gui_id"
|
||||
assert w.config.device_filter == ["Positioner"]
|
||||
assert w.config.default == "samx"
|
||||
|
||||
assert widget.config.gui_id == "test_gui_id"
|
||||
assert widget.config.device_filter == ["Positioner"]
|
||||
assert widget.config.default == "samx"
|
||||
|
||||
|
||||
def test_device_input_base_set_device_filter(device_input_base):
|
||||
"""Test device filter setter."""
|
||||
device_input_base.set_device_filter(BECDeviceFilter.POSITIONER)
|
||||
assert device_input_base.config.device_filter == ["Positioner"]
|
||||
def test_device_combobox_set_device_filter(qtbot, mocked_client):
|
||||
widget = create_widget(qtbot=qtbot, widget=DeviceComboBox, client=mocked_client)
|
||||
|
||||
widget.set_device_filter(BECDeviceFilter.POSITIONER)
|
||||
|
||||
assert widget.config.device_filter == ["Positioner"]
|
||||
|
||||
|
||||
def test_device_input_base_set_device_filter_error(device_input_base):
|
||||
"""Test set_device_filter with Noneexisting class. This should not raise. It writes a log message entry."""
|
||||
device_input_base.set_device_filter("NonExistingClass")
|
||||
assert device_input_base.device_filter == []
|
||||
def test_device_combobox_set_device_filter_error(qtbot, mocked_client):
|
||||
widget = create_widget(qtbot=qtbot, widget=DeviceComboBox, client=mocked_client)
|
||||
|
||||
widget.set_device_filter("NonExistingClass")
|
||||
|
||||
assert widget.device_filter == []
|
||||
|
||||
|
||||
def test_device_input_base_set_default_device(device_input_base):
|
||||
"""Test setting the default device. Also tests the update_devices method."""
|
||||
device_input_base.set_device("samx")
|
||||
assert device_input_base.config.default == None
|
||||
device_input_base.set_device_filter(BECDeviceFilter.POSITIONER)
|
||||
device_input_base.set_readout_priority_filter(ReadoutPriority.MONITORED)
|
||||
device_input_base.set_device("samx")
|
||||
assert device_input_base.config.default == "samx"
|
||||
def test_device_combobox_set_default_device(qtbot, mocked_client):
|
||||
widget = create_widget(qtbot=qtbot, widget=DeviceComboBox, client=mocked_client)
|
||||
|
||||
widget.set_device("samx")
|
||||
|
||||
assert widget.config.default == "samx"
|
||||
|
||||
|
||||
def test_device_input_base_get_filters(device_input_base):
|
||||
"""Test getting the available filters."""
|
||||
filters = device_input_base.get_available_filters()
|
||||
selection = [
|
||||
BECDeviceFilter.POSITIONER,
|
||||
BECDeviceFilter.DEVICE,
|
||||
BECDeviceFilter.COMPUTED_SIGNAL,
|
||||
BECDeviceFilter.SIGNAL,
|
||||
] + [
|
||||
ReadoutPriority.MONITORED,
|
||||
ReadoutPriority.BASELINE,
|
||||
ReadoutPriority.ASYNC,
|
||||
ReadoutPriority.ON_REQUEST,
|
||||
]
|
||||
assert [entry for entry in filters if entry in selection]
|
||||
def test_device_combobox_get_filters(qtbot, mocked_client):
|
||||
widget = create_widget(qtbot=qtbot, widget=DeviceComboBox, client=mocked_client)
|
||||
|
||||
assert BECDeviceFilter.POSITIONER in widget.get_available_filters()
|
||||
assert ReadoutPriority.MONITORED in widget.get_readout_priority_filters()
|
||||
|
||||
|
||||
def test_device_input_base_properties(device_input_base):
|
||||
"""Test setting the properties of the device input base."""
|
||||
assert device_input_base.device_filter == []
|
||||
device_input_base.filter_to_device = True
|
||||
assert device_input_base.device_filter == [BECDeviceFilter.DEVICE]
|
||||
device_input_base.filter_to_positioner = True
|
||||
assert device_input_base.device_filter == [BECDeviceFilter.DEVICE, BECDeviceFilter.POSITIONER]
|
||||
device_input_base.filter_to_computed_signal = True
|
||||
assert device_input_base.device_filter == [
|
||||
BECDeviceFilter.DEVICE,
|
||||
BECDeviceFilter.POSITIONER,
|
||||
BECDeviceFilter.COMPUTED_SIGNAL,
|
||||
]
|
||||
device_input_base.filter_to_signal = True
|
||||
assert device_input_base.device_filter == [
|
||||
def test_device_combobox_properties(qtbot, mocked_client):
|
||||
widget = create_widget(qtbot=qtbot, widget=DeviceComboBox, client=mocked_client)
|
||||
|
||||
widget.filter_to_device = True
|
||||
widget.filter_to_positioner = True
|
||||
widget.filter_to_computed_signal = True
|
||||
widget.filter_to_signal = True
|
||||
assert widget.device_filter == [
|
||||
BECDeviceFilter.DEVICE,
|
||||
BECDeviceFilter.POSITIONER,
|
||||
BECDeviceFilter.COMPUTED_SIGNAL,
|
||||
BECDeviceFilter.SIGNAL,
|
||||
]
|
||||
assert device_input_base.readout_filter == []
|
||||
device_input_base.readout_async = True
|
||||
assert device_input_base.readout_filter == [ReadoutPriority.ASYNC]
|
||||
device_input_base.readout_baseline = True
|
||||
assert device_input_base.readout_filter == [ReadoutPriority.ASYNC, ReadoutPriority.BASELINE]
|
||||
device_input_base.readout_monitored = True
|
||||
assert device_input_base.readout_filter == [
|
||||
ReadoutPriority.ASYNC,
|
||||
ReadoutPriority.BASELINE,
|
||||
ReadoutPriority.MONITORED,
|
||||
]
|
||||
device_input_base.readout_on_request = True
|
||||
assert device_input_base.readout_filter == [
|
||||
ReadoutPriority.ASYNC,
|
||||
ReadoutPriority.BASELINE,
|
||||
ReadoutPriority.MONITORED,
|
||||
ReadoutPriority.ON_REQUEST,
|
||||
]
|
||||
|
||||
widget.readout_async = True
|
||||
widget.readout_baseline = True
|
||||
widget.readout_monitored = True
|
||||
widget.readout_on_request = True
|
||||
assert ReadoutPriority.ASYNC in widget.readout_filter
|
||||
assert ReadoutPriority.BASELINE in widget.readout_filter
|
||||
assert ReadoutPriority.MONITORED in widget.readout_filter
|
||||
assert ReadoutPriority.ON_REQUEST in widget.readout_filter
|
||||
|
||||
|
||||
def test_device_combobox_signal_class_filter(qtbot, mocked_client):
|
||||
"""Test device filtering via signal_class_filter on combobox."""
|
||||
mocked_client.device_manager.get_bec_signals = mock.MagicMock(
|
||||
return_value=[
|
||||
("samx", "async_signal", {"signal_class": "AsyncSignal"}),
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import pytest
|
||||
from bec_lib.device import ReadoutPriority
|
||||
|
||||
from bec_widgets.widgets.control.device_input.base_classes.device_input_base import BECDeviceFilter
|
||||
from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import DeviceComboBox
|
||||
from bec_widgets.widgets.control.device_input.device_line_edit.device_line_edit import (
|
||||
DeviceLineEdit,
|
||||
from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import (
|
||||
BECDeviceFilter,
|
||||
DeviceComboBox,
|
||||
)
|
||||
|
||||
from .client_mocks import mocked_client
|
||||
@@ -37,6 +36,16 @@ def test_device_input_combobox_init(device_input_combobox):
|
||||
assert device_input_combobox.client is not None
|
||||
assert isinstance(device_input_combobox, DeviceComboBox)
|
||||
assert device_input_combobox.config.widget_class == "DeviceComboBox"
|
||||
assert device_input_combobox.isEditable() is True
|
||||
assert device_input_combobox.config.device_filter == []
|
||||
assert device_input_combobox.config.readout_filter == [
|
||||
ReadoutPriority.MONITORED.value,
|
||||
ReadoutPriority.BASELINE.value,
|
||||
ReadoutPriority.ASYNC.value,
|
||||
ReadoutPriority.CONTINUOUS.value,
|
||||
ReadoutPriority.ON_REQUEST.value,
|
||||
]
|
||||
assert device_input_combobox.config.default is None
|
||||
assert device_input_combobox.devices == [
|
||||
"samx",
|
||||
"samy",
|
||||
@@ -71,75 +80,3 @@ def test_get_device_from_input_combobox_init(device_input_combobox):
|
||||
current_device = device_input_combobox.get_current_device()
|
||||
|
||||
assert current_device.name == device_text
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def device_input_line_edit(qtbot, mocked_client):
|
||||
widget = DeviceLineEdit(client=mocked_client)
|
||||
qtbot.addWidget(widget)
|
||||
qtbot.waitExposed(widget)
|
||||
yield widget
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def device_input_line_edit_with_kwargs(qtbot, mocked_client):
|
||||
widget = DeviceLineEdit(
|
||||
client=mocked_client,
|
||||
gui_id="test_gui_id",
|
||||
device_filter=[BECDeviceFilter.POSITIONER],
|
||||
default="samx",
|
||||
arg_name="test_arg_name",
|
||||
)
|
||||
qtbot.addWidget(widget)
|
||||
qtbot.waitExposed(widget)
|
||||
yield widget
|
||||
|
||||
|
||||
def test_device_input_line_edit_init(device_input_line_edit):
|
||||
assert device_input_line_edit is not None
|
||||
assert device_input_line_edit.client is not None
|
||||
assert isinstance(device_input_line_edit, DeviceLineEdit)
|
||||
assert device_input_line_edit.config.widget_class == "DeviceLineEdit"
|
||||
assert device_input_line_edit.config.device_filter == []
|
||||
assert device_input_line_edit.config.readout_filter == [
|
||||
ReadoutPriority.MONITORED,
|
||||
ReadoutPriority.BASELINE,
|
||||
ReadoutPriority.ASYNC,
|
||||
ReadoutPriority.CONTINUOUS,
|
||||
ReadoutPriority.ON_REQUEST,
|
||||
]
|
||||
assert device_input_line_edit.config.default is None
|
||||
assert device_input_line_edit.devices == [
|
||||
"samx",
|
||||
"samy",
|
||||
"samz",
|
||||
"aptrx",
|
||||
"aptry",
|
||||
"gauss_bpm",
|
||||
"gauss_adc1",
|
||||
"gauss_adc2",
|
||||
"gauss_adc3",
|
||||
"bpm4i",
|
||||
"bpm3a",
|
||||
"bpm3i",
|
||||
"eiger",
|
||||
"waveform1d",
|
||||
"async_device",
|
||||
"test",
|
||||
"test_device",
|
||||
]
|
||||
|
||||
|
||||
def test_device_input_line_edit_init_with_kwargs(device_input_line_edit_with_kwargs):
|
||||
assert device_input_line_edit_with_kwargs.config.gui_id == "test_gui_id"
|
||||
assert device_input_line_edit_with_kwargs.config.device_filter == ["Positioner"]
|
||||
assert device_input_line_edit_with_kwargs.config.default == "samx"
|
||||
assert device_input_line_edit_with_kwargs.config.arg_name == "test_arg_name"
|
||||
|
||||
|
||||
def test_get_device_from_input_line_edit_init(device_input_line_edit):
|
||||
device_input_line_edit.setText("samx")
|
||||
device_text = device_input_line_edit.text()
|
||||
current_device = device_input_line_edit.get_current_device()
|
||||
|
||||
assert current_device.name == device_text
|
||||
|
||||
@@ -2,54 +2,28 @@ from unittest import mock
|
||||
|
||||
import pytest
|
||||
from bec_lib.device import Signal
|
||||
from qtpy.QtWidgets import QWidget
|
||||
|
||||
from bec_widgets.utils.ophyd_kind_util import Kind
|
||||
from bec_widgets.widgets.control.device_input.base_classes.device_input_base import BECDeviceFilter
|
||||
from bec_widgets.widgets.control.device_input.base_classes.device_signal_input_base import (
|
||||
DeviceSignalInputBase,
|
||||
from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import (
|
||||
BECDeviceFilter,
|
||||
DeviceComboBox,
|
||||
)
|
||||
from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import DeviceComboBox
|
||||
from bec_widgets.widgets.control.device_input.signal_combobox.signal_combobox import SignalComboBox
|
||||
from bec_widgets.widgets.control.device_input.signal_line_edit.signal_line_edit import (
|
||||
SignalLineEdit,
|
||||
)
|
||||
|
||||
from .client_mocks import mocked_client
|
||||
from .conftest import create_widget
|
||||
|
||||
|
||||
class FakeSignal(Signal):
|
||||
"""Fake signal to test the DeviceSignalInputBase."""
|
||||
|
||||
|
||||
class DeviceInputWidget(DeviceSignalInputBase, QWidget):
|
||||
"""Thin wrapper around DeviceInputBase to make it a QWidget"""
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def device_signal_base(qtbot, mocked_client):
|
||||
"""Fixture with mocked FilterIO and WidgetIO"""
|
||||
with mock.patch("bec_widgets.utils.filter_io.FilterIO.set_selection"):
|
||||
with mock.patch("bec_widgets.utils.widget_io.WidgetIO.set_value"):
|
||||
widget = create_widget(qtbot=qtbot, widget=DeviceInputWidget, client=mocked_client)
|
||||
yield widget
|
||||
"""Fake signal used by SignalComboBox tests."""
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def device_signal_combobox(qtbot, mocked_client):
|
||||
"""Fixture with mocked FilterIO and WidgetIO"""
|
||||
widget = create_widget(qtbot=qtbot, widget=SignalComboBox, client=mocked_client)
|
||||
yield widget
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def device_signal_line_edit(qtbot, mocked_client):
|
||||
"""Fixture with mocked FilterIO and WidgetIO"""
|
||||
widget = create_widget(qtbot=qtbot, widget=SignalLineEdit, client=mocked_client)
|
||||
yield widget
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def test_device_signal_combo(qtbot, mocked_client):
|
||||
"""Fixture to create a SignalComboBox widget and a DeviceInputWidget widget"""
|
||||
@@ -63,34 +37,28 @@ def test_device_signal_combo(qtbot, mocked_client):
|
||||
yield input, signal
|
||||
|
||||
|
||||
def test_device_signal_base_init(device_signal_base):
|
||||
"""Test if the DeviceSignalInputBase is initialized correctly"""
|
||||
assert device_signal_base._device is None
|
||||
assert device_signal_base._signal_filter == set()
|
||||
assert device_signal_base._signals == []
|
||||
assert device_signal_base._hinted_signals == []
|
||||
assert device_signal_base._normal_signals == []
|
||||
assert device_signal_base._config_signals == []
|
||||
def test_signal_combobox_init(device_signal_combobox):
|
||||
assert device_signal_combobox._device is None
|
||||
assert device_signal_combobox._signal_filter == {Kind.config, Kind.normal, Kind.hinted}
|
||||
assert device_signal_combobox._signals == []
|
||||
assert device_signal_combobox._hinted_signals == []
|
||||
assert device_signal_combobox._normal_signals == []
|
||||
assert device_signal_combobox._config_signals == []
|
||||
|
||||
|
||||
def test_device_signal_qproperties(device_signal_base):
|
||||
"""Test if the DeviceSignalInputBase has the correct QProperties"""
|
||||
assert device_signal_base._signal_filter == set()
|
||||
device_signal_base.include_config_signals = False
|
||||
device_signal_base.include_normal_signals = False
|
||||
assert device_signal_base._signal_filter == set()
|
||||
device_signal_base.include_config_signals = True
|
||||
assert device_signal_base._signal_filter == {Kind.config}
|
||||
device_signal_base.include_normal_signals = True
|
||||
assert device_signal_base._signal_filter == {Kind.config, Kind.normal}
|
||||
device_signal_base.include_hinted_signals = True
|
||||
assert device_signal_base._signal_filter == {Kind.config, Kind.normal, Kind.hinted}
|
||||
device_signal_base.include_hinted_signals = True
|
||||
assert device_signal_base._signal_filter == {Kind.config, Kind.normal, Kind.hinted}
|
||||
device_signal_base.include_hinted_signals = True
|
||||
assert device_signal_base._signal_filter == {Kind.config, Kind.normal, Kind.hinted}
|
||||
device_signal_base.include_hinted_signals = False
|
||||
assert device_signal_base._signal_filter == {Kind.config, Kind.normal}
|
||||
def test_signal_combobox_qproperties(device_signal_combobox):
|
||||
device_signal_combobox.include_config_signals = False
|
||||
device_signal_combobox.include_normal_signals = False
|
||||
device_signal_combobox.include_hinted_signals = False
|
||||
assert device_signal_combobox._signal_filter == set()
|
||||
device_signal_combobox.include_config_signals = True
|
||||
assert device_signal_combobox._signal_filter == {Kind.config}
|
||||
device_signal_combobox.include_normal_signals = True
|
||||
assert device_signal_combobox._signal_filter == {Kind.config, Kind.normal}
|
||||
device_signal_combobox.include_hinted_signals = True
|
||||
assert device_signal_combobox._signal_filter == {Kind.config, Kind.normal, Kind.hinted}
|
||||
device_signal_combobox.include_hinted_signals = False
|
||||
assert device_signal_combobox._signal_filter == {Kind.config, Kind.normal}
|
||||
|
||||
|
||||
def test_signal_combobox(qtbot, device_signal_combobox):
|
||||
@@ -128,26 +96,9 @@ def test_signal_combobox(qtbot, device_signal_combobox):
|
||||
assert device_signal_combobox._hinted_signals == [("fake_signal", {})]
|
||||
|
||||
|
||||
def test_signal_lineedit(device_signal_line_edit):
|
||||
"""Test the signal_combobox"""
|
||||
|
||||
assert device_signal_line_edit._signals == []
|
||||
device_signal_line_edit.include_normal_signals = True
|
||||
device_signal_line_edit.include_hinted_signals = True
|
||||
device_signal_line_edit.include_config_signals = True
|
||||
assert device_signal_line_edit.signals == []
|
||||
device_signal_line_edit.set_device("samx")
|
||||
assert device_signal_line_edit.signals == ["readback", "setpoint", "velocity"]
|
||||
device_signal_line_edit.set_signal("readback")
|
||||
assert device_signal_line_edit.text() == "readback"
|
||||
assert device_signal_line_edit._is_valid_input is True
|
||||
device_signal_line_edit.setText("invalid")
|
||||
assert device_signal_line_edit._is_valid_input is False
|
||||
|
||||
|
||||
def test_device_signal_input_base_cleanup(qtbot, mocked_client):
|
||||
with mock.patch.object(mocked_client.callbacks, "remove"):
|
||||
widget = DeviceInputWidget(client=mocked_client)
|
||||
widget = SignalComboBox(client=mocked_client)
|
||||
widget.close()
|
||||
widget.deleteLater()
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import pytest
|
||||
from qtpy.QtWidgets import QComboBox
|
||||
|
||||
from bec_widgets.utils.filter_io import FilterIO
|
||||
from bec_widgets.widgets.control.device_input.device_line_edit.device_line_edit import (
|
||||
DeviceLineEdit,
|
||||
from bec_widgets.utils.filter_io import (
|
||||
combobox_contains_text,
|
||||
get_bec_signals_for_classes,
|
||||
replace_combobox_items,
|
||||
)
|
||||
from bec_widgets.widgets.dap.dap_combo_box.dap_combo_box import DapComboBox
|
||||
|
||||
@@ -10,65 +11,38 @@ from .client_mocks import mocked_client
|
||||
from .conftest import create_widget
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def dap_mock(qtbot, mocked_client):
|
||||
"""Fixture for QLineEdit widget"""
|
||||
models = ["GaussianModel", "LorentzModel", "SineModel"]
|
||||
mocked_client.dap._available_dap_plugins.keys.return_value = models
|
||||
def test_replace_combobox_items(qtbot, mocked_client):
|
||||
widget = create_widget(qtbot, DapComboBox, client=mocked_client)
|
||||
return widget
|
||||
|
||||
replace_combobox_items(widget, ["testA", ("testB", {"payload": True})])
|
||||
|
||||
assert widget.count() == 2
|
||||
assert widget.itemText(0) == "testA"
|
||||
assert widget.itemText(1) == "testB"
|
||||
assert widget.itemData(1) == {"payload": True}
|
||||
assert combobox_contains_text(widget, "testA") is True
|
||||
assert combobox_contains_text(widget, "missing") is False
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def line_edit_mock(qtbot, mocked_client):
|
||||
"""Fixture for QLineEdit widget"""
|
||||
widget = create_widget(qtbot, DeviceLineEdit, client=mocked_client)
|
||||
return widget
|
||||
|
||||
|
||||
def test_set_selection_combo_box(dap_mock):
|
||||
"""Test set selection for QComboBox using DapComboBox"""
|
||||
assert dap_mock.fit_model_combobox.count() == 3
|
||||
FilterIO.set_selection(dap_mock.fit_model_combobox, selection=["testA", "testB"])
|
||||
assert dap_mock.fit_model_combobox.count() == 2
|
||||
assert FilterIO.check_input(widget=dap_mock.fit_model_combobox, text="testA") is True
|
||||
|
||||
|
||||
def test_set_selection_line_edit(line_edit_mock):
|
||||
"""Test set selection for QComboBox using DapComboBox"""
|
||||
FilterIO.set_selection(line_edit_mock, selection=["testA", "testB"])
|
||||
assert line_edit_mock.completer.model().rowCount() == 2
|
||||
model = line_edit_mock.completer.model()
|
||||
model_data = [model.data(model.index(i)) for i in range(model.rowCount())]
|
||||
assert model_data == ["testA", "testB"]
|
||||
assert FilterIO.check_input(widget=line_edit_mock, text="testA") is True
|
||||
FilterIO.set_selection(line_edit_mock, selection=["testC"])
|
||||
assert FilterIO.check_input(widget=line_edit_mock, text="testA") is False
|
||||
assert FilterIO.check_input(widget=line_edit_mock, text="testC") is True
|
||||
|
||||
|
||||
def test_update_with_signal_class_combo_box_ndim_filter(dap_mock, mocked_client):
|
||||
def test_get_bec_signals_for_classes_ndim_filter(mocked_client):
|
||||
signals = [
|
||||
("dev1", "sig1", {"describe": {"signal_info": {"ndim": 1}}}),
|
||||
("dev1", "sig2", {"describe": {"signal_info": {"ndim": 2}}}),
|
||||
]
|
||||
mocked_client.device_manager.get_bec_signals = lambda _filters: signals
|
||||
out = FilterIO.update_with_signal_class(
|
||||
widget=dap_mock.fit_model_combobox,
|
||||
signal_class_filter=["AsyncSignal"],
|
||||
client=mocked_client,
|
||||
ndim_filter=1,
|
||||
|
||||
out = get_bec_signals_for_classes(
|
||||
client=mocked_client, signal_class_filter=["AsyncSignal"], ndim_filter=1
|
||||
)
|
||||
|
||||
assert out == [("dev1", "sig1", {"describe": {"signal_info": {"ndim": 1}}})]
|
||||
|
||||
|
||||
def test_update_with_signal_class_line_edit_passthrough(line_edit_mock, mocked_client):
|
||||
signals = [("dev1", "sig1", {"describe": {"signal_info": {"ndim": 1}}})]
|
||||
mocked_client.device_manager.get_bec_signals = lambda _filters: signals
|
||||
out = FilterIO.update_with_signal_class(
|
||||
widget=line_edit_mock,
|
||||
signal_class_filter=["AsyncSignal"],
|
||||
client=mocked_client,
|
||||
ndim_filter=1,
|
||||
)
|
||||
assert out == signals
|
||||
def test_replace_combobox_items_empty(qtbot):
|
||||
widget = QComboBox()
|
||||
qtbot.addWidget(widget)
|
||||
widget.addItem("old")
|
||||
|
||||
replace_combobox_items(widget, [])
|
||||
|
||||
assert widget.count() == 0
|
||||
|
||||
@@ -12,9 +12,7 @@ from bec_widgets.widgets.control.device_control.positioner_box import (
|
||||
PositionerBox,
|
||||
PositionerControlLine,
|
||||
)
|
||||
from bec_widgets.widgets.control.device_input.device_line_edit.device_line_edit import (
|
||||
DeviceLineEdit,
|
||||
)
|
||||
from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import DeviceComboBox
|
||||
|
||||
from .client_mocks import mocked_client
|
||||
from .conftest import create_widget
|
||||
@@ -164,8 +162,8 @@ def test_positioner_box_open_dialog_selection(qtbot, positioner_box):
|
||||
# pylint: disable=protected-access
|
||||
assert positioner_box._dialog is not None
|
||||
qtbot.waitUntil(lambda: positioner_box._dialog.isVisible() is True, timeout=1000)
|
||||
line_edit = positioner_box._dialog.findChild(DeviceLineEdit)
|
||||
line_edit.setText("samy")
|
||||
line_edit = positioner_box._dialog.findChild(DeviceComboBox)
|
||||
line_edit.setCurrentText("samy")
|
||||
close_button = positioner_box._dialog.findChild(QPushButton)
|
||||
assert close_button.text() == "Close"
|
||||
qtbot.mouseClick(close_button, Qt.LeftButton)
|
||||
|
||||
@@ -6,8 +6,8 @@ import pytest
|
||||
from qtpy import QtCore
|
||||
from qtpy.QtWidgets import QDialogButtonBox, QLabel
|
||||
|
||||
from bec_widgets.widgets.control.device_input.base_classes.device_signal_input_base import (
|
||||
DeviceSignalInputBaseConfig,
|
||||
from bec_widgets.widgets.control.device_input.signal_combobox.signal_combobox import (
|
||||
SignalComboBoxConfig,
|
||||
)
|
||||
from bec_widgets.widgets.utility.signal_label.signal_label import ChoiceDialog, SignalLabel
|
||||
|
||||
@@ -61,7 +61,7 @@ SAMX_INFO_DICT = {
|
||||
@pytest.fixture
|
||||
def signal_label(qtbot, mocked_client: MagicMock):
|
||||
with patch.object(mocked_client.device_manager.devices.samx, "_info", SAMX_INFO_DICT):
|
||||
config = DeviceSignalInputBaseConfig(device="samx", default="samx")
|
||||
config = SignalComboBoxConfig(device="samx", default="samx")
|
||||
widget = SignalLabel(
|
||||
config=config, custom_label="Test Label", custom_units="m/s", client=mocked_client
|
||||
)
|
||||
@@ -149,7 +149,8 @@ def test_choose_signal_dialog_sends_choices(signal_label: SignalLabel, qtbot):
|
||||
dialog = signal_label.show_choice_dialog()
|
||||
qtbot.waitUntil(dialog.button_box.button(QDialogButtonBox.Ok).isVisible, timeout=500)
|
||||
dialog._device_field.dev["test device"] = MagicMock()
|
||||
dialog._device_field.setText("test device")
|
||||
dialog._device_field.devices = ["test device"]
|
||||
dialog._device_field.setCurrentText("test device")
|
||||
dialog._signal_field._signals = [("test signal", {"component_name": "test signal"})]
|
||||
dialog._signal_field.addItem("test signal")
|
||||
dialog._signal_field.setCurrentIndex(0)
|
||||
@@ -162,7 +163,8 @@ def test_dialog_handler_updates_devices(signal_label: SignalLabel, qtbot):
|
||||
dialog = signal_label.show_choice_dialog()
|
||||
qtbot.waitUntil(dialog.button_box.button(QDialogButtonBox.Ok).isVisible, timeout=500)
|
||||
dialog._device_field.dev["flux_capacitor"] = MagicMock()
|
||||
dialog._device_field.setText("flux_capacitor")
|
||||
dialog._device_field.devices = ["flux_capacitor"]
|
||||
dialog._device_field.setCurrentText("flux_capacitor")
|
||||
dialog._signal_field._signals = [("spin_speed", {"component_name": "spin_speed"})]
|
||||
dialog._signal_field.addItem("spin_speed")
|
||||
dialog._signal_field.setCurrentIndex(0)
|
||||
@@ -176,7 +178,7 @@ def test_choose_signal_dialog_invalid_device(signal_label: SignalLabel, qtbot):
|
||||
signal_label._process_dialog = MagicMock()
|
||||
dialog = signal_label.show_choice_dialog()
|
||||
qtbot.waitUntil(dialog.button_box.button(QDialogButtonBox.Ok).isVisible, timeout=500)
|
||||
dialog._device_field.setText("invalid device")
|
||||
dialog._device_field.setCurrentText("invalid device")
|
||||
dialog._signal_field.addItem("test signal")
|
||||
dialog._signal_field.setCurrentIndex(0)
|
||||
qtbot.mouseClick(dialog.button_box.button(QDialogButtonBox.Ok), QtCore.Qt.LeftButton)
|
||||
@@ -206,7 +208,8 @@ def test_dialog_has_signals(signal_label: SignalLabel, qtbot):
|
||||
"signals": {"signal 1": {"kind_str": "hinted"}, "signal 2": {"kind_str": "normal"}}
|
||||
}
|
||||
|
||||
dialog._device_field.setText("test device")
|
||||
dialog._device_field.devices = ["test device"]
|
||||
dialog._device_field.setCurrentText("test device")
|
||||
assert dialog._signal_field.count() == 2 # the actual signal and the category label
|
||||
assert dialog._signal_field.currentText() == "signal 1"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user