Files
AareDAQ/tests/unit/devices/test_enum_pv.py
T
appleb_m 6f44da0078
Build and Publish / test (push) Failing after 1m4s
Build and Publish / build (push) Has been skipped
Build and Publish / Build and Deploy Docs (push) Has been skipped
tests: added tests for aerotech, models, autofocus, automation, beamline, diffraction_geometry, enum_pv, face_detection_find_xtal, jfjoch_client, mlbox, my_motor, spreadsheet_updater and worfkflows
2026-04-28 14:35:54 +02:00

87 lines
2.3 KiB
Python

import pytest
from unittest.mock import MagicMock, patch
from enum import Enum
from aare.devices.enum_pv import EnumPV
from aare.devices.set_get_pv import MoveResult
class MockPV:
def __init__(self, name):
self.pvname = name
self.enum_strs = None
self.value = None
def get(self, as_string=False):
if as_string:
return str(self.value)
return self.value
def put(self, value):
self.value = value
@pytest.fixture
def mock_pvs():
with patch('aare.devices.set_get_pv.PV') as mock_pv:
set_pv = MockPV("SET")
get_pv = MockPV("GET")
mock_pv.side_effect = lambda name: set_pv if name == "SET" else get_pv
yield set_pv, get_pv
def test_enum_pv_init_fail(mock_pvs):
set_pv, get_pv = mock_pvs
set_pv.enum_strs = None
with pytest.raises(RuntimeError):
EnumPV("test", "SET", "GET")
def test_enum_pv_init_success(mock_pvs):
set_pv, get_pv = mock_pvs
set_pv.enum_strs = ("State1", "State2")
epv = EnumPV("test", "SET", "GET")
assert epv.name == "test"
def test_enum_pv_position(mock_pvs):
set_pv, get_pv = mock_pvs
set_pv.enum_strs = ("State1", "State2")
get_pv.value = "State1"
epv = EnumPV("test", "SET", "GET")
assert epv.position == "State1"
def test_enum_pv_resolve_enum(mock_pvs):
set_pv, get_pv = mock_pvs
set_pv.enum_strs = ("State1", "State2")
epv = EnumPV("test", "SET", "GET")
class MyEnum(Enum):
State1 = 1
res = epv._resolve(MyEnum.State1)
assert res.target == "State1"
def test_enum_pv_resolve_int(mock_pvs):
set_pv, get_pv = mock_pvs
set_pv.enum_strs = ("State1", "State2")
epv = EnumPV("test", "SET", "GET")
res = epv._resolve(0)
assert res.target == "State1"
with pytest.raises(ValueError):
epv._resolve(5)
def test_enum_pv_resolve_str(mock_pvs):
set_pv, get_pv = mock_pvs
set_pv.enum_strs = (" State1 ", "State2")
epv = EnumPV("test", "SET", "GET")
res = epv._resolve("state1")
assert res.target == " State1 "
with pytest.raises(ValueError):
epv._resolve("Missing")
def test_enum_pv_resolve_invalid_type(mock_pvs):
set_pv, get_pv = mock_pvs
set_pv.enum_strs = ("State1", "State2")
epv = EnumPV("test", "SET", "GET")
with pytest.raises(TypeError):
epv._resolve(1.5)