Files
neotest-python/neotest_python/base.py
2022-10-31 14:14:52 +00:00

49 lines
1.3 KiB
Python

import abc
from enum import Enum
from typing import TYPE_CHECKING, Callable, Dict, List, Optional
class NeotestResultStatus(str, Enum):
SKIPPED = "skipped"
PASSED = "passed"
FAILED = "failed"
def __gt__(self, other) -> bool:
members = list(self.__class__.__members__.values())
return members.index(self) > members.index(other)
if TYPE_CHECKING:
from typing import TypedDict
class NeotestError(TypedDict):
message: str
line: Optional[int]
class NeotestResult(TypedDict):
short: Optional[str]
status: NeotestResultStatus
errors: Optional[List[NeotestError]]
else:
NeotestError = Dict
NeotestResult = Dict
class NeotestAdapter(abc.ABC):
def update_result(
self, base: Optional[NeotestResult], update: NeotestResult
) -> NeotestResult:
if not base:
return update
return {
"status": max(base["status"], update["status"]),
"errors": (base.get("errors") or []) + (update.get("errors") or []) or None,
"short": (base.get("short") or "") + (update.get("short") or ""),
}
@abc.abstractmethod
def run(self, args: List[str], stream: Callable):
del args, stream
raise NotImplementedError