o
    b                     @   s@   d Z ddlZddlmZ ddlmZmZmZ G dd deZdS )z%Unit tests for the variables checker.    N)classes)CheckerTestCaseMessage
set_configc                   @   sD   e Zd ZejZdd Zedddd Zdd Z	d	d
 Z
dd ZdS )TestVariablesCheckerc                 C   sb   t d\}}td|jd|jfd}| | | |  W d   dS 1 s*w   Y  dS )zEIssue 164 report a false negative for access-member-before-definitionz}
        class MyClass1:
          def __init__(self):
            self.first += 5 #@
            self.first = 0  #@
        zaccess-member-before-definitionfirstnodeargsN)astroidextract_noder   targetlinenoassertAddsMessageswalkroot)selfZn1Zn2message r   c/var/www/secure340b-portal/env/lib/python3.10/site-packages/pylint/test/unittest_checker_classes.pytest_bitbucket_issue_164   s   "z-TestVariablesChecker.test_bitbucket_issue_164)_meta_manager)Zexclude_protectedc                 C   sZ   t d}| td|jd jdd | |  W d   dS 1 s&w   Y  dS )zhTest that exclude-protected can be used to
        exclude names from protected-access warning.
        a  
        class Protected:
            '''empty'''
            def __init__(self):
                self._meta = 42
                self._manager = 24
                self._teta = 29
        OBJ = Protected()
        OBJ._meta
        OBJ._manager
        OBJ._teta
        protected-accessZ_tetar   N)r   parser   r   bodyvaluer   r   r   r	   r   r   r   test_exclude_protected%   s   "z+TestVariablesChecker.test_exclude_protectedc                 C   D   t d}|   | j| W d    d S 1 sw   Y  d S )Nz
        from tracemalloc import Sequence
        class _Traces(Sequence):
            def __init__(self, traces): #@
                Sequence.__init__(self)
        r   r   ZassertNoMessagescheckerZvisit_functiondefr   r   r   r   2test_regression_non_parent_init_called_tracemalloc>   s   
"zGTestVariablesChecker.test_regression_non_parent_init_called_tracemallocc                 C   r    )Nz
        import ctypes

        class Foo(ctypes.BigEndianStructure):
            def __init__(self): #@
                ctypes.BigEndianStructure.__init__(self)
        r!   r   r   r   r   %test_super_init_not_called_regressionM   s   
	"z:TestVariablesChecker.test_super_init_not_called_regressionc                 C   sT   t d}| td|jdd | j|j W d   dS 1 s#w   Y  dS )zRMake sure protect-access doesn't raise
        an exception Uninferable attributesz
        class MC():
            @property
            def nargs(self):
                return 1 if self._nargs else 2

        class Application(metaclass=MC):
            def __new__(cls):
                nargs = obj._nargs #@
        r   Z_nargsr   N)r   r   r   r   r   r"   Zvisit_attributer   r   r   r   test_uninferable_attribute_   s   "z/TestVariablesChecker.test_uninferable_attributeN)__name__
__module____qualname__r   ZClassCheckerZCHECKER_CLASSr   r   r   r#   r$   r%   r   r   r   r   r      s    
r   )	__doc__r   Zpylint.checkersr   Zpylint.testutilsr   r   r   r   r   r   r   r   <module>   s
   
