Type-annotate pytest.{exit,skip,fail,xfail,importorskip}
This commit is contained in:
parent
866904ab80
commit
d7ee3dac2c
|
@ -3,21 +3,26 @@ exception classes and constants handling test outcomes
|
||||||
as well as functions creating them
|
as well as functions creating them
|
||||||
"""
|
"""
|
||||||
import sys
|
import sys
|
||||||
|
from typing import Any
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from packaging.version import Version
|
from packaging.version import Version
|
||||||
|
|
||||||
|
if False: # TYPE_CHECKING
|
||||||
|
from typing import NoReturn
|
||||||
|
|
||||||
|
|
||||||
class OutcomeException(BaseException):
|
class OutcomeException(BaseException):
|
||||||
""" OutcomeException and its subclass instances indicate and
|
""" OutcomeException and its subclass instances indicate and
|
||||||
contain info about test and collection outcomes.
|
contain info about test and collection outcomes.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, msg=None, pytrace=True):
|
def __init__(self, msg: Optional[str] = None, pytrace: bool = True) -> None:
|
||||||
BaseException.__init__(self, msg)
|
BaseException.__init__(self, msg)
|
||||||
self.msg = msg
|
self.msg = msg
|
||||||
self.pytrace = pytrace
|
self.pytrace = pytrace
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self) -> str:
|
||||||
if self.msg:
|
if self.msg:
|
||||||
val = self.msg
|
val = self.msg
|
||||||
if isinstance(val, bytes):
|
if isinstance(val, bytes):
|
||||||
|
@ -36,7 +41,12 @@ class Skipped(OutcomeException):
|
||||||
# in order to have Skipped exception printing shorter/nicer
|
# in order to have Skipped exception printing shorter/nicer
|
||||||
__module__ = "builtins"
|
__module__ = "builtins"
|
||||||
|
|
||||||
def __init__(self, msg=None, pytrace=True, allow_module_level=False):
|
def __init__(
|
||||||
|
self,
|
||||||
|
msg: Optional[str] = None,
|
||||||
|
pytrace: bool = True,
|
||||||
|
allow_module_level: bool = False,
|
||||||
|
) -> None:
|
||||||
OutcomeException.__init__(self, msg=msg, pytrace=pytrace)
|
OutcomeException.__init__(self, msg=msg, pytrace=pytrace)
|
||||||
self.allow_module_level = allow_module_level
|
self.allow_module_level = allow_module_level
|
||||||
|
|
||||||
|
@ -50,7 +60,9 @@ class Failed(OutcomeException):
|
||||||
class Exit(Exception):
|
class Exit(Exception):
|
||||||
""" raised for immediate program exits (no tracebacks/summaries)"""
|
""" raised for immediate program exits (no tracebacks/summaries)"""
|
||||||
|
|
||||||
def __init__(self, msg="unknown reason", returncode=None):
|
def __init__(
|
||||||
|
self, msg: str = "unknown reason", returncode: Optional[int] = None
|
||||||
|
) -> None:
|
||||||
self.msg = msg
|
self.msg = msg
|
||||||
self.returncode = returncode
|
self.returncode = returncode
|
||||||
super().__init__(msg)
|
super().__init__(msg)
|
||||||
|
@ -59,7 +71,7 @@ class Exit(Exception):
|
||||||
# exposed helper methods
|
# exposed helper methods
|
||||||
|
|
||||||
|
|
||||||
def exit(msg, returncode=None):
|
def exit(msg: str, returncode: Optional[int] = None) -> "NoReturn":
|
||||||
"""
|
"""
|
||||||
Exit testing process.
|
Exit testing process.
|
||||||
|
|
||||||
|
@ -74,7 +86,7 @@ def exit(msg, returncode=None):
|
||||||
exit.Exception = Exit # type: ignore
|
exit.Exception = Exit # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def skip(msg="", *, allow_module_level=False):
|
def skip(msg: str = "", *, allow_module_level: bool = False) -> "NoReturn":
|
||||||
"""
|
"""
|
||||||
Skip an executing test with the given message.
|
Skip an executing test with the given message.
|
||||||
|
|
||||||
|
@ -101,7 +113,7 @@ def skip(msg="", *, allow_module_level=False):
|
||||||
skip.Exception = Skipped # type: ignore
|
skip.Exception = Skipped # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def fail(msg="", pytrace=True):
|
def fail(msg: str = "", pytrace: bool = True) -> "NoReturn":
|
||||||
"""
|
"""
|
||||||
Explicitly fail an executing test with the given message.
|
Explicitly fail an executing test with the given message.
|
||||||
|
|
||||||
|
@ -121,7 +133,7 @@ class XFailed(Failed):
|
||||||
""" raised from an explicit call to pytest.xfail() """
|
""" raised from an explicit call to pytest.xfail() """
|
||||||
|
|
||||||
|
|
||||||
def xfail(reason=""):
|
def xfail(reason: str = "") -> "NoReturn":
|
||||||
"""
|
"""
|
||||||
Imperatively xfail an executing test or setup functions with the given reason.
|
Imperatively xfail an executing test or setup functions with the given reason.
|
||||||
|
|
||||||
|
@ -139,7 +151,9 @@ def xfail(reason=""):
|
||||||
xfail.Exception = XFailed # type: ignore
|
xfail.Exception = XFailed # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def importorskip(modname, minversion=None, reason=None):
|
def importorskip(
|
||||||
|
modname: str, minversion: Optional[str] = None, reason: Optional[str] = None
|
||||||
|
) -> Any:
|
||||||
"""Imports and returns the requested module ``modname``, or skip the current test
|
"""Imports and returns the requested module ``modname``, or skip the current test
|
||||||
if the module cannot be imported.
|
if the module cannot be imported.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue