forked from mirrors/thatmattlove-hyperglass
66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
"""Test typing utilities."""
|
|
# flake8: noqa
|
|
|
|
# Standard Library
|
|
import typing
|
|
|
|
# Local
|
|
from ..typing import is_type
|
|
|
|
|
|
class EmptyTestClass:
|
|
pass
|
|
|
|
|
|
class EmptySubClass(EmptyTestClass):
|
|
pass
|
|
|
|
|
|
_string = "Test String"
|
|
_string_empty = ""
|
|
_dict = {"one": 1, "two": 2}
|
|
_dict_empty = dict()
|
|
_list = [1, 2, 3]
|
|
_list_empty = []
|
|
_set = {"one", "two"}
|
|
_set_empty = set()
|
|
_tuple = (1, 2, 3)
|
|
_tuple_empty = tuple()
|
|
_class = EmptyTestClass
|
|
_class_instance = EmptyTestClass()
|
|
_subclass = EmptySubClass
|
|
_subclass_instance = EmptySubClass()
|
|
|
|
DictOrString = typing.Union[typing.Dict, str]
|
|
ClassOrString = typing.Union[EmptyTestClass, str]
|
|
|
|
|
|
def test_is_type():
|
|
checks = (
|
|
("Non-Empty String is String", True, _string, str),
|
|
("Empty String is String", True, _string_empty, str),
|
|
("Non-Empty Dict is Dict", True, _dict, typing.Dict),
|
|
("Empty Dict is Dict", True, _dict_empty, dict),
|
|
("Non-Empty List is List", True, _list, typing.List),
|
|
("Empty List is List", True, _list_empty, list),
|
|
("Non-Empty Tuple is Tuple", True, _tuple, typing.Tuple),
|
|
("Empty Tuple is Tuple", True, _tuple_empty, tuple),
|
|
("Non-Empty Set is Set", True, _set, typing.Set),
|
|
("Empty Set is Set", True, _set_empty, set),
|
|
("Non-Empty String is Dict or String", True, _string, DictOrString),
|
|
("Non-Empty Dict is Dict or String", True, _dict, DictOrString),
|
|
("Non-Empty List is Dict or String", False, _list, DictOrString),
|
|
("Empty list is Dict or String", False, _list_empty, DictOrString),
|
|
("Class object is Class object", False, _class, _class),
|
|
("Class instance is Class instance", True, _class_instance, _class_instance),
|
|
("Class instance is Class object", True, _class_instance, _class),
|
|
("Subclass instance is Class instance", True, _subclass_instance, _class_instance),
|
|
("Subclass instance is Class object", True, _subclass_instance, _class),
|
|
("Class object is Class or String", False, _subclass, ClassOrString),
|
|
("Class instance is Class or String", True, _class_instance, ClassOrString),
|
|
("Subclass instance is Class or String", True, _subclass_instance, ClassOrString),
|
|
)
|
|
for _, expected, value, _type in checks:
|
|
result = is_type(value, _type)
|
|
if result is not expected:
|
|
raise AssertionError(f"Got `{value}`, expected `{str(_type)}`")
|