diff options
author | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2019-08-10 13:16:34 +0200 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2019-08-19 13:54:52 +0200 |
commit | 6c29ff712a93a7ff2348862c61a534ceaa4481eb (patch) | |
tree | 8334ac3be179c84cfa9fb075d26a4b3694329a71 /tests/message | |
parent | 0e143606cbcdf2b0f97b09a7eb76cdcd8e35feef (diff) | |
download | pylint-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.py | 187 | ||||
-rw-r--r-- | tests/message/unittest_message_definition_store.py | 164 |
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") |