summaryrefslogtreecommitdiff
path: root/tests/unittest_checker_imports.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittest_checker_imports.py')
-rw-r--r--tests/unittest_checker_imports.py133
1 files changed, 133 insertions, 0 deletions
diff --git a/tests/unittest_checker_imports.py b/tests/unittest_checker_imports.py
new file mode 100644
index 000000000..898be4ef5
--- /dev/null
+++ b/tests/unittest_checker_imports.py
@@ -0,0 +1,133 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015-2017 Claudiu Popa <pcmanticore@gmail.com>
+# Copyright (c) 2015 Dmitry Pribysh <dmand@yandex.ru>
+# Copyright (c) 2015 Cezar <celnazli@bitdefender.com>
+# Copyright (c) 2015 James Morgensen <james.morgensen@gmail.com>
+# Copyright (c) 2016 Derek Gustafson <degustaf@gmail.com>
+# Copyright (c) 2018 Marianna Polatoglou <mpolatoglou@bloomberg.net>
+# Copyright (c) 2018 Ville Skyttä <ville.skytta@upcloud.com>
+
+# 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
+
+"""Unit tests for the imports checker."""
+import os
+
+import astroid
+
+from pylint.checkers import imports
+from pylint.interfaces import UNDEFINED
+from pylint.testutils import CheckerTestCase, Message, set_config
+
+REGR_DATA = os.path.join(os.path.dirname(__file__), "regrtest_data", "")
+
+
+class TestImportsChecker(CheckerTestCase):
+
+ CHECKER_CLASS = imports.ImportsChecker
+
+ @set_config(
+ ignored_modules=("external_module", "fake_module.submodule", "foo", "bar")
+ )
+ def test_import_error_skipped(self):
+ """Make sure that imports do not emit an 'import-error' when the
+ module is configured to be ignored."""
+
+ node = astroid.extract_node(
+ """
+ from external_module import anything
+ """
+ )
+ with self.assertNoMessages():
+ self.checker.visit_importfrom(node)
+
+ node = astroid.extract_node(
+ """
+ from external_module.another_module import anything
+ """
+ )
+ with self.assertNoMessages():
+ self.checker.visit_importfrom(node)
+
+ node = astroid.extract_node(
+ """
+ import external_module
+ """
+ )
+ with self.assertNoMessages():
+ self.checker.visit_import(node)
+
+ node = astroid.extract_node(
+ """
+ from fake_module.submodule import anything
+ """
+ )
+ with self.assertNoMessages():
+ self.checker.visit_importfrom(node)
+
+ node = astroid.extract_node(
+ """
+ from fake_module.submodule.deeper import anything
+ """
+ )
+ with self.assertNoMessages():
+ self.checker.visit_importfrom(node)
+
+ node = astroid.extract_node(
+ """
+ import foo, bar
+ """
+ )
+ msg = Message("multiple-imports", node=node, args="foo, bar")
+ with self.assertAddsMessages(msg):
+ self.checker.visit_import(node)
+
+ node = astroid.extract_node(
+ """
+ import foo
+ import bar
+ """
+ )
+ with self.assertNoMessages():
+ self.checker.visit_import(node)
+
+ def test_reimported_same_line(self):
+ """
+ Test that duplicate imports on single line raise 'reimported'.
+ """
+ node = astroid.extract_node("from time import sleep, sleep, time")
+ msg = Message(msg_id="reimported", node=node, args=("sleep", 1))
+ with self.assertAddsMessages(msg):
+ self.checker.visit_importfrom(node)
+
+ def test_relative_beyond_top_level(self):
+ module = astroid.MANAGER.ast_from_module_name("beyond_top", REGR_DATA)
+ import_from = module.body[0]
+
+ msg = Message(msg_id="relative-beyond-top-level", node=import_from)
+ with self.assertAddsMessages(msg):
+ self.checker.visit_importfrom(import_from)
+ with self.assertNoMessages():
+ self.checker.visit_importfrom(module.body[1])
+ with self.assertNoMessages():
+ self.checker.visit_importfrom(module.body[2].body[0])
+
+ def test_wildcard_import_init(self):
+ module = astroid.MANAGER.ast_from_module_name("init_wildcard", REGR_DATA)
+ import_from = module.body[0]
+
+ with self.assertNoMessages():
+ self.checker.visit_importfrom(import_from)
+
+ def test_wildcard_import_non_init(self):
+ module = astroid.MANAGER.ast_from_module_name("wildcard", REGR_DATA)
+ import_from = module.body[0]
+
+ msg = Message(
+ msg_id="wildcard-import",
+ node=import_from,
+ args="empty",
+ confidence=UNDEFINED,
+ )
+ with self.assertAddsMessages(msg):
+ self.checker.visit_importfrom(import_from)