playbook/tests/test_playbook_typing_import...

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()