|
16 | 16 | import pytest
|
17 | 17 |
|
18 | 18 | from pylint import checkers
|
| 19 | +from pylint.interfaces import HIGH |
19 | 20 | from pylint.lint import PyLinter
|
20 |
| -from pylint.reporters import BaseReporter |
| 21 | +from pylint.message.message import Message |
| 22 | +from pylint.reporters import BaseReporter, MultiReporter |
21 | 23 | from pylint.reporters.text import ParseableTextReporter, TextReporter
|
22 |
| -from pylint.typing import FileItem |
| 24 | +from pylint.typing import FileItem, MessageLocationTuple |
23 | 25 |
|
24 | 26 | if TYPE_CHECKING:
|
25 | 27 | from pylint.reporters.ureports.nodes import Section
|
@@ -329,13 +331,57 @@ def test_multi_format_output(tmp_path):
|
329 | 331 | )
|
330 | 332 |
|
331 | 333 |
|
332 |
| -def test_display_results_is_renamed(): |
| 334 | +def test_multi_reporter_independant_messages() -> None: |
| 335 | + """Messages should not be modified by multiple reporters""" |
| 336 | + |
| 337 | + check_message = "Not modified" |
| 338 | + |
| 339 | + class ReporterModify(BaseReporter): |
| 340 | + def handle_message(self, msg: Message) -> None: |
| 341 | + msg.msg = "Modified message" |
| 342 | + |
| 343 | + def writeln(self, string: str = "") -> None: |
| 344 | + pass |
| 345 | + |
| 346 | + def _display(self, layout: Section) -> None: |
| 347 | + pass |
| 348 | + |
| 349 | + class ReporterCheck(BaseReporter): |
| 350 | + def handle_message(self, msg: Message) -> None: |
| 351 | + assert ( |
| 352 | + msg.msg == check_message |
| 353 | + ), "Message object should not be changed by other reporters." |
| 354 | + |
| 355 | + def writeln(self, string: str = "") -> None: |
| 356 | + pass |
| 357 | + |
| 358 | + def _display(self, layout: Section) -> None: |
| 359 | + pass |
| 360 | + |
| 361 | + multi_reporter = MultiReporter([ReporterModify(), ReporterCheck()], lambda: None) |
| 362 | + |
| 363 | + message = Message( |
| 364 | + symbol="missing-docstring", |
| 365 | + msg_id="C0123", |
| 366 | + location=MessageLocationTuple("abspath", "path", "module", "obj", 1, 2, 1, 3), |
| 367 | + msg=check_message, |
| 368 | + confidence=HIGH, |
| 369 | + ) |
| 370 | + |
| 371 | + multi_reporter.handle_message(message) |
| 372 | + |
| 373 | + assert ( |
| 374 | + message.msg == check_message |
| 375 | + ), "Message object should not be changed by reporters." |
| 376 | + |
| 377 | + |
| 378 | +def test_display_results_is_renamed() -> None: |
333 | 379 | class CustomReporter(TextReporter):
|
334 | 380 | def _display(self, layout: Section) -> None:
|
335 | 381 | return None
|
336 | 382 |
|
337 | 383 | reporter = CustomReporter()
|
338 | 384 | with pytest.raises(AttributeError) as exc:
|
339 | 385 | # pylint: disable=no-member
|
340 |
| - reporter.display_results() |
| 386 | + reporter.display_results() # type: ignore[attr-defined] |
341 | 387 | assert "no attribute 'display_results'" in str(exc)
|
0 commit comments