
    yIfj                        d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  G d d          ZdS )    )annotationsN)	GeneratorIterator)Any)nodes)IS_PYPY	PY39_PLUS)linter)MessageTest)UnittestLinter)	ASTWalkerc                      e Zd ZU dZded<   i Zded<   ddZej        dd
            Z	ej        dddd            Z
ddZdS )CheckerTestCasezBA base testcase class for unit testing individual checker classes.r   CHECKER_CLASSzdict[str, Any]CONFIGreturnNonec                   t                      | _        |                     | j                  | _        | j                                        D ]%\  }}t          | j        j        j        ||           &| j                                         d S N)	r   r
   r   checkerr   itemssetattrconfigopen)selfkeyvalues      V/var/www/piapp/venv/lib/python3.11/site-packages/pylint/testutils/checker_test_case.pysetup_methodzCheckerTestCase.setup_method   s~    $&&))$+66+++-- 	< 	<JCDL'.U;;;;    Iterator[None]c              #  l   K   |                                  5  dV  ddd           dS # 1 swxY w Y   dS )z6Assert that no messages are added by the given method.N)assertAddsMessages)r   s    r   assertNoMessagesz CheckerTestCase.assertNoMessages#   s       $$&& 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   )--F)ignore_positionmessagesr   r%   boolGenerator[None, None, None]c             '     K   dV  | j                                         }d}d                    d |D                       p|}d                    d |D                       p|}d| d| d}t          |          t          |          k    s
J |            t	          ||          D ]\  }}	|j        |	j        k    s
J |            |j        |	j        k    s
J |            |j        |	j        k    s
J |            |j        |	j        k    s
J |            |rp|j	        |	j	        k    s
J |            |j
        |	j
        k    s
J |            t          rt          r4|j        |	j        k    s
J |            |j        |	j        k    s
J |            dS )a  Assert that exactly the given method adds the given messages.

        The list of messages must exactly match *all* the messages added by the
        method. Additionally, we check to see whether the args in each message can
        actually be substituted into the message string.

        Using the keyword argument `ignore_position`, all checks for position
        arguments (line, col_offset, ...) will be skipped. This can be used to
        just test messages for the correct node.
        NzNo message.
c              3  4   K   | ]}t          |          V  d S r   repr.0ms     r   	<genexpr>z5CheckerTestCase.assertAddsMessages.<locals>.<genexpr>:   s(      77T!WW777777r    c              3  4   K   | ]}t          |          V  d S r   r,   r.   s     r   r1   z5CheckerTestCase.assertAddsMessages.<locals>.<genexpr>;   s(      11DGG111111r    z3Expected messages did not match actual.

Expected:
z

Got:
)r
   release_messagesjoinlenzipmsg_idnodeargs
confidenceline
col_offsetr   r	   end_lineend_col_offset)
r   r%   r&   gotno_msgexpectedgot_strmsgexpected_msg
gotten_msgs
             r   r#   z"CheckerTestCase.assertAddsMessages)   s      	k**,,9977h77777A6))11S11111;V<$< <07< < < 	
 8}}C(((#((((+Hc(:(: 	U 	U$L*&**;;;;S;;;$
777777$
777777*j.CCCCSCCC $
777777*j.CCCCSCCC Ui U#,
0CCCCSCCC#2j6OOOOQTOOO	U 	Ur    r8   nodes.NodeNGc                    t          t                    }|                    | j                   |                    |           dS )z!Recursive walk on the given node.N)r   r
   add_checkerr   walk)r   r8   walkers      r   rI   zCheckerTestCase.walkS   s=    6""4<(((Dr    N)r   r   )r   r!   )r&   r   r%   r'   r   r(   )r8   rF   r   r   )__name__
__module____qualname____doc____annotations__r   r   
contextlibcontextmanagerr$   r#   rI    r    r   r   r      s         LL F       
 >C'U 'U 'U 'U 'U 'UR     r    r   )
__future__r   rP   collections.abcr   r   typingr   astroidr   pylint.constantsr   r	   #pylint.testutils.global_test_linterr
   pylint.testutils.output_liner    pylint.testutils.unittest_linterr   pylint.utilsr   r   rR   r    r   <module>r\      s   
 # " " " " "     / / / / / / / /             / / / / / / / / 6 6 6 6 6 6 4 4 4 4 4 4 ; ; ; ; ; ; " " " " " "C C C C C C C C C Cr    