76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
import threading
|
|
from unittest import mock
|
|
|
|
import ophyd
|
|
import pytest
|
|
|
|
from ophyd_devices.devices.delay_generator_645 import (
|
|
DelayGenerator,
|
|
DelayGeneratorError,
|
|
TriggerSource,
|
|
)
|
|
from ophyd_devices.tests.utils import (
|
|
MockPV,
|
|
patch_dual_pvs,
|
|
patch_functions_required_for_connection,
|
|
)
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def mock_ddg():
|
|
name = "ddg"
|
|
prefix = "X12SA-CPCL-DDG3:"
|
|
with mock.patch.object(ophyd, "cl") as mock_cl:
|
|
mock_cl.get_pv = MockPV
|
|
mock_cl.thread_class = threading.Thread
|
|
ddg = DelayGenerator(name=name, prefix=prefix)
|
|
patch_functions_required_for_connection(ddg)
|
|
patch_dual_pvs(ddg)
|
|
yield ddg
|
|
|
|
|
|
def test_ddg_init(mock_ddg):
|
|
"""This test the initialization of the DelayGenerator"""
|
|
assert mock_ddg.name == "ddg"
|
|
assert mock_ddg.prefix == "X12SA-CPCL-DDG3:"
|
|
|
|
|
|
def test_set_trigger(mock_ddg):
|
|
"""This test the set_trigger method of the DelayGenerator"""
|
|
mock_ddg.set_trigger(TriggerSource.SINGLE_SHOT)
|
|
assert mock_ddg.source.get() == 5
|
|
mock_ddg.set_trigger(TriggerSource.INTERNAL)
|
|
assert mock_ddg.source.get() == 0
|
|
|
|
|
|
def test_burst_enable(mock_ddg):
|
|
"""This test the burst_enable method of the DelayGenerator"""
|
|
count = 10
|
|
delay = 0.1
|
|
period = 0.2
|
|
|
|
mock_ddg.burst_enable(count=count, delay=delay, period=period)
|
|
assert mock_ddg.burstMode.get() == 1
|
|
assert mock_ddg.burstCount.get() == count
|
|
assert mock_ddg.burstDelay.get() == delay
|
|
assert mock_ddg.burstPeriod.get() == period
|
|
assert mock_ddg.burstConfig.get() == 0
|
|
with pytest.raises(DelayGeneratorError):
|
|
delay = -1
|
|
mock_ddg.burst_enable(count=count, delay=delay, period=period)
|
|
with pytest.raises(DelayGeneratorError):
|
|
delay = 0
|
|
period = 0
|
|
mock_ddg.burst_enable(count=count, delay=delay, period=period)
|
|
|
|
|
|
def test_check_if_ddg_okay(mock_ddg):
|
|
"""This test the is_ddg_okay method of the DelayGenerator"""
|
|
# Test for when the status is okay
|
|
mock_ddg.status._read_pv.mock_data = "STATUS OK"
|
|
assert mock_ddg.check_if_ddg_okay() is None
|
|
# Test for when the status is not okay
|
|
mock_ddg.status._read_pv.mock_data = "STATUS NOT OK"
|
|
with pytest.raises(DelayGeneratorError):
|
|
mock_ddg.check_if_ddg_okay()
|