|
3 | 3 | import re |
4 | 4 | import time |
5 | 5 | from asyncio import Event |
| 6 | +from functools import partial |
6 | 7 | from typing import Any |
7 | 8 | from unittest.mock import ANY, AsyncMock, MagicMock, Mock, call |
8 | 9 |
|
@@ -334,6 +335,36 @@ def _equals_x(value, x): |
334 | 335 | ) |
335 | 336 |
|
336 | 337 |
|
| 338 | +async def test_given_callable_has_no_name_then_matcher_still_gives_timeout_error(): |
| 339 | + set_signal = epics_signal_rw(int, "pva://signal") |
| 340 | + match_signal = epics_signal_rw(int, "pva://match_signal") |
| 341 | + |
| 342 | + await set_signal.connect(mock=True) |
| 343 | + await match_signal.connect(mock=True) |
| 344 | + |
| 345 | + class NoNameCallable: |
| 346 | + def __call__(self, val): |
| 347 | + return val == 20 |
| 348 | + |
| 349 | + with pytest.raises(asyncio.TimeoutError): |
| 350 | + await set_and_wait_for_other_value( |
| 351 | + set_signal, 20, match_signal, NoNameCallable(), timeout=0.01 |
| 352 | + ) |
| 353 | + |
| 354 | + |
| 355 | +async def test_partial_matcher_still_gives_timeout_error(): |
| 356 | + set_signal = epics_signal_rw(int, "pva://signal") |
| 357 | + match_signal = epics_signal_rw(int, "pva://match_signal") |
| 358 | + |
| 359 | + await set_signal.connect(mock=True) |
| 360 | + await match_signal.connect(mock=True) |
| 361 | + |
| 362 | + with pytest.raises(asyncio.TimeoutError): |
| 363 | + await set_and_wait_for_other_value( |
| 364 | + set_signal, 20, match_signal, partial(lambda x, y: x == y, 20), timeout=0.01 |
| 365 | + ) |
| 366 | + |
| 367 | + |
337 | 368 | async def test_wait_for_value_with_value(): |
338 | 369 | signal = epics_signal_rw(str, read_pv="pva://signal", name="signal") |
339 | 370 | await signal.connect(mock=True) |
|
0 commit comments