67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
|
"""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})",
|
||
|
)
|