Handle typing collisions and add validation to a files module for overlaping declarations (#582)
* Fix 'typing' import collisions. * Fix formatting. * Fix self-test issues. * Validation for modules, different typing configurations * add readme * make warning * fix format --------- Co-authored-by: Scott Hendricks <scott.hendricks@confluent.io>
This commit is contained in:
80
tests/test_typing_compiler.py
Normal file
80
tests/test_typing_compiler.py
Normal file
@@ -0,0 +1,80 @@
|
||||
import pytest
|
||||
|
||||
from betterproto.plugin.typing_compiler import (
|
||||
DirectImportTypingCompiler,
|
||||
NoTyping310TypingCompiler,
|
||||
TypingImportTypingCompiler,
|
||||
)
|
||||
|
||||
|
||||
def test_direct_import_typing_compiler():
|
||||
compiler = DirectImportTypingCompiler()
|
||||
assert compiler.imports() == {}
|
||||
assert compiler.optional("str") == "Optional[str]"
|
||||
assert compiler.imports() == {"typing": {"Optional"}}
|
||||
assert compiler.list("str") == "List[str]"
|
||||
assert compiler.imports() == {"typing": {"Optional", "List"}}
|
||||
assert compiler.dict("str", "int") == "Dict[str, int]"
|
||||
assert compiler.imports() == {"typing": {"Optional", "List", "Dict"}}
|
||||
assert compiler.union("str", "int") == "Union[str, int]"
|
||||
assert compiler.imports() == {"typing": {"Optional", "List", "Dict", "Union"}}
|
||||
assert compiler.iterable("str") == "Iterable[str]"
|
||||
assert compiler.imports() == {
|
||||
"typing": {"Optional", "List", "Dict", "Union", "Iterable"}
|
||||
}
|
||||
assert compiler.async_iterable("str") == "AsyncIterable[str]"
|
||||
assert compiler.imports() == {
|
||||
"typing": {"Optional", "List", "Dict", "Union", "Iterable", "AsyncIterable"}
|
||||
}
|
||||
assert compiler.async_iterator("str") == "AsyncIterator[str]"
|
||||
assert compiler.imports() == {
|
||||
"typing": {
|
||||
"Optional",
|
||||
"List",
|
||||
"Dict",
|
||||
"Union",
|
||||
"Iterable",
|
||||
"AsyncIterable",
|
||||
"AsyncIterator",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def test_typing_import_typing_compiler():
|
||||
compiler = TypingImportTypingCompiler()
|
||||
assert compiler.imports() == {}
|
||||
assert compiler.optional("str") == "typing.Optional[str]"
|
||||
assert compiler.imports() == {"typing": None}
|
||||
assert compiler.list("str") == "typing.List[str]"
|
||||
assert compiler.imports() == {"typing": None}
|
||||
assert compiler.dict("str", "int") == "typing.Dict[str, int]"
|
||||
assert compiler.imports() == {"typing": None}
|
||||
assert compiler.union("str", "int") == "typing.Union[str, int]"
|
||||
assert compiler.imports() == {"typing": None}
|
||||
assert compiler.iterable("str") == "typing.Iterable[str]"
|
||||
assert compiler.imports() == {"typing": None}
|
||||
assert compiler.async_iterable("str") == "typing.AsyncIterable[str]"
|
||||
assert compiler.imports() == {"typing": None}
|
||||
assert compiler.async_iterator("str") == "typing.AsyncIterator[str]"
|
||||
assert compiler.imports() == {"typing": None}
|
||||
|
||||
|
||||
def test_no_typing_311_typing_compiler():
|
||||
compiler = NoTyping310TypingCompiler()
|
||||
assert compiler.imports() == {}
|
||||
assert compiler.optional("str") == "str | None"
|
||||
assert compiler.imports() == {}
|
||||
assert compiler.list("str") == "list[str]"
|
||||
assert compiler.imports() == {}
|
||||
assert compiler.dict("str", "int") == "dict[str, int]"
|
||||
assert compiler.imports() == {}
|
||||
assert compiler.union("str", "int") == "str | int"
|
||||
assert compiler.imports() == {}
|
||||
assert compiler.iterable("str") == "Iterable[str]"
|
||||
assert compiler.imports() == {"typing": {"Iterable"}}
|
||||
assert compiler.async_iterable("str") == "AsyncIterable[str]"
|
||||
assert compiler.imports() == {"typing": {"Iterable", "AsyncIterable"}}
|
||||
assert compiler.async_iterator("str") == "AsyncIterator[str]"
|
||||
assert compiler.imports() == {
|
||||
"typing": {"Iterable", "AsyncIterable", "AsyncIterator"}
|
||||
}
|
||||
Reference in New Issue
Block a user