|
from __future__ import annotations |
|
|
|
import types |
|
from abc import ABCMeta, abstractmethod |
|
from collections.abc import AsyncGenerator, Callable, Coroutine, Iterable |
|
from typing import Any, TypeVar |
|
|
|
_T = TypeVar("_T") |
|
|
|
|
|
class TestRunner(metaclass=ABCMeta): |
|
""" |
|
Encapsulates a running event loop. Every call made through this object will use the |
|
same event loop. |
|
""" |
|
|
|
def __enter__(self) -> TestRunner: |
|
return self |
|
|
|
@abstractmethod |
|
def __exit__( |
|
self, |
|
exc_type: type[BaseException] | None, |
|
exc_val: BaseException | None, |
|
exc_tb: types.TracebackType | None, |
|
) -> bool | None: |
|
... |
|
|
|
@abstractmethod |
|
def run_asyncgen_fixture( |
|
self, |
|
fixture_func: Callable[..., AsyncGenerator[_T, Any]], |
|
kwargs: dict[str, Any], |
|
) -> Iterable[_T]: |
|
""" |
|
Run an async generator fixture. |
|
|
|
:param fixture_func: the fixture function |
|
:param kwargs: keyword arguments to call the fixture function with |
|
:return: an iterator yielding the value yielded from the async generator |
|
""" |
|
|
|
@abstractmethod |
|
def run_fixture( |
|
self, |
|
fixture_func: Callable[..., Coroutine[Any, Any, _T]], |
|
kwargs: dict[str, Any], |
|
) -> _T: |
|
""" |
|
Run an async fixture. |
|
|
|
:param fixture_func: the fixture function |
|
:param kwargs: keyword arguments to call the fixture function with |
|
:return: the return value of the fixture function |
|
""" |
|
|
|
@abstractmethod |
|
def run_test( |
|
self, test_func: Callable[..., Coroutine[Any, Any, Any]], kwargs: dict[str, Any] |
|
) -> None: |
|
""" |
|
Run an async test function. |
|
|
|
:param test_func: the test function |
|
:param kwargs: keyword arguments to call the test function with |
|
""" |
|
|