gtn/.venv/Lib/site-packages/mypy/test/testtransform.py

67 lines
2.3 KiB
Python
Raw Normal View History

"""Identity AST transform test cases"""
from __future__ import annotations
from mypy import build
from mypy.errors import CompileError
from mypy.modulefinder import BuildSource
from mypy.options import TYPE_VAR_TUPLE, UNPACK
from mypy.test.config import test_temp_dir
from mypy.test.data import DataDrivenTestCase, DataSuite
from mypy.test.helpers import assert_string_arrays_equal, normalize_error_messages, parse_options
from mypy.test.visitors import TypeAssertTransformVisitor
class TransformSuite(DataSuite):
required_out_section = True
# Reuse semantic analysis test cases.
files = [
"semanal-basic.test",
"semanal-expressions.test",
"semanal-classes.test",
"semanal-types.test",
"semanal-modules.test",
"semanal-statements.test",
"semanal-abstractclasses.test",
]
native_sep = True
def run_case(self, testcase: DataDrivenTestCase) -> None:
test_transform(testcase)
def test_transform(testcase: DataDrivenTestCase) -> None:
"""Perform an identity transform test case."""
try:
src = "\n".join(testcase.input)
options = parse_options(src, testcase, 1)
options.use_builtins_fixtures = True
options.semantic_analysis_only = True
options.enable_incomplete_feature = [TYPE_VAR_TUPLE, UNPACK]
options.show_traceback = True
options.force_uppercase_builtins = True
result = build.build(
sources=[BuildSource("main", None, src)], options=options, alt_lib_path=test_temp_dir
)
a = result.errors
if a:
raise CompileError(a)
# Include string representations of the source files in the actual
# output.
for module in sorted(result.files.keys()):
if module in testcase.test_modules:
t = TypeAssertTransformVisitor()
t.test_only = True
file = t.mypyfile(result.files[module])
a += file.str_with_options(options).split("\n")
except CompileError as e:
a = e.messages
if testcase.normalize_output:
a = normalize_error_messages(a)
assert_string_arrays_equal(
testcase.output,
a,
f"Invalid semantic analyzer output ({testcase.file}, line {testcase.line})",
)