|
1 | 1 | import os |
2 | 2 | from datetime import datetime, timedelta |
3 | 3 | from pathlib import Path |
| 4 | +from time import perf_counter |
4 | 5 | from types import SimpleNamespace |
5 | 6 | from typing import TYPE_CHECKING, Type |
| 7 | +from unittest.mock import MagicMock |
6 | 8 |
|
7 | 9 | import pytest |
8 | 10 |
|
9 | 11 | from pytest_test_utils import TmpDir, matchers |
10 | 12 | from pytest_test_utils.matchers import Matcher |
11 | 13 | from pytest_test_utils.tmp_dir_factory import TempDirFactory |
| 14 | +from pytest_test_utils.waiters import TimedOutError, wait_until |
12 | 15 |
|
13 | 16 | if TYPE_CHECKING: |
14 | 17 | from pytest import TempPathFactory |
@@ -266,3 +269,24 @@ def test_matcher_alias( # pylint: disable=invalid-name |
266 | 269 | M: Type[Matcher], matcher: Type[Matcher] |
267 | 270 | ) -> None: |
268 | 271 | assert matcher is M is Matcher |
| 272 | + |
| 273 | + |
| 274 | +def test_wait_until() -> None: |
| 275 | + pred = MagicMock(side_effect=[False, False, True]) |
| 276 | + |
| 277 | + start = perf_counter() |
| 278 | + assert wait_until(pred, 0.01, pause=0.0001) |
| 279 | + assert perf_counter() == pytest.approx(start + 0.0002, rel=1e-3) |
| 280 | + assert len(pred.call_args_list) == 3 |
| 281 | + |
| 282 | + |
| 283 | +def test_wait_until_raises_timedouterror() -> None: |
| 284 | + pred = MagicMock(return_value=False) |
| 285 | + |
| 286 | + start = perf_counter() |
| 287 | + |
| 288 | + with pytest.raises(TimedOutError): |
| 289 | + wait_until(pred, 0.01, pause=0.0001) |
| 290 | + |
| 291 | + assert perf_counter() == pytest.approx(start + 0.01, rel=1e-3) |
| 292 | + assert len(pred.call_args_list) > 1 |
0 commit comments