diff options
author | Ashley Whetter <ashley@awhetter.co.uk> | 2019-06-14 22:28:42 -0700 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2019-06-20 10:02:14 +0200 |
commit | 33b8185a455c1686d038258697bb93005f2441c2 (patch) | |
tree | 4a50ccac775c009436e45803129e428ed694065f /tests/message | |
parent | 7081d91f30728653000bdfc59ea85a3395f96418 (diff) | |
download | pylint-git-33b8185a455c1686d038258697bb93005f2441c2.tar.gz |
Stopped installing tests with package
Diffstat (limited to 'tests/message')
-rw-r--r-- | tests/message/unittest_message.py | 156 | ||||
-rw-r--r-- | tests/message/unittest_message_store.py | 110 |
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 |