test_alwaysdefined.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """Test cases for inferring always defined attributes in classes."""
  2. from __future__ import annotations
  3. import os.path
  4. from mypy.errors import CompileError
  5. from mypy.test.config import test_temp_dir
  6. from mypy.test.data import DataDrivenTestCase
  7. from mypyc.test.testutil import (
  8. ICODE_GEN_BUILTINS,
  9. MypycDataSuite,
  10. assert_test_output,
  11. build_ir_for_single_file2,
  12. infer_ir_build_options_from_test_name,
  13. use_custom_builtins,
  14. )
  15. files = ["alwaysdefined.test"]
  16. class TestAlwaysDefined(MypycDataSuite):
  17. files = files
  18. base_path = test_temp_dir
  19. def run_case(self, testcase: DataDrivenTestCase) -> None:
  20. """Perform a runtime checking transformation test case."""
  21. options = infer_ir_build_options_from_test_name(testcase.name)
  22. if options is None:
  23. # Skipped test case
  24. return
  25. with use_custom_builtins(os.path.join(self.data_prefix, ICODE_GEN_BUILTINS), testcase):
  26. try:
  27. ir = build_ir_for_single_file2(testcase.input, options)
  28. except CompileError as e:
  29. actual = e.messages
  30. else:
  31. actual = []
  32. for cl in ir.classes:
  33. if cl.name.startswith("_"):
  34. continue
  35. actual.append(
  36. "{}: [{}]".format(cl.name, ", ".join(sorted(cl._always_initialized_attrs)))
  37. )
  38. assert_test_output(testcase, actual, "Invalid test output", testcase.output)