test_ref_info.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """Test exporting line-level reference information (undocumented feature)"""
  2. from __future__ import annotations
  3. import json
  4. import os
  5. import sys
  6. from mypy import build
  7. from mypy.modulefinder import BuildSource
  8. from mypy.options import Options
  9. from mypy.test.config import test_temp_dir
  10. from mypy.test.data import DataDrivenTestCase, DataSuite
  11. from mypy.test.helpers import assert_string_arrays_equal
  12. class RefInfoSuite(DataSuite):
  13. required_out_section = True
  14. files = ["ref-info.test"]
  15. def run_case(self, testcase: DataDrivenTestCase) -> None:
  16. options = Options()
  17. options.use_builtins_fixtures = True
  18. options.show_traceback = True
  19. options.export_ref_info = True # This is the flag we are testing
  20. src = "\n".join(testcase.input)
  21. result = build.build(
  22. sources=[BuildSource("main", None, src)], options=options, alt_lib_path=test_temp_dir
  23. )
  24. assert not result.errors
  25. major, minor = sys.version_info[:2]
  26. ref_path = os.path.join(options.cache_dir, f"{major}.{minor}", "__main__.refs.json")
  27. with open(ref_path) as refs_file:
  28. data = json.load(refs_file)
  29. a = []
  30. for item in data:
  31. a.append(f"{item['line']}:{item['column']}:{item['target']}")
  32. assert_string_arrays_equal(
  33. testcase.output, a, f"Invalid output ({testcase.file}, line {testcase.line})"
  34. )