mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-21 16:19:21 +00:00
a1b3c9623a
Also, emit a PendingDeprecationWarning if the old names are still used, this support being removed in pylint 2.0.
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
"""Unit tests for the variables checker."""
|
|
import unittest
|
|
import sys
|
|
|
|
import astroid
|
|
from astroid import test_utils
|
|
from pylint.checkers import classes
|
|
from pylint.testutils import CheckerTestCase, Message, set_config
|
|
|
|
class VariablesCheckerTC(CheckerTestCase):
|
|
|
|
CHECKER_CLASS = classes.ClassChecker
|
|
|
|
def test_bitbucket_issue_164(self):
|
|
"""Issue 164 report a false negative for access-member-before-definition"""
|
|
n1, n2 = test_utils.extract_node("""
|
|
class MyClass1(object):
|
|
def __init__(self):
|
|
self.first += 5 #@
|
|
self.first = 0 #@
|
|
""")
|
|
message = Message('access-member-before-definition',
|
|
node=n1.target, args=('first', n2.lineno))
|
|
with self.assertAddsMessages(message):
|
|
self.walk(n1.root())
|
|
|
|
@set_config(exclude_protected=('_meta', '_manager'))
|
|
def test_exclude_protected(self):
|
|
"""Test that exclude-protected can be used to
|
|
exclude names from protected-access warning.
|
|
"""
|
|
|
|
node = astroid.parse("""
|
|
class Protected(object):
|
|
'''empty'''
|
|
def __init__(self):
|
|
self._meta = 42
|
|
self._manager = 24
|
|
self._teta = 29
|
|
OBJ = Protected()
|
|
OBJ._meta
|
|
OBJ._manager
|
|
OBJ._teta
|
|
""")
|
|
with self.assertAddsMessages(
|
|
Message('protected-access',
|
|
node=node.body[-1].value,
|
|
args='_teta')):
|
|
self.walk(node.root())
|
|
|
|
@unittest.skipUnless(sys.version_info[0] == 3,
|
|
"The test works on Python 3.")
|
|
def test_regression_non_parent_init_called_tracemalloc(self):
|
|
# This used to raise a non-parent-init-called on Pylint 1.3
|
|
# See issue https://bitbucket.org/logilab/pylint/issue/308/
|
|
# for reference.
|
|
node = test_utils.extract_node("""
|
|
from tracemalloc import Sequence
|
|
class _Traces(Sequence):
|
|
def __init__(self, traces): #@
|
|
Sequence.__init__(self)
|
|
""")
|
|
with self.assertNoMessages():
|
|
self.checker.visit_functiondef(node)
|
|
|
|
def test_super_init_not_called_regression(self):
|
|
# This should not emit a super-init-not-called
|
|
# warning. It previously did this, because
|
|
# ``next(node.infer())`` was used in that checker's
|
|
# logic and the first inferred node was an YES object,
|
|
# leading to this false positive.
|
|
node = test_utils.extract_node("""
|
|
import ctypes
|
|
|
|
class Foo(ctypes.BigEndianStructure):
|
|
def __init__(self): #@
|
|
ctypes.BigEndianStructure.__init__(self)
|
|
""")
|
|
with self.assertNoMessages():
|
|
self.checker.visit_functiondef(node)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|