mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 03:31:50 +02:00
feat(widget): add 2d positioner box widget
This commit is contained in:
@ -158,3 +158,10 @@ def test_positioner_box_open_dialog_selection(qtbot, positioner_box):
|
||||
QTimer.singleShot(100, close_dialog)
|
||||
qtbot.mouseClick(positioner_box.ui.tool_button, Qt.LeftButton)
|
||||
assert positioner_box.device == "samy"
|
||||
|
||||
|
||||
def test_device_validity_check_rejects_non_positioner():
|
||||
# isinstance checks for PositionerBox are mocked out in the mock client
|
||||
positioner_box = mock.MagicMock(spec=PositionerBox)
|
||||
positioner_box.dev = {"test": 5.123}
|
||||
assert not PositionerBox._check_device_is_valid(positioner_box, "test")
|
||||
|
82
tests/unit_tests/test_positioner_box_2d.py
Normal file
82
tests/unit_tests/test_positioner_box_2d.py
Normal file
@ -0,0 +1,82 @@
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
|
||||
from bec_widgets.widgets.control.device_control.positioner_box import PositionerBox2D
|
||||
|
||||
from .client_mocks import mocked_client
|
||||
from .conftest import create_widget
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def positioner_box_2d(qtbot, mocked_client):
|
||||
"""Fixture for PositionerBox widget"""
|
||||
with mock.patch(
|
||||
"bec_widgets.widgets.control.device_control.positioner_box._base.positioner_box_base.uuid.uuid4"
|
||||
) as mock_uuid:
|
||||
mock_uuid.return_value = "fake_uuid"
|
||||
with mock.patch(
|
||||
"bec_widgets.widgets.control.device_control.positioner_box._base.positioner_box_base.PositionerBoxBase._check_device_is_valid",
|
||||
return_value=True,
|
||||
):
|
||||
db = create_widget(
|
||||
qtbot, PositionerBox2D, device_hor="samx", device_ver="samy", client=mocked_client
|
||||
)
|
||||
yield db
|
||||
|
||||
|
||||
def test_positioner_box_2d(positioner_box_2d):
|
||||
"""Test init of 2D positioner box"""
|
||||
assert positioner_box_2d.device_hor == "samx"
|
||||
assert positioner_box_2d.device_ver == "samy"
|
||||
data_hor = positioner_box_2d.dev["samx"].read()
|
||||
data_ver = positioner_box_2d.dev["samy"].read()
|
||||
# Avoid check for Positioner class from BEC in _init_device
|
||||
|
||||
setpoint_hor_text = positioner_box_2d.ui.setpoint_hor.text()
|
||||
setpoint_ver_text = positioner_box_2d.ui.setpoint_ver.text()
|
||||
# check that the setpoint is taken correctly after init
|
||||
assert float(setpoint_hor_text) == data_hor["samx_setpoint"]["value"]
|
||||
assert float(setpoint_ver_text) == data_ver["samy_setpoint"]["value"]
|
||||
|
||||
# check that the precision is taken correctly after init
|
||||
precision_hor = positioner_box_2d.dev["samx"].precision
|
||||
precision_ver = positioner_box_2d.dev["samy"].precision
|
||||
assert setpoint_hor_text == f"{data_hor['samx_setpoint']['value']:.{precision_hor}f}"
|
||||
assert setpoint_ver_text == f"{data_ver['samy_setpoint']['value']:.{precision_ver}f}"
|
||||
|
||||
# check that the step size is set according to the device precision
|
||||
assert positioner_box_2d.ui.step_size_hor.value() == 10**-precision_hor * 10
|
||||
assert positioner_box_2d.ui.step_size_ver.value() == 10**-precision_ver * 10
|
||||
|
||||
|
||||
def test_positioner_box_move_hor_does_not_affect_ver(positioner_box_2d):
|
||||
"""Test that moving one positioner doesn't affect the other"""
|
||||
with (
|
||||
mock.patch.object(positioner_box_2d.dev["samx"], "move") as mock_move_hor,
|
||||
mock.patch.object(positioner_box_2d.dev["samy"], "move") as mock_move_ver,
|
||||
):
|
||||
positioner_box_2d.ui.step_size_hor.setValue(0.1)
|
||||
positioner_box_2d.on_tweak_inc_hor()
|
||||
mock_move_hor.assert_called_once_with(0.01, relative=True)
|
||||
mock_move_ver.assert_not_called()
|
||||
with (
|
||||
mock.patch.object(positioner_box_2d.dev["samx"], "move") as mock_move_hor,
|
||||
mock.patch.object(positioner_box_2d.dev["samy"], "move") as mock_move_ver,
|
||||
):
|
||||
positioner_box_2d.ui.step_size_ver.setValue(0.1)
|
||||
positioner_box_2d.on_step_dec_ver()
|
||||
mock_move_ver.assert_called_once_with(-0.1, relative=True)
|
||||
mock_move_hor.assert_not_called()
|
||||
|
||||
|
||||
def test_positioner_box_setpoint_changes(positioner_box_2d: PositionerBox2D):
|
||||
"""Test positioner box setpoint change"""
|
||||
with mock.patch.object(positioner_box_2d.dev["samx"], "move") as mock_move:
|
||||
positioner_box_2d.ui.setpoint_hor.setText("100")
|
||||
positioner_box_2d.on_setpoint_change_hor()
|
||||
mock_move.assert_called_once_with(100, relative=False)
|
||||
with mock.patch.object(positioner_box_2d.dev["samy"], "move") as mock_move:
|
||||
positioner_box_2d.ui.setpoint_ver.setText("100")
|
||||
positioner_box_2d.on_setpoint_change_ver()
|
||||
mock_move.assert_called_once_with(100, relative=False)
|
Reference in New Issue
Block a user