Exemplo n.º 1
0
    def test_overloads(self):
        obj = SomethingWithOverloads
        class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
        lines = _render_lines(_tokenize(class_node))
        assert lines[2].lstrip() == "@overload"
        actual1 = _merge_lines(lines[3:10])
        expected1 = 'def double(self, input: int = 1, *, test: bool = False, **kwargs) -> int'
        _check(actual1, expected1, SomethingWithOverloads)

        assert lines[11].lstrip() == "@overload"
        actual2 = _merge_lines(lines[12:19])
        expected2 = 'def double(self, input: Sequence[int] = [1], *, test: bool = False, **kwargs) -> list[int]'
        _check(actual2, expected2, SomethingWithOverloads)

        actual3 = _merge_lines(lines[20:27])
        expected3 = 'def double(self, input: int | Sequence[int], *, test: bool = False, **kwargs) -> int | list[int]'
        _check(actual3, expected3, SomethingWithOverloads)

        assert lines[28].lstrip() == "@overload"
        actual4 = _merge_lines(lines[29:35])
        expected4 = 'def something(self, id: str, *args, **kwargs) -> str'
        _check(actual4, expected4, SomethingWithOverloads)

        assert lines[36].lstrip() == "@overload"
        actual5 = _merge_lines(lines[37:43])
        expected5 = 'def something(self, id: int, *args, **kwargs) -> str'
        _check(actual5, expected5, SomethingWithOverloads)

        actual6 = _merge_lines(lines[44:])
        expected6 = 'def something(self, id: int | str, *args, **kwargs) -> str'
        _check(actual6, expected6, SomethingWithOverloads)
Exemplo n.º 2
0
 def test_generic_class(self):
     obj = GenericStack
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     actuals = _render_lines(_tokenize(class_node))
     expected = [
         "class GenericStack(Generic[T]):"
     ]
     _check_all(actuals, expected, obj)        
Exemplo n.º 3
0
    def test_decorators(self):
        obj = SomethingWithDecorators
        class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
        actuals = _render_lines(_tokenize(class_node))

        assert actuals[2].lstrip() == "@another_decorator('Test')"
        assert actuals[5].lstrip() == "@another_decorator('Test')"
        assert actuals[8].lstrip() == "@my_decorator"
        assert actuals[11].lstrip() == "@my_decorator"
Exemplo n.º 4
0
 def test_enum(self):
     obj = PetEnumPy3MetaclassAlt
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     actuals = _render_lines(_tokenize(class_node))
     expected = [
         "class PetEnumPy3MetaclassAlt(str, Enum):",
         'CAT = "cat"',
         'DEFAULT = "cat"',
         'DOG = "dog"'
     ]
     _check_all(actuals, expected, obj)
Exemplo n.º 5
0
 def test_typed_dict_class(self):
     obj = FakeTypedDict
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     actuals = _render_lines(_tokenize(class_node))
     expected = [
         "class FakeTypedDict(dict):",
         'key "age": int',
         'key "name": str',
         'key "union": Union[bool, FakeObject, PetEnumPy3MetaclassAlt]'
     ]
     _check_all(actuals, expected, obj)
Exemplo n.º 6
0
 def test_properties(self):
     obj = SomethingWithProperties
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     actuals = _render_lines(_tokenize(class_node))
     expected = [
         "class SomethingWithProperties:",
         "property docstring_property: Optional[str]    # Read-only",
         "property py2_property: Optional[str]    # Read-only",
         "property py3_property: Optional[str]    # Read-only"    
     ]
     _check_all(actuals, expected, obj)
Exemplo n.º 7
0
 def test_public_private(self):
     obj = PublicPrivateClass
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     actuals = _render_lines(_tokenize(class_node))
     expected = [
         "class PublicPrivateClass:",
         "cvar public_dict: dict = {'a': 'b'}",
         'cvar public_var: str = "SOMEVAL"',
     ]
     _check_all(actuals, expected, obj)
     assert actuals[4].lstrip() == "def __init__(self)"
     assert actuals[6].lstrip() == "def public_func(self, **kwargs) -> str"
Exemplo n.º 8
0
 def test_abstract_class(self):
     obj = SomeImplementationClass
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     actuals = _render_lines(_tokenize(class_node))
     expected = [
         "class SomeImplementationClass(_SomeAbstractBase):",
         "",
         "def say_hello(self) -> str"
     ]
     for (idx, actual) in enumerate(actuals):
         expect = expected[idx]
         _check(actual, expect, SomethingWithProperties)
Exemplo n.º 9
0
 def test_object(self):
     obj = FakeObject
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     actuals = _render_lines(_tokenize(class_node))
     expected = [
         "class FakeObject:",
         'cvar PUBLIC_CONST: str = "SOMETHING"',
         'ivar age: int',
         'ivar name: str',
         'ivar union: Union[bool, PetEnumPy3MetaclassAlt]'
     ]
     _check_all(actuals, expected, obj)
     init_string = _merge_lines(actuals[6:])
     assert init_string == "def __init__(self, name: str, age: int, union: Union[bool, PetEnumPy3MetaclassAlt])"
Exemplo n.º 10
0
    def test_inherited_overloads(self):
        obj = SomethingWithInheritedOverloads
        class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
        lines = _render_lines(_tokenize(class_node))
        assert lines[2].lstrip() == "@overload"
        actual1 = lines[3]
        expected1 = 'def do_thing(val: str) -> str'
        _check(actual1, expected1, SomethingWithInheritedOverloads)

        assert lines[5].lstrip() == "@overload"
        actual2 = lines[6]
        expected2 = 'def do_thing(val: int) -> int'
        _check(actual2, expected2, SomethingWithInheritedOverloads)

        assert lines[8].lstrip() == "@overload"
        actual3 = lines[9]
        expected3 = 'def do_thing(val: bool) -> bool'
        _check(actual3, expected3, SomethingWithInheritedOverloads)

        actual4 = lines[11]
        expected4 = 'def do_thing(val: str | int | bool) -> str | int | bool'
        _check(actual4, expected4, SomethingWithInheritedOverloads)
Exemplo n.º 11
0
 def test_model_aliases(self):
     obj = SomeAwesomelyNamedObject
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     lines = _render_lines(_tokenize(class_node))
     assert lines[0].lstrip() == "class SomeAwesomelyNamedObject(SomePoorlyNamedObject):"
Exemplo n.º 12
0
 def test_required_kwargs(self):
     obj = RequiredKwargObject
     class_node = ClassNode(name=obj.__name__, namespace=obj.__name__, parent_node=None, obj=obj, pkg_root_namespace=self.pkg_namespace)
     actuals = _render_lines(_tokenize(class_node))
     init_string = _merge_lines(actuals[2:])
     assert init_string == "def __init__(self, id: str, *, age: int, name: str, other: str = ..., **kwargs: Any)"