| # 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 |
| |
| """Tests for the pylint checker in :mod:`pylint.extensions.overlapping_exceptions |
| """ |
| |
| from os.path import dirname, join |
| |
| import pytest |
| |
| from pylint.extensions.overlapping_exceptions import OverlappingExceptionsChecker |
| |
| |
| @pytest.fixture(scope="module") |
| def checker(): |
| return OverlappingExceptionsChecker |
| |
| |
| @pytest.fixture(scope="module") |
| def disable(): |
| return ["I"] |
| |
| |
| def test_overlapping_exceptions(linter): |
| test = join(dirname(__file__), "data", "overlapping_exceptions.py") |
| linter.check([test]) |
| msgs = linter.reporter.messages |
| |
| expected = [ |
| (13, "Overlapping exceptions (SomeException and SomeException are the same)"), |
| ( |
| 18, |
| "Overlapping exceptions (SomeException is an ancestor class of SubclassException)", |
| ), |
| (23, "Overlapping exceptions (SomeException and AliasException are the same)"), |
| ( |
| 28, |
| "Overlapping exceptions (AliasException is an ancestor class of SubclassException)", |
| ), |
| (34, "Overlapping exceptions (SomeException and AliasException are the same)"), |
| ( |
| 34, |
| "Overlapping exceptions (SomeException is an ancestor class of SubclassException)", |
| ), |
| ( |
| 34, |
| "Overlapping exceptions (AliasException is an ancestor class of SubclassException)", |
| ), |
| ( |
| 39, |
| "Overlapping exceptions (ArithmeticError is an ancestor class of FloatingPointError)", |
| ), |
| ( |
| 44, |
| "Overlapping exceptions (ValueError is an ancestor class of UnicodeDecodeError)", |
| ), |
| ] |
| |
| assert len(msgs) == len(expected) |
| for msg, exp in zip(msgs, expected): |
| assert msg.msg_id == "W0714" |
| assert msg.symbol == "overlapping-except" |
| assert msg.category == "warning" |
| assert (msg.line, msg.msg) == exp |
| |
| |
| def test_overlapping_exceptions_py33(linter): |
| """From Python 3.3 both IOError and socket.error are aliases for OSError.""" |
| test = join(dirname(__file__), "data", "overlapping_exceptions_py33.py") |
| linter.check([test]) |
| msgs = linter.reporter.messages |
| |
| expected = [ |
| (7, "Overlapping exceptions (IOError and OSError are the same)"), |
| (12, "Overlapping exceptions (socket.error and OSError are the same)"), |
| ( |
| 17, |
| "Overlapping exceptions (socket.error is an ancestor class of ConnectionError)", |
| ), |
| ] |
| |
| assert len(msgs) == len(expected) |
| for msg, exp in zip(msgs, expected): |
| assert msg.msg_id == "W0714" |
| assert msg.symbol == "overlapping-except" |
| assert msg.category == "warning" |
| assert (msg.line, msg.msg) == exp |