33 lines
1017 B
Python
33 lines
1017 B
Python
import ast
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
PLAYBOOK_SCRIPT = ROOT / "scripts" / "playbook.py"
|
|
|
|
|
|
class PlaybookTypingImportTests(unittest.TestCase):
|
|
def test_optional_annotation_names_are_imported(self):
|
|
tree = ast.parse(PLAYBOOK_SCRIPT.read_text(encoding="utf-8"))
|
|
|
|
imported_names: set[str] = set()
|
|
referenced_names: set[str] = set()
|
|
|
|
for node in ast.walk(tree):
|
|
if isinstance(node, ast.Import):
|
|
for alias in node.names:
|
|
imported_names.add(alias.asname or alias.name.split(".")[0])
|
|
elif isinstance(node, ast.ImportFrom):
|
|
for alias in node.names:
|
|
imported_names.add(alias.asname or alias.name)
|
|
elif isinstance(node, ast.Name):
|
|
referenced_names.add(node.id)
|
|
|
|
if "Optional" in referenced_names:
|
|
self.assertIn("Optional", imported_names)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|