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