blob: 508f62b525cabc47a9be6c21bea9544e81c370f6 [file] [log] [blame]
# Copyright (c) 2016-2018, 2020 Claudiu Popa <[email protected]>
# Copyright (c) 2016-2017 Derek Gustafson <[email protected]>
# Copyright (c) 2016 Moises Lopez <[email protected]>
# Copyright (c) 2019-2021 Pierre Sassoulas <[email protected]>
# Copyright (c) 2019 Ashley Whetter <[email protected]>
# Copyright (c) 2020 hippo91 <[email protected]>
# Copyright (c) 2020 Damien Baty <[email protected]>
# Copyright (c) 2021 Marc Mueller <[email protected]>
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
"""Tests for the pylint checker in :mod:`pylint.extensions.check_mccabe"""
# pylint: disable=redefined-outer-name
from os import path as osp
from typing import List
import pytest
from pylint.extensions import mccabe
from pylint.lint.pylinter import PyLinter
EXPECTED_MSGS = [
"'f1' is too complex. The McCabe rating is 1",
"'f2' is too complex. The McCabe rating is 1",
"'f3' is too complex. The McCabe rating is 3",
"'f4' is too complex. The McCabe rating is 2",
"'f5' is too complex. The McCabe rating is 2",
"'f6' is too complex. The McCabe rating is 2",
"'f7' is too complex. The McCabe rating is 3",
"'f8' is too complex. The McCabe rating is 4",
"'f9' is too complex. The McCabe rating is 9",
"'method1' is too complex. The McCabe rating is 1",
"This 'for' is too complex. The McCabe rating is 4",
"'method3' is too complex. The McCabe rating is 2",
"'f10' is too complex. The McCabe rating is 11",
"'method2' is too complex. The McCabe rating is 18",
]
@pytest.fixture(scope="module")
def enable():
return ["too-complex"]
@pytest.fixture(scope="module")
def disable():
return ["all"]
@pytest.fixture(scope="module")
def register():
return mccabe.register
@pytest.fixture
def fname_mccabe_example() -> str:
return osp.join(osp.dirname(osp.abspath(__file__)), "data", "mccabe.py")
@pytest.mark.parametrize(
"complexity, expected", [(0, EXPECTED_MSGS), (9, EXPECTED_MSGS[-2:])]
)
def test_max_mccabe_rate(
linter: PyLinter, fname_mccabe_example: str, complexity: int, expected: List[str]
) -> None:
linter.global_set_option("max-complexity", complexity)
linter.check([fname_mccabe_example])
real_msgs = [message.msg for message in linter.reporter.messages]
assert sorted(expected) == sorted(real_msgs)