blob: 1935d84954ca6303ab930fd2cea5e64ba7a2d973 [file] [log] [blame]
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/master/LICENSE
import sys
from unittest import mock
import pytest
from pylint.checkers import BaseChecker
from pylint.constants import WarningScope
from pylint.exceptions import InvalidMessageError
from pylint.message import MessageDefinition
@pytest.mark.parametrize(
"msgid,expected",
[
("Q1234", "Bad message type Q in 'Q1234'"),
("W12345", "Invalid message id 'W12345'"),
],
)
def test_create_invalid_message_type(msgid, expected):
checker_mock = mock.Mock(name="Checker")
checker_mock.name = "checker"
with pytest.raises(InvalidMessageError) as invalid_message_error:
MessageDefinition.check_msgid(msgid)
with pytest.raises(InvalidMessageError) as other_invalid_message_error:
MessageDefinition(checker_mock, msgid, "msg", "descr", "symbol", "scope")
assert str(invalid_message_error.value) == expected
assert str(other_invalid_message_error.value) == expected
class FalseChecker(BaseChecker):
name = "FalseChecker"
msgs = {
"W1234": ("message one", "msg-symbol-one", "msg description"),
"W1235": (
"message two",
"msg-symbol-two",
"msg description",
{"old_names": [("W1230", "msg-symbol-one")]},
),
}
class TestMessagesDefinition:
@staticmethod
def assert_with_fail_msg(msg, expected=True):
fail_msg = (
f"With minversion='{msg.minversion}' and maxversion='{msg.maxversion}',"
f" and the python interpreter being {sys.version_info} "
"the message should{}be emitable"
)
if expected:
assert msg.may_be_emitted(), fail_msg.format(" ")
else:
assert not msg.may_be_emitted(), fail_msg.format(" not ")
@staticmethod
def get_message_definition():
args = [
FalseChecker(),
"W1234",
"message",
"description",
"msg-symbol",
WarningScope.NODE,
]
kwargs = {"minversion": None, "maxversion": None}
return MessageDefinition(*args, **kwargs)
def test_may_be_emitted(self):
major = sys.version_info.major
minor = sys.version_info.minor
msg = self.get_message_definition()
self.assert_with_fail_msg(msg, expected=True)
msg.minversion = (major, minor - 1)
msg.maxversion = (major, minor + 1)
self.assert_with_fail_msg(msg, expected=True)
msg.minversion = (major, minor + 1)
self.assert_with_fail_msg(msg, expected=False)
msg.minversion = (major, minor - 1)
self.assert_with_fail_msg(msg, expected=True)
msg.maxversion = (major, minor - 1)
self.assert_with_fail_msg(msg, expected=False)
def test_repr(self):
msg = self.get_message_definition()
repr_str = str([msg, msg])
assert "W1234" in repr_str
assert "msg-symbol" in repr_str
expected = "[MessageDefinition:msg-symbol-one (W1234), MessageDefinition:msg-symbol-two (W1235)]"
assert str(FalseChecker().messages) == expected
def test_str(self):
msg = self.get_message_definition()
str_msg = str(msg)
assert "W1234" in str_msg
assert "msg-symbol" in str_msg
expected = """MessageDefinition:msg-symbol-one (W1234):
message one msg description"""
assert str(FalseChecker().messages[0]) == expected
def test_format_help(self):
msg = self.get_message_definition()
major = sys.version_info.major
minor = sys.version_info.minor
msg.minversion = (major, minor - 1)
msg.maxversion = (major, minor + 1)
format_str_checker_ref = msg.format_help(checkerref=False)
format_str = msg.format_help(checkerref=True)
assert str(minor - 1) in format_str
assert str(major + 1) in format_str_checker_ref
expected_format_help = """:msg-symbol-one (W1234): *message one*
msg description"""
assert FalseChecker().messages[0].format_help() == expected_format_help