ophyd_devices/tests/test_psi_device_base.py

50 lines
1.5 KiB
Python

import pytest
from ophyd_devices.interfaces.base_classes.psi_device_base import DeviceStoppedError, PSIDeviceBase
from ophyd_devices.sim.sim_positioner import SimPositioner
class SimPositionerDevice(PSIDeviceBase, SimPositioner):
"""Simulated Positioner Device with PSI Device Base"""
@pytest.fixture
def device():
"""Fixture for Device"""
yield SimPositionerDevice(name="device")
def test_psi_device_base_wait_for_signals(device):
"""Test wait_for_signals method"""
device.motor_is_moving.set(1).wait()
def check_motor_is_moving():
return device.motor_is_moving.get() == 0
# Timeout
assert device.wait_for_condition(check_motor_is_moving, timeout=0.2) is False
# Stopped
device._stopped = True
with pytest.raises(DeviceStoppedError):
device.wait_for_condition(check_motor_is_moving, timeout=1, check_stopped=True)
# Success
device._stopped = False
device.motor_is_moving.set(0).wait()
assert device.wait_for_condition(check_motor_is_moving, timeout=1, check_stopped=True) is True
device.velocity.set(10).wait()
def check_both_conditions():
return device.motor_is_moving.get() == 0 and device.velocity.get() == 10
# All signals True, default
assert device.wait_for_condition(check_both_conditions, timeout=1) is True
def check_any_conditions():
return device.motor_is_moving.get() == 0 or device.velocity.get() == 10
# Any signal is True
assert device.wait_for_condition(check_any_conditions, timeout=1) is True