37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
import types
|
|
from abc import ABCMeta, abstractmethod
|
|
from typing import Any, Awaitable, Callable, 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 call(self, func: Callable[..., Awaitable[_T]],
|
|
*args: object, **kwargs: Dict[str, Any]) -> _T:
|
|
"""
|
|
Call the given function within the backend's event loop.
|
|
|
|
:param func: a callable returning an awaitable
|
|
:param args: positional arguments to call ``func`` with
|
|
:param kwargs: keyword arguments to call ``func`` with
|
|
:return: the return value of ``func``
|
|
"""
|