Files

75 lines
2.5 KiB
Python

"""Tests for capnp_stubgen.emitter."""
from capnp_stubgen.emitter import Emitter
class TestEmitterBasic:
def test_header(self):
e = Emitter("test.capnp")
content = e.render()
assert '"""Auto-generated type stub for test.capnp."""' in content
assert "from __future__ import annotations" in content
def test_class_definition(self):
e = Emitter("test.capnp")
e.begin_class("Foo")
e.add_field("bar", "int")
e.end_class()
content = e.render()
assert "class Foo:" in content
assert " bar: int" in content
def test_type_alias(self):
e = Emitter("test.capnp")
e.add_typing_import("Literal")
e.add_type_alias("Gender", 'Literal["male", "female"]')
content = e.render()
assert 'Gender = Literal["male", "female"]' in content
assert "from typing import Literal" in content
def test_method(self):
e = Emitter("test.capnp")
e.add_method("foo", params=["self", "x: int"], return_type="str")
content = e.render()
assert "def foo(self, x: int) -> str: ..." in content
def test_static_method(self):
e = Emitter("test.capnp")
e.add_static_method("create", params=["x: int"], return_type="Foo")
content = e.render()
assert "@staticmethod" in content
assert "def create(x: int) -> Foo: ..." in content
def test_imports_grouped(self):
e = Emitter("test.capnp")
e.add_typing_import("Literal")
e.add_typing_import("Sequence", "collections.abc")
e.add_typing_import("Iterator", "collections.abc")
content = e.render()
# typing imports grouped
assert "from typing import Literal" in content
# collections.abc imports grouped
assert "from collections.abc import Iterator, Sequence" in content
def test_nested_classes(self):
e = Emitter("test.capnp")
e.begin_class("Outer")
e.add_field("x", "int")
e.begin_class("Inner")
e.add_field("y", "str")
e.end_class()
e.end_class()
content = e.render()
assert "class Outer:" in content
assert " x: int" in content
assert " class Inner:" in content
assert " y: str" in content
def test_decorators(self):
e = Emitter("test.capnp")
e.add_decorator("overload")
e.add_method("foo", params=["x: int"], return_type="str")
content = e.render()
assert "@overload" in content
assert "def foo(x: int) -> str: ..." in content