summaryrefslogtreecommitdiff
path: root/tests/message
diff options
context:
space:
mode:
authorAshley Whetter <ashley@awhetter.co.uk>2019-06-14 22:28:42 -0700
committerClaudiu Popa <pcmanticore@gmail.com>2019-06-20 10:02:14 +0200
commit33b8185a455c1686d038258697bb93005f2441c2 (patch)
tree4a50ccac775c009436e45803129e428ed694065f /tests/message
parent7081d91f30728653000bdfc59ea85a3395f96418 (diff)
downloadpylint-git-33b8185a455c1686d038258697bb93005f2441c2.tar.gz
Stopped installing tests with package
Diffstat (limited to 'tests/message')
-rw-r--r--tests/message/unittest_message.py156
-rw-r--r--tests/message/unittest_message_store.py110
2 files changed, 266 insertions, 0 deletions
diff --git a/tests/message/unittest_message.py b/tests/message/unittest_message.py
new file mode 100644
index 000000000..7420ca273
--- /dev/null
+++ b/tests/message/unittest_message.py
@@ -0,0 +1,156 @@
+# -*- coding: utf-8 -*-
+
+# 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, MessagesStore
+
+
+@pytest.fixture
+def store():
+ return MessagesStore()
+
+
+@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.",
+ )
+
+
+@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):
+ with pytest.raises(InvalidMessageError) as cm:
+ MessageDefinition("checker", msgid, "msg", "descr", "symbol", "scope")
+ assert str(cm.value) == expected
diff --git a/tests/message/unittest_message_store.py b/tests/message/unittest_message_store.py
new file mode 100644
index 000000000..053bfca50
--- /dev/null
+++ b/tests/message/unittest_message_store.py
@@ -0,0 +1,110 @@
+# -*- coding: utf-8 -*-
+
+# 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
+
+from contextlib import redirect_stdout
+from io import StringIO
+
+import pytest
+
+from pylint.checkers import BaseChecker
+from pylint.exceptions import InvalidMessageError, UnknownMessageError
+from pylint.message import MessageDefinition, MessagesStore
+
+
+@pytest.fixture
+def store():
+ store = MessagesStore()
+
+ 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
+
+
+class TestMessagesStore(object):
+ def _compare_messages(self, desc, msg, checkerref=False):
+ assert desc == msg.format_help(checkerref=checkerref)
+
+ def test_check_message_id(self, store):
+ assert isinstance(store.get_message_definitions("W1234")[0], MessageDefinition)
+ with pytest.raises(UnknownMessageError):
+ store.get_message_definitions("YB12")
+
+ def test_message_help(self, store):
+ message_definition = store.get_message_definitions("W1234")[0]
+ self._compare_messages(
+ """:msg-symbol (W1234): *message*
+ msg description. This message belongs to the achecker checker.""",
+ message_definition,
+ checkerref=True,
+ )
+ self._compare_messages(
+ """:msg-symbol (W1234): *message*
+ msg description.""",
+ message_definition,
+ checkerref=False,
+ )
+
+ def test_message_help_minmax(self, store):
+ # build the message manually to be python version independent
+ message_definition = store.get_message_definitions("E1234")[0]
+ self._compare_messages(
+ """:duplicate-keyword-arg (E1234): *Duplicate keyword argument %r in %s call*
+ Used when a function call passes the same keyword argument multiple times.
+ This message belongs to the achecker checker. It can't be emitted when using
+ Python >= 2.6.""",
+ message_definition,
+ checkerref=True,
+ )
+ self._compare_messages(
+ """:duplicate-keyword-arg (E1234): *Duplicate keyword argument %r in %s call*
+ Used when a function call passes the same keyword argument multiple times.
+ This message can't be emitted when using Python >= 2.6.""",
+ message_definition,
+ checkerref=False,
+ )
+
+ def test_list_messages(self, store):
+ output = StringIO()
+ with redirect_stdout(output):
+ store.list_messages()
+ # cursory examination of the output: we're mostly testing it completes
+ assert ":msg-symbol (W1234): *message*" in output.getvalue()
+
+ def test_add_renamed_message(self, store):
+ store.add_renamed_message("W1234", "old-bad-name", "msg-symbol")
+ assert "msg-symbol" == store.get_message_definitions("W1234")[0].symbol
+ assert "msg-symbol" == store.get_message_definitions("old-bad-name")[0].symbol
+
+ def test_add_renamed_message_invalid(self, store):
+ # conflicting message ID
+ with pytest.raises(InvalidMessageError) as cm:
+ store.add_renamed_message(
+ "W1234", "old-msg-symbol", "duplicate-keyword-arg"
+ )
+ expected = (
+ "Message id 'W1234' cannot have both 'msg-symbol' and 'old-msg-symbol' "
+ "as symbolic name."
+ )
+ assert str(cm.value) == expected
+
+ def test_renamed_message_register(self, store):
+ assert "msg-symbol" == store.get_message_definitions("W0001")[0].symbol
+ assert "msg-symbol" == store.get_message_definitions("old-symbol")[0].symbol