summaryrefslogtreecommitdiff
path: root/tests/message
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2019-08-10 13:16:34 +0200
committerClaudiu Popa <pcmanticore@gmail.com>2019-08-19 13:54:52 +0200
commit6c29ff712a93a7ff2348862c61a534ceaa4481eb (patch)
tree8334ac3be179c84cfa9fb075d26a4b3694329a71 /tests/message
parent0e143606cbcdf2b0f97b09a7eb76cdcd8e35feef (diff)
downloadpylint-git-6c29ff712a93a7ff2348862c61a534ceaa4481eb.tar.gz
[pylint.message] Simplification with 1-1 link between symbol and msgid
Also add a lot of unit tests.
Diffstat (limited to 'tests/message')
-rw-r--r--tests/message/unittest_message.py187
-rw-r--r--tests/message/unittest_message_definition_store.py164
2 files changed, 190 insertions, 161 deletions
diff --git a/tests/message/unittest_message.py b/tests/message/unittest_message.py
index d11eb3681..205d06dec 100644
--- a/tests/message/unittest_message.py
+++ b/tests/message/unittest_message.py
@@ -3,141 +3,54 @@
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/master/COPYING
-import pytest
-
-from pylint.checkers import BaseChecker
-from pylint.exceptions import InvalidMessageError
-from pylint.message import MessageDefinition, MessageDefinitionStore
-
-
-@pytest.fixture
-def store():
- return MessageDefinitionStore()
-
-
-@pytest.mark.parametrize(
- "messages,expected",
- [
- (
- {
- "W1234": ("message one", "msg-symbol-one", "msg description"),
- "W4321": ("message two", "msg-symbol-two", "msg description"),
- },
- r"Inconsistent checker part in message id 'W4321' (expected 'x12xx' because we already had ['W1234']).",
- ),
- (
- {
- "W1233": (
- "message two",
- "msg-symbol-two",
- "msg description",
- {"old_names": [("W1234", "old-symbol")]},
- ),
- "W1234": ("message one", "msg-symbol-one", "msg description"),
- },
- "Message id 'W1234' cannot have both 'msg-symbol-one' and 'old-symbol' as symbolic name.",
- ),
- (
- {
- "W1234": ("message one", "msg-symbol-one", "msg description"),
- "W1235": (
- "message two",
- "msg-symbol-two",
- "msg description",
- {"old_names": [("W1234", "old-symbol")]},
- ),
- },
- "Message id 'W1234' cannot have both 'msg-symbol-one' and 'old-symbol' as symbolic name.",
- ),
- (
- {
- "W1234": (
- "message one",
- "msg-symbol-one",
- "msg description",
- {"old_names": [("W1201", "old-symbol-one")]},
- ),
- "W1235": (
- "message two",
- "msg-symbol-two",
- "msg description",
- {"old_names": [("W1201", "old-symbol-two")]},
- ),
- },
- "Message id 'W1201' cannot have both 'old-symbol-one' and 'old-symbol-two' as symbolic name.",
- ),
- (
- {
- "W1234": ("message one", "msg-symbol", "msg description"),
- "W1235": ("message two", "msg-symbol", "msg description"),
- },
- "Message symbol 'msg-symbol' cannot be used for 'W1234' and 'W1235' at the same time.",
- ),
- (
- {
- "W1233": (
- "message two",
- "msg-symbol-two",
- "msg description",
- {"old_names": [("W1230", "msg-symbol-one")]},
- ),
- "W1234": ("message one", "msg-symbol-one", "msg description"),
- },
- "Message symbol 'msg-symbol-one' cannot be used for 'W1230' and 'W1234' at the same time.",
- ),
- (
- {
- "W1234": ("message one", "msg-symbol-one", "msg description"),
- "W1235": (
- "message two",
- "msg-symbol-two",
- "msg description",
- {"old_names": [("W1230", "msg-symbol-one")]},
- ),
- },
- "Message symbol 'msg-symbol-one' cannot be used for 'W1234' and 'W1235' at the same time.",
- ),
- (
- {
- "W1234": (
- "message one",
- "msg-symbol-one",
- "msg description",
- {"old_names": [("W1230", "old-symbol-one")]},
- ),
- "W1235": (
- "message two",
- "msg-symbol-two",
- "msg description",
- {"old_names": [("W1231", "old-symbol-one")]},
- ),
- },
- "Message symbol 'old-symbol-one' cannot be used for 'W1230' and 'W1235' at the same time.",
- ),
- ],
-)
-def test_register_error(store, messages, expected):
- class Checker(BaseChecker):
- name = "checker"
- msgs = messages
-
- with pytest.raises(InvalidMessageError) as cm:
- store.register_messages_from_checker(Checker())
- assert str(cm.value) == expected
-
-
-def test_register_error_new_id_duplicate_of_new(store):
- class CheckerOne(BaseChecker):
- name = "checker_one"
- msgs = {"W1234": ("message one", "msg-symbol-one", "msg description.")}
-
- class CheckerTwo(BaseChecker):
- name = "checker_two"
- msgs = {"W1234": ("message two", "msg-symbol-two", "another msg description.")}
-
- store.register_messages_from_checker(CheckerOne())
- test_register_error(
- store,
- {"W1234": ("message two", "msg-symbol-two", "another msg description.")},
- "Message id 'W1234' cannot have both 'msg-symbol-one' and 'msg-symbol-two' as symbolic name.",
+from pylint.message import Message
+
+from .generic_fixtures import message_definitions, store
+
+
+def test_new_message(message_definitions):
+ def build_message(message_definition, location_value):
+ return Message(
+ symbol=message_definition.symbol,
+ msg_id=message_definition.msgid,
+ location=[
+ location_value["abspath"],
+ location_value["path"],
+ location_value["module"],
+ location_value["obj"],
+ location_value["line"],
+ location_value["column"],
+ ],
+ msg=message_definition.msg,
+ confidence="high",
+ )
+
+ template = "{path}:{line}:{column}: {msg_id}: {msg} ({symbol})"
+ for message_definition in message_definitions:
+ if message_definition.msgid == "E1234":
+ e1234_message_definition = message_definition
+ if message_definition.msgid == "W1234":
+ w1234_message_definition = message_definition
+ e1234_location_values = {
+ "abspath": "1",
+ "path": "2",
+ "module": "3",
+ "obj": "4",
+ "line": "5",
+ "column": "6",
+ }
+ w1234_location_values = {
+ "abspath": "7",
+ "path": "8",
+ "module": "9",
+ "obj": "10",
+ "line": "11",
+ "column": "12",
+ }
+ expected = (
+ "2:5:6: E1234: Duplicate keyword argument %r in %s call (duplicate-keyword-arg)"
)
+ e1234 = build_message(e1234_message_definition, e1234_location_values)
+ w1234 = build_message(w1234_message_definition, w1234_location_values)
+ assert e1234.format(template) == expected
+ assert w1234.format(template) == "8:11:12: W1234: message (msg-symbol)"
diff --git a/tests/message/unittest_message_definition_store.py b/tests/message/unittest_message_definition_store.py
index c656781fe..3a4ebf349 100644
--- a/tests/message/unittest_message_definition_store.py
+++ b/tests/message/unittest_message_definition_store.py
@@ -10,32 +10,141 @@ import pytest
from pylint.checkers import BaseChecker
from pylint.exceptions import InvalidMessageError, UnknownMessageError
-from pylint.message import MessageDefinition, MessageDefinitionStore
+from pylint.message import MessageDefinition
+
+from .generic_fixtures import empty_store, store
+
+
+@pytest.mark.parametrize(
+ "messages,expected",
+ [
+ (
+ {
+ "W1234": ("message one", "msg-symbol-one", "msg description"),
+ "W4321": ("message two", "msg-symbol-two", "msg description"),
+ },
+ r"Inconsistent checker part in message id 'W4321' (expected 'x12xx' because we already had ['W1234']).",
+ ),
+ (
+ {
+ "W1233": (
+ "message two",
+ "msg-symbol-two",
+ "msg description",
+ {"old_names": [("W1234", "old-symbol")]},
+ ),
+ "W1234": ("message one", "msg-symbol-one", "msg description"),
+ },
+ "Message id 'W1234' cannot have both 'msg-symbol-one' and 'old-symbol' as symbolic name.",
+ ),
+ (
+ {
+ "W1234": ("message one", "msg-symbol-one", "msg description"),
+ "W1235": (
+ "message two",
+ "msg-symbol-two",
+ "msg description",
+ {"old_names": [("W1234", "old-symbol")]},
+ ),
+ },
+ "Message id 'W1234' cannot have both 'msg-symbol-one' and 'old-symbol' as symbolic name.",
+ ),
+ (
+ {
+ "W1234": (
+ "message one",
+ "msg-symbol-one",
+ "msg description",
+ {"old_names": [("W1201", "old-symbol-one")]},
+ ),
+ "W1235": (
+ "message two",
+ "msg-symbol-two",
+ "msg description",
+ {"old_names": [("W1201", "old-symbol-two")]},
+ ),
+ },
+ "Message id 'W1201' cannot have both 'old-symbol-one' and 'old-symbol-two' as symbolic name.",
+ ),
+ (
+ {
+ "W1234": ("message one", "msg-symbol", "msg description"),
+ "W1235": ("message two", "msg-symbol", "msg description"),
+ },
+ "Message symbol 'msg-symbol' cannot be used for 'W1234' and 'W1235' at the same time. "
+ "If you're creating an 'old_names' use 'old-msg-symbol' as the old symbol.",
+ ),
+ (
+ {
+ "W1233": (
+ "message two",
+ "msg-symbol-two",
+ "msg description",
+ {"old_names": [("W1230", "msg-symbol-one")]},
+ ),
+ "W1234": ("message one", "msg-symbol-one", "msg description"),
+ },
+ "Message symbol 'msg-symbol-one' cannot be used for 'W1230' and 'W1234' at the same time."
+ " If you're creating an 'old_names' use 'old-msg-symbol-one' as the old symbol.",
+ ),
+ (
+ {
+ "W1234": ("message one", "msg-symbol-one", "msg description"),
+ "W1235": (
+ "message two",
+ "msg-symbol-two",
+ "msg description",
+ {"old_names": [("W1230", "msg-symbol-one")]},
+ ),
+ },
+ "Message symbol 'msg-symbol-one' cannot be used for 'W1230' and 'W1234' at the same time. "
+ "If you're creating an 'old_names' use 'old-msg-symbol-one' as the old symbol.",
+ ),
+ (
+ {
+ "W1234": (
+ "message one",
+ "msg-symbol-one",
+ "msg description",
+ {"old_names": [("W1230", "old-symbol-one")]},
+ ),
+ "W1235": (
+ "message two",
+ "msg-symbol-two",
+ "msg description",
+ {"old_names": [("W1231", "old-symbol-one")]},
+ ),
+ },
+ "Message symbol 'old-symbol-one' cannot be used for 'W1230' and 'W1231' at the same time. "
+ "If you're creating an 'old_names' use 'old-old-symbol-one' as the old symbol.",
+ ),
+ ],
+)
+def test_register_error(empty_store, messages, expected):
+ class Checker(BaseChecker):
+ name = "checker"
+ msgs = messages
+ with pytest.raises(InvalidMessageError) as cm:
+ empty_store.register_messages_from_checker(Checker())
+ assert str(cm.value) == expected
-@pytest.fixture
-def store():
- store = MessageDefinitionStore()
- class Checker(BaseChecker):
- name = "achecker"
- msgs = {
- "W1234": (
- "message",
- "msg-symbol",
- "msg description.",
- {"old_names": [("W0001", "old-symbol")]},
- ),
- "E1234": (
- "Duplicate keyword argument %r in %s call",
- "duplicate-keyword-arg",
- "Used when a function call passes the same keyword argument multiple times.",
- {"maxversion": (2, 6)},
- ),
- }
-
- store.register_messages_from_checker(Checker())
- return store
+def test_register_error_new_id_duplicate_of_new(empty_store):
+ class CheckerOne(BaseChecker):
+ name = "checker_one"
+ msgs = {"W1234": ("message one", "msg-symbol-one", "msg description.")}
+
+ class CheckerTwo(BaseChecker):
+ name = "checker_two"
+ msgs = {"W1234": ("message two", "msg-symbol-two", "another msg description.")}
+
+ empty_store.register_messages_from_checker(CheckerOne())
+ test_register_error(
+ empty_store,
+ {"W1234": ("message two", "msg-symbol-two", "another msg description.")},
+ "Message id 'W1234' cannot have both 'msg-symbol-one' and 'msg-symbol-two' as symbolic name.",
+ )
def test_format_help(capsys, store):
@@ -70,7 +179,14 @@ class TestMessageDefinitionStore(object):
assert desc == msg.format_help(checkerref=checkerref)
def test_check_message_id(self, store):
- assert isinstance(store.get_message_definitions("W1234")[0], MessageDefinition)
+ w1234 = store.get_message_definitions("W1234")[0]
+ w0001 = store.get_message_definitions("W0001")[0]
+ e1234 = store.get_message_definitions("E1234")[0]
+ old_symbol = store.get_message_definitions("old-symbol")[0]
+ assert isinstance(w1234, MessageDefinition)
+ assert isinstance(e1234, MessageDefinition)
+ assert w1234 == w0001
+ assert w1234 == old_symbol
with pytest.raises(UnknownMessageError):
store.get_message_definitions("YB12")