def test_main(obj: Any, cls: Any, expected: Exception | None) -> None: if expected is None: check_isinstance(obj, cls) else: with raises(type(expected)) as exc_info: check_isinstance(obj, cls) assert exc_info.value == expected
def test_fail_inner( self, obj: Any, cls: Any, keys: dict[int, SpecificTypeError], values: dict[int, SpecificTypeError], ) -> None: with raises(TypeErrorsInMapping) as exc_info: check_isinstance(obj, cls) assert exc_info.value == TypeErrorsInMapping(keys, values)
def check_dataclass( obj: Any, *, globalns: dict[str, Any] | None = None, localns: dict[str, Any] | None = None, ) -> None: if isinstance(obj, type): raise ArgumentIsAClass(obj) try: obj_fields = fields(obj) except TypeError: raise ArgumentIsNotADataClass(obj) else: errors = {} for field in obj_fields: name = field.name value = getattr(obj, name) cls = get_type_hints(obj, globalns=globalns, localns=localns)[name] try: check_isinstance(value, cls) except TypeError as error: errors[name] = error if errors: raise TypeErrorsInDataClass(errors)
def test_fail(self, obj: Any) -> None: assert isinstance(obj, int) with raises(SpecificTypeError) as exc_info: check_isinstance(obj, int) assert exc_info.value == SpecificTypeError(obj, int)
def test_ok(self, obj: Any) -> None: check_isinstance(obj, bool)
def test_iterator() -> None: check_isinstance(iter(range(3)), Iterator) check_isinstance(iter(range(3)), Iterator[int])
def test_ok(self, obj: Any, cls: Any) -> None: check_isinstance(obj, cls)
def test_fail_outer(self, obj: Any, cls: Any) -> None: with raises(SpecificTypeError) as exc_info: check_isinstance(obj, cls) assert exc_info.value == SpecificTypeError(obj, cls)
def test_fail_inner(self, obj: Any, cls: Any, errors: dict[int, SpecificTypeError]) -> None: with raises(TypeErrorsInIterable) as exc_info: check_isinstance(obj, cls) assert exc_info.value == TypeErrorsInIterable(errors)