140 lines
4 KiB
Python
140 lines
4 KiB
Python
![]() |
# Copyright (c) 2006-2011, 2013-2014 LOGILAB S.A. (Paris, FRANCE) <contact@logilab.fr>
|
||
|
# Copyright (c) 2012 FELD Boris <lothiraldan@gmail.com>
|
||
|
# Copyright (c) 2014 Google, Inc.
|
||
|
# Copyright (c) 2014 Arun Persaud <arun@nubati.net>
|
||
|
# Copyright (c) 2015-2018 Claudiu Popa <pcmanticore@gmail.com>
|
||
|
# Copyright (c) 2015 Ionel Cristian Maries <contact@ionelmc.ro>
|
||
|
# Copyright (c) 2016-2017 Derek Gustafson <degustaf@gmail.com>
|
||
|
# Copyright (c) 2018 Reverb C <reverbc@users.noreply.github.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
|
||
|
|
||
|
"""non regression tests for pylint, which requires a too specific configuration
|
||
|
to be incorporated in the automatic functional test framework
|
||
|
"""
|
||
|
|
||
|
import sys
|
||
|
import os
|
||
|
from os.path import abspath, dirname, join
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
import astroid
|
||
|
import pylint.testutils as testutils
|
||
|
from pylint import epylint
|
||
|
|
||
|
|
||
|
REGR_DATA = join(dirname(abspath(__file__)), "regrtest_data")
|
||
|
sys.path.insert(1, REGR_DATA)
|
||
|
|
||
|
try:
|
||
|
PYPY_VERSION_INFO = sys.pypy_version_info
|
||
|
except AttributeError:
|
||
|
PYPY_VERSION_INFO = None
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="module")
|
||
|
def reporter(reporter):
|
||
|
return testutils.TestReporter
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="module")
|
||
|
def disable(disable):
|
||
|
return ["I"]
|
||
|
|
||
|
|
||
|
@pytest.fixture
|
||
|
def finalize_linter(linter):
|
||
|
"""call reporter.finalize() to cleanup
|
||
|
pending messages if a test finished badly
|
||
|
"""
|
||
|
yield linter
|
||
|
linter.reporter.finalize()
|
||
|
|
||
|
|
||
|
def Equals(expected):
|
||
|
return lambda got: got == expected
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"file_name, check",
|
||
|
[
|
||
|
("package.__init__", Equals("")),
|
||
|
("precedence_test", Equals("")),
|
||
|
("import_package_subpackage_module", Equals("")),
|
||
|
("pylint.checkers.__init__", lambda x: "__path__" not in x),
|
||
|
(join(REGR_DATA, "classdoc_usage.py"), Equals("")),
|
||
|
(join(REGR_DATA, "module_global.py"), Equals("")),
|
||
|
(join(REGR_DATA, "decimal_inference.py"), Equals("")),
|
||
|
(join(REGR_DATA, "absimp", "string.py"), Equals("")),
|
||
|
(join(REGR_DATA, "bad_package"), lambda x: "Unused import missing" in x),
|
||
|
],
|
||
|
)
|
||
|
def test_package(finalize_linter, file_name, check):
|
||
|
finalize_linter.check(file_name)
|
||
|
got = finalize_linter.reporter.finalize().strip()
|
||
|
assert check(got)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"file_name",
|
||
|
[
|
||
|
join(REGR_DATA, "import_assign.py"),
|
||
|
join(REGR_DATA, "special_attr_scope_lookup_crash.py"),
|
||
|
join(REGR_DATA, "try_finally_disable_msg_crash"),
|
||
|
],
|
||
|
)
|
||
|
def test_crash(finalize_linter, file_name):
|
||
|
finalize_linter.check(file_name)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"fname", [x for x in os.listdir(REGR_DATA) if x.endswith("_crash.py")]
|
||
|
)
|
||
|
def test_descriptor_crash(fname, finalize_linter):
|
||
|
finalize_linter.check(join(REGR_DATA, fname))
|
||
|
finalize_linter.reporter.finalize().strip()
|
||
|
|
||
|
|
||
|
@pytest.fixture
|
||
|
def modify_path():
|
||
|
cwd = os.getcwd()
|
||
|
sys.path.insert(0, "")
|
||
|
yield
|
||
|
sys.path.pop(0)
|
||
|
os.chdir(cwd)
|
||
|
|
||
|
|
||
|
@pytest.mark.usefixtures("modify_path")
|
||
|
def test_check_package___init__(finalize_linter):
|
||
|
filename = "package.__init__"
|
||
|
finalize_linter.check(filename)
|
||
|
checked = list(finalize_linter.stats["by_module"].keys())
|
||
|
assert checked == [filename]
|
||
|
|
||
|
os.chdir(join(REGR_DATA, "package"))
|
||
|
finalize_linter.check("__init__")
|
||
|
checked = list(finalize_linter.stats["by_module"].keys())
|
||
|
assert checked == ["__init__"]
|
||
|
|
||
|
|
||
|
def test_pylint_config_attr():
|
||
|
mod = astroid.MANAGER.ast_from_module_name("pylint.lint")
|
||
|
pylinter = mod["PyLinter"]
|
||
|
expect = [
|
||
|
"OptionsManagerMixIn",
|
||
|
"object",
|
||
|
"MessagesHandlerMixIn",
|
||
|
"ReportsHandlerMixIn",
|
||
|
"BaseTokenChecker",
|
||
|
"BaseChecker",
|
||
|
"OptionsProviderMixIn",
|
||
|
]
|
||
|
assert [c.name for c in pylinter.ancestors()] == expect
|
||
|
assert list(astroid.Instance(pylinter).getattr("config"))
|
||
|
inferred = list(astroid.Instance(pylinter).igetattr("config"))
|
||
|
assert len(inferred) == 1
|
||
|
assert inferred[0].root().name == "optparse"
|
||
|
assert inferred[0].name == "Values"
|