From 540742696aa27bd59e54714e0fdb014a0d2458c5 Mon Sep 17 00:00:00 2001 From: appel_c Date: Mon, 12 May 2025 19:15:06 +0200 Subject: [PATCH] tests(dxp): add tests for dxp integration --- tests/test_dxp/__init__.py | 0 tests/test_dxp/test_dxp.py | 129 +++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 tests/test_dxp/__init__.py create mode 100644 tests/test_dxp/test_dxp.py diff --git a/tests/test_dxp/__init__.py b/tests/test_dxp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_dxp/test_dxp.py b/tests/test_dxp/test_dxp.py new file mode 100644 index 0000000..52f0cd5 --- /dev/null +++ b/tests/test_dxp/test_dxp.py @@ -0,0 +1,129 @@ +""" +Test module for DXP integration, i.e. Falcon, XMAP and Mercury detectors. +This also includes EpicsMCARecord for data recording of multichannel analyzers. +""" + +import threading +from unittest import mock + +import ophyd +import pytest +from ophyd import Component as Cpt + +from ophyd_devices.devices.dxp import ( + ADBase, + EpicsDXPFalcon, + EpicsDxpFalconMapping, + EpicsDXPFalconMultiElementSystem, + EpicsDXPMultiElementSystem, + EpicsMCARecord, + Falcon, + Mercury, + xMAP, +) +from ophyd_devices.tests.utils import MockPV, patch_dual_pvs + +# from ophyd.mca import EpicsDXPMapping + + +# pylint:disable=redefined-outer-name +# pylint: disable=protected-access + + +class TestFalcon(Falcon): + """Test class for Falcon device integration together with mca record and dxp faclon.""" + + mca1 = Cpt(EpicsMCARecord, "mca1") + dxp1 = Cpt(EpicsDXPFalcon, "dxp1") + + +@pytest.fixture(scope="function") +def mock_falcon(): + """Fixture to create a mock Falcon device for testing.""" + name = "mca" + prefix = "test_falcon" + with mock.patch.object(ophyd, "cl") as mock_cl: + mock_cl.get_pv = MockPV + mock_cl.thread_class = threading.Thread + ddg = TestFalcon(name=name, prefix=prefix) + patch_dual_pvs(ddg) + yield ddg + + +@pytest.fixture(scope="function") +def mock_xmap(): + """Fixture to create a mock xMAP device for testing.""" + name = "mca" + prefix = "test_xmap" + with mock.patch.object(ophyd, "cl") as mock_cl: + mock_cl.get_pv = MockPV + mock_cl.thread_class = threading.Thread + ddg = xMAP(name=name, prefix=prefix) + patch_dual_pvs(ddg) + yield ddg + + +@pytest.fixture(scope="function") +def mock_mercury(): + """Fixture to create a mock Mercury device for testing.""" + name = "mca" + prefix = "test_mercury" + with mock.patch.object(ophyd, "cl") as mock_cl: + mock_cl.get_pv = MockPV + mock_cl.thread_class = threading.Thread + ddg = Mercury(name=name, prefix=prefix) + patch_dual_pvs(ddg) + yield ddg + + +def test_falcon(mock_falcon): + """Test the Falcon device.""" + # Test the default values + mock_falcon: TestFalcon + assert mock_falcon.name == "mca" + assert mock_falcon.prefix == "test_falcon" + assert isinstance(mock_falcon, EpicsDXPFalconMultiElementSystem) + assert isinstance(mock_falcon, EpicsDxpFalconMapping) + assert isinstance(mock_falcon, ADBase) + + assert mock_falcon.read_attrs == ["port_name"] + assert mock_falcon.configuration_attrs == [] + + assert mock_falcon.hints == {"fields": []} + + assert mock_falcon.mca1.rois.roi0.read_attrs == ["count", "net_count"] + assert mock_falcon.mca1.rois.roi0.configuration_attrs == [ + "label", + "preset_count", + "is_preset", + "bkgnd_chans", + "hi_chan", + "lo_chan", + ] + + +def test_xmap(mock_xmap): + """Test the xMAP device.""" + # Test the default values + mock_xmap: xMAP + assert mock_xmap.name == "mca" + assert mock_xmap.prefix == "test_xmap" + assert isinstance(mock_xmap, EpicsDXPMultiElementSystem) + assert isinstance(mock_xmap, ADBase) + + assert mock_xmap.read_attrs == ["port_name"] + assert mock_xmap.configuration_attrs == [] + + +def test_mercury(mock_mercury): + """Test the Mercury device.""" + # Test the default values + mock_mercury: Mercury + assert mock_mercury.name == "mca" + assert mock_mercury.prefix == "test_mercury" + assert isinstance(mock_mercury, EpicsDXPMultiElementSystem) + # assert isinstance(mock_mercury, EpicsDXPMapping) # Not sure why this fails + assert isinstance(mock_mercury, ADBase) + + assert mock_mercury.read_attrs == ["port_name"] + assert mock_mercury.configuration_attrs == []