47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
"""Tests for mypy incremental error output."""
|
|
from typing import List
|
|
|
|
from mypy import build
|
|
from mypy.test.helpers import assert_string_arrays_equal
|
|
from mypy.test.data import DataDrivenTestCase, DataSuite
|
|
from mypy.modulefinder import BuildSource
|
|
from mypy.errors import CompileError
|
|
from mypy.options import Options
|
|
|
|
|
|
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
|
|
|
|
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,
|
|
'Invalid output ({}, line {})'.format(
|
|
testcase.file, testcase.line))
|