B
    A!p\K6                 @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlZG dd deZdd Zd	d
 Zejdd Zejdddddfdddddgifdddfddddddgifddfdddddgifdddddgifddfdd dd!fddddd"gifddd#fdddddd"gifdd$fddddd%gifddddd&gifdd'fgd(d) Zd*d+ Zejd,d-d.gd/d0 Zd1d2 Zd3d4 ZG d5d6 d6ZdS )7    N)utils)check_messagesget_node_last_lineno)InvalidMessageErrorc               @   s<   e Zd ZG dd deZG dd deZdd Zdd Zd	S )
TestPyLintASTWalkerc               @   s   e Zd Zdd Zdd ZdS )zTestPyLintASTWalker.MockLinterc             C   s
   || _ d S )N)_msgs)selfmsgs r
   9lib/python3.7/site-packages/pylint/test/unittest_utils.py__init__!   s    z'TestPyLintASTWalker.MockLinter.__init__c             C   s   | j |dS )NT)r   get)r   msgidr
   r
   r   is_message_enabled$   s    z1TestPyLintASTWalker.MockLinter.is_message_enabledN)__name__
__module____qualname__r   r   r
   r
   r
   r   
MockLinter    s   r   c               @   sV   e Zd Zdd Zeddd Zeddd Zedd	d
d Zeddd ZdS )zTestPyLintASTWalker.Checkerc             C   s   t  | _d S )N)setcalled)r   r
   r
   r   r   (   s    z$TestPyLintASTWalker.Checker.__init__zfirst-messagec             C   s   | j d d S )Nmodule)r   add)r   r   r
   r
   r   visit_module+   s    z(TestPyLintASTWalker.Checker.visit_modulezsecond-messagec             C   s   t d S )N)NotImplementedError)r   r   r
   r
   r   
visit_call/   s    z&TestPyLintASTWalker.Checker.visit_callzthird-messagec             C   s   | j d d S )N
assignname)r   r   )r   r   r
   r
   r   visit_assignname3   s    z,TestPyLintASTWalker.Checker.visit_assignnamec             C   s   t d S )N)r   )r   r   r
   r
   r   leave_assignname7   s    z,TestPyLintASTWalker.Checker.leave_assignnameN)	r   r   r   r   r   r   r   r   r   r
   r
   r
   r   Checker'   s
   r   c             C   sT   |  dddd}t|}|  }|| |td ddh|jksPt	d S )NTF)zfirst-messagezsecond-messagezthird-messagez
x = func()r   r   )
r   r   PyLintASTWalkerr   add_checkerwalkastroidparser   AssertionError)r   linterwalkercheckerr
   r
   r   test_check_messages;   s    

z'TestPyLintASTWalker.test_check_messagesc          	   C   sx   G dd dt }| ddi}t|}| }|| tjdd* td |t	
d |jrjtW d Q R X d S )Nc               @   s$   e Zd Zdd Zeddd ZdS )z<TestPyLintASTWalker.test_deprecated_methods.<locals>.Checkerc             S   s
   d| _ d S )NF)r   )r   r
   r
   r   r   G   s    zETestPyLintASTWalker.test_deprecated_methods.<locals>.Checker.__init__zfirst-messagec             S   s
   d| _ d S )NT)r   )r   noder
   r
   r   visit_assnameJ   s    zJTestPyLintASTWalker.test_deprecated_methods.<locals>.Checker.visit_assnameN)r   r   r   r   r   r*   r
   r
   r
   r   r   F   s   r   zfirst-messageT)recordalwayszx = 1)objectr   r   r   r    warningscatch_warningssimplefilterr!   r"   r#   r   r$   )r   r   r%   r&   r'   r
   r
   r   test_deprecated_methodsE   s    


z+TestPyLintASTWalker.test_deprecated_methodsN)r   r   r   r-   r   r   r(   r1   r
   r
   r
   r   r      s   
r   c              C   s8   t dt dg} td| s$ttd| s4td S )Nz.*enchilada.*zunittest_.*zunittest_utils.pyzcheese_enchiladas.xml)recompiler   _basename_in_blacklist_rer$   )patternsr
   r
   r   $test__basename_in_blacklist_re_matchY   s    r6   c              C   s8   t dt dg} td| r$ttd| r4td S )Nz.*enchilada.*zunittest_.*ztest_utils.pyzenchilad.py)r2   r3   r   r4   r$   )r5   r
   r
   r   &test__basename_in_blacklist_re_nomatch_   s    r7   c               C   s   t  S )N)r   ZMessagesStorer
   r
   r
   r   storee   s    r8   zmessages,expected)zmessage onezmsg-symbol-onezmsg description)zmessage twozmsg-symbol-twozmsg description)W1234ZW4321zdInconsistent checker part in message id 'W4321' (expected 'x12xx' because we already had ['W1234']).zmessage twozmsg-symbol-twozmsg descriptionZ	old_names)r9   z
old-symbol)ZW1233r9   zWMessage id 'W1234' cannot have both 'msg-symbol-one' and 'old-symbol' as symbolic name.)r9   ZW1235zmessage onezmsg-symbol-one)W1201zold-symbol-one)r:   zold-symbol-twoz[Message id 'W1201' cannot have both 'old-symbol-one' and 'old-symbol-two' as symbolic name.)zmessage onez
msg-symbolzmsg description)zmessage twoz
msg-symbolzmsg descriptionzTMessage symbol 'msg-symbol' cannot be used for 'W1234' and 'W1235' at the same time.)W1230zmsg-symbol-onezXMessage symbol 'msg-symbol-one' cannot be used for 'W1230' and 'W1234' at the same time.zXMessage symbol 'msg-symbol-one' cannot be used for 'W1234' and 'W1235' at the same time.)r;   zold-symbol-one)ZW1231zold-symbol-onezXMessage symbol 'old-symbol-one' cannot be used for 'W1230' and 'W1235' at the same time.c          	      sL   G  fdddt }tt}| |  W d Q R X t|j|ksHtd S )Nc                   s   e Zd ZdZ ZdS )z$test_register_error.<locals>.Checkerr'   N)r   r   r   namer	   r
   )messagesr
   r   r      s   r   )r-   pytestraisesr   register_messages_from_checkerstrvaluer$   )r8   r=   expectedr   cmr
   )r=   r   test_register_errorj   s    frE   c             C   s@   G dd dt }G dd dt }| |  t| ddid d S )Nc               @   s   e Zd ZdZddiZdS )z?test_register_error_new_id_duplicate_of_new.<locals>.CheckerOneZchecker_oner9   )zmessage onezmsg-symbol-onezmsg description.N)r   r   r   r<   r	   r
   r
   r
   r   
CheckerOne   s   rF   c               @   s   e Zd ZdZddiZdS )z?test_register_error_new_id_duplicate_of_new.<locals>.CheckerTwoZchecker_twor9   )zmessage twozmsg-symbol-twozanother msg description.N)r   r   r   r<   r	   r
   r
   r
   r   
CheckerTwo   s   rG   r9   )zmessage twozmsg-symbol-twozanother msg description.z[Message id 'W1234' cannot have both 'msg-symbol-one' and 'msg-symbol-two' as symbolic name.)r-   r@   rE   )r8   rF   rG   r
   r
   r   +test_register_error_new_id_duplicate_of_new   s    rH   zmsgid,expected)ZQ1234zBad message type Q in 'Q1234')ZW12345zInvalid message id 'W12345'c          	   C   s@   t t}td| dddd W d Q R X t|j|ks<td S )Nr'   msgZdescrZsymbolZscope)r>   r?   r   r   ZMessageDefinitionrA   rB   r$   )r   rC   rD   r
   r
   r    test_create_invalid_message_type   s    rJ   c              C   s2   t d} t| d}| }|ddgks.tdS )z\decoding_stream should fall back to *some* decoding when given an
    unknown encoding.
    s   foo
barzgarbage-encodingzfoo
ZbarN)ioBytesIOr   decoding_stream	readlinesr$   )	binary_iostreamZretr
   r
   r   %test_decoding_stream_unknown_encoding   s    
rQ   c              C   s0   t dd} t| d}| dks,td S )Nu   €cp1252)rK   rL   encoder   rM   readr$   )rO   rP   r
   r
   r   #test_decoding_stream_known_encoding  s    rU   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestGetNodeLastLinenoc             C   s   t d}t|dkstd S )Nz
            pass
           )r"   extract_noder   r$   )r   r)   r
   r
   r    test_get_node_last_lineno_simple	  s    z6TestGetNodeLastLineno.test_get_node_last_lineno_simplec             C   s   t d}t|dkstd S )NzP
            if True:
                print(1)
                pass
               )r"   rX   r   r$   )r   r)   r
   r
   r   #test_get_node_last_lineno_if_simple  s    z9TestGetNodeLastLineno.test_get_node_last_lineno_if_simplec             C   s   t d}t|dkstd S )Nz
            if True:
                print(1)
            elif False:
                print(2)
            else:
                print(3)
               )r"   rX   r   r$   )r   r)   r
   r
   r   (test_get_node_last_lineno_if_elseif_else  s    z>TestGetNodeLastLineno.test_get_node_last_lineno_if_elseif_elsec             C   s   t d}t|dkstd S )Nz>
            while True:
                print(1)
               )r"   rX   r   r$   )r   r)   r
   r
   r   test_get_node_last_lineno_while(  s    z5TestGetNodeLastLineno.test_get_node_last_lineno_whilec             C   s   t d}t|dkstd S )Nzi
            while True:
                print(1)
            else:
                print(2)
               )r"   rX   r   r$   )r   r)   r
   r
   r   $test_get_node_last_lineno_while_else1  s    z:TestGetNodeLastLineno.test_get_node_last_lineno_while_elsec             C   s   t d}t|dkstd S )NzH
            for x in range(0, 5):
                print(1)
            r^   )r"   rX   r   r$   )r   r)   r
   r
   r   test_get_node_last_lineno_for<  s    z3TestGetNodeLastLineno.test_get_node_last_lineno_forc             C   s   t d}t|dkstd S )Nzs
            for x in range(0, 5):
                print(1)
            else:
                print(2)
            r`   )r"   rX   r   r$   )r   r)   r
   r
   r   "test_get_node_last_lineno_for_elseE  s    z8TestGetNodeLastLineno.test_get_node_last_lineno_for_elsec             C   s   t d}t|dkstd S )Nz
            try:
                print(1)
            except ValueError:
                print(2)
            except Exception:
                print(3)
            r\   )r"   rX   r   r$   )r   r)   r
   r
   r   test_get_node_last_lineno_tryP  s    z3TestGetNodeLastLineno.test_get_node_last_lineno_tryc             C   s   t d}t|dkstd S )Nz
            try:
                print(1)
            except Exception:
                print(2)
                print(3)
            else:
                print(4)
               )r"   rX   r   r$   )r   r)   r
   r
   r   )test_get_node_last_lineno_try_except_else]  s    	z?TestGetNodeLastLineno.test_get_node_last_lineno_try_except_elsec             C   s   t d}t|dkstd S )Nz
            try:
                print(1)
            except Exception:
                print(2)
            finally:
                print(4)
            r\   )r"   rX   r   r$   )r   r)   r
   r
   r   ,test_get_node_last_lineno_try_except_finallyk  s    zBTestGetNodeLastLineno.test_get_node_last_lineno_try_except_finallyc             C   s   t d}t|dkstd S )Nz
            try:
                print(1)
            except Exception:
                print(2)
            else:
                print(3)
            finally:
                print(4)
            	   )r"   rX   r   r$   )r   r)   r
   r
   r   1test_get_node_last_lineno_try_except_else_finallyx  s    
zGTestGetNodeLastLineno.test_get_node_last_lineno_try_except_else_finallyc             C   s   t d}t|dkstd S )NzT
            with x as y:
                print(1)
                pass
            rZ   )r"   rX   r   r$   )r   r)   r
   r
   r   test_get_node_last_lineno_with  s    z4TestGetNodeLastLineno.test_get_node_last_lineno_withc             C   s   t d}t|dkstd S )NzW
            def x(a, b):
                print(a, b)
                pass
            rZ   )r"   rX   r   r$   )r   r)   r
   r
   r    test_get_node_last_lineno_method  s    z6TestGetNodeLastLineno.test_get_node_last_lineno_methodc             C   s   t d}t|dkstd S )Nzl
            @decor()
            def x(a, b):
                print(a, b)
                pass
            r`   )r"   rX   r   r$   )r   r)   r
   r
   r   #test_get_node_last_lineno_decorator  s    z9TestGetNodeLastLineno.test_get_node_last_lineno_decoratorc             C   s   t d}t|dkstd S )Nz
            class C(object):
                CONST = True

                def x(self, b):
                    print(b)

                def y(self):
                    pass
                    pass
            
   )r"   rX   r   r$   )r   r)   r
   r
   r   test_get_node_last_lineno_class  s    z5TestGetNodeLastLineno.test_get_node_last_lineno_classc             C   s   t d}t|dkstd S )Na  
            class C(object):
                CONST = True

                def y(self):
                    try:
                        pass
                    except:
                        pass
                    finally:
                        pass
               )r"   rX   r   r$   )r   r)   r
   r
   r   "test_get_node_last_lineno_combined  s    z8TestGetNodeLastLineno.test_get_node_last_lineno_combinedN)r   r   r   rY   r[   r]   r_   ra   rb   rc   rd   rf   rg   ri   rj   rk   rl   rn   rp   r
   r
   r
   r   rV     s    
		

rV   )rK   r2   r.   r"   Zpylintr   Zpylint.checkers.utilsr   r   Zpylint.exceptionsr   r>   r-   r   r6   r7   Zfixturer8   ZmarkZparametrizerE   rH   rJ   rQ   rU   rV   r
   r
   r
   r   <module>   s   :



	