blob: c14d1929af0438a82e784bca02bcc384bc43835f [file] [log] [blame]
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/pylint-dev/pylint/blob/main/LICENSE
# Copyright (c) https://github.com/pylint-dev/pylint/blob/main/CONTRIBUTORS.txt
import os
from pathlib import Path
from typing import Any, NoReturn
from unittest import mock
from unittest.mock import patch
from pytest import CaptureFixture
from pylint.lint.pylinter import MANAGER, PyLinter
from pylint.utils import FileState
def raise_exception(*args: Any, **kwargs: Any) -> NoReturn:
raise ValueError
@patch.object(FileState, "iter_spurious_suppression_messages", raise_exception)
def test_crash_in_file(
linter: PyLinter, capsys: CaptureFixture[str], tmp_path: Path
) -> None:
linter.crash_file_path = str(tmp_path / "pylint-crash-%Y")
linter.check([__file__])
out, err = capsys.readouterr()
assert not out
assert not err
files = os.listdir(tmp_path)
assert len(files) == 1
assert "pylint-crash-20" in str(files[0])
assert any(m.symbol == "fatal" for m in linter.reporter.messages)
def test_crash_during_linting(
linter: PyLinter, capsys: CaptureFixture[str], tmp_path: Path
) -> None:
with mock.patch(
"pylint.lint.PyLinter.check_astroid_module", side_effect=RuntimeError
):
linter.crash_file_path = str(tmp_path / "pylint-crash-%Y")
linter.check([__file__])
out, err = capsys.readouterr()
assert not out
assert not err
files = os.listdir(tmp_path)
assert len(files) == 1
assert "pylint-crash-20" in str(files[0])
assert any(m.symbol == "astroid-error" for m in linter.reporter.messages)
def test_open_pylinter_denied_modules(linter: PyLinter) -> None:
"""Test PyLinter open() adds ignored modules to Astroid manager deny list."""
MANAGER.module_denylist = {"mod1"}
try:
linter.config.ignored_modules = ["mod2", "mod3"]
linter.open()
assert MANAGER.module_denylist == {"mod1", "mod2", "mod3"}
finally:
MANAGER.module_denylist = set()