|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- # 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-2017 Claudiu Popa <pcmanticore@gmail.com>
- # Copyright (c) 2015 Ionel Cristian Maries <contact@ionelmc.ro>
- # Copyright (c) 2016-2017 Derek Gustafson <degustaf@gmail.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.usefixture("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__']
-
-
- @pytest.mark.skipif(PYPY_VERSION_INFO and PYPY_VERSION_INFO < (4, 0),
- reason="On older PyPy versions, sys.executable was set to a value "
- "that is not supported by the implementation of this function. "
- "( https://bitbucket.org/pypy/pypy/commits/19e305e27e67 )")
- def test_epylint_does_not_block_on_huge_files():
- path = join(REGR_DATA, 'huge.py')
- out, err = epylint.py_run(path, return_std=True)
- assert hasattr(out, 'read')
- assert hasattr(err, 'read')
- output = out.read(10)
- assert isinstance(output, str)
-
-
- 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'
|