46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
|
"""Tests for mypy incremental error output."""
|
||
|
from __future__ import annotations
|
||
|
|
||
|
from mypy import build
|
||
|
from mypy.errors import CompileError
|
||
|
from mypy.modulefinder import BuildSource
|
||
|
from mypy.options import Options
|
||
|
from mypy.test.data import DataDrivenTestCase, DataSuite
|
||
|
from mypy.test.helpers import assert_string_arrays_equal
|
||
|
|
||
|
|
||
|
class ErrorStreamSuite(DataSuite):
|
||
|
required_out_section = True
|
||
|
base_path = "."
|
||
|
files = ["errorstream.test"]
|
||
|
|
||
|
def run_case(self, testcase: DataDrivenTestCase) -> None:
|
||
|
test_error_stream(testcase)
|
||
|
|
||
|
|
||
|
def test_error_stream(testcase: DataDrivenTestCase) -> None:
|
||
|
"""Perform a single error streaming test case.
|
||
|
|
||
|
The argument contains the description of the test case.
|
||
|
"""
|
||
|
options = Options()
|
||
|
options.show_traceback = True
|
||
|
options.hide_error_codes = True
|
||
|
|
||
|
logged_messages: list[str] = []
|
||
|
|
||
|
def flush_errors(msgs: list[str], serious: bool) -> None:
|
||
|
if msgs:
|
||
|
logged_messages.append("==== Errors flushed ====")
|
||
|
logged_messages.extend(msgs)
|
||
|
|
||
|
sources = [BuildSource("main", "__main__", "\n".join(testcase.input))]
|
||
|
try:
|
||
|
build.build(sources=sources, options=options, flush_errors=flush_errors)
|
||
|
except CompileError as e:
|
||
|
assert e.messages == []
|
||
|
|
||
|
assert_string_arrays_equal(
|
||
|
testcase.output, logged_messages, f"Invalid output ({testcase.file}, line {testcase.line})"
|
||
|
)
|