Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
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})",
|
|
)
|