mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-21 07:58:04 +00:00
140 lines
4.0 KiB
Python
140 lines
4.0 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"
|