|
import types |
|
from abc import ABCMeta, abstractmethod |
|
from collections.abc import AsyncGenerator, Iterable |
|
from typing import Any, Callable, Coroutine, Dict, Optional, Type, 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 |
|
|
|
def __exit__( |
|
self, |
|
exc_type: Optional[Type[BaseException]], |
|
exc_val: Optional[BaseException], |
|
exc_tb: Optional[types.TracebackType], |
|
) -> Optional[bool]: |
|
self.close() |
|
return None |
|
|
|
@abstractmethod |
|
def close(self) -> None: |
|
"""Close the event loop.""" |
|
|
|
@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 |
|
""" |
|
|