B
    A!p\                 @   sX  d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	m
Z
 ejdkZdejdd  ZeeeedZeeeed	ZdZd
ZedZejdkrdndZdd ZG dd deZG dd deZdd Zejjdeedd eeD ddd ZedkrTdejkr&dZej d e!ejd krHejd  Zejd = e"ej dS )!z*functional/non regression tests for pylint    N)abspathdirnamejoin)_get_tests_infolinter)   r   z%d%d%dr   inputZmessagesFz^func_i\d\d\d\d$)r   r   ' c             C   s   d|j d|jf S )zFfunction used to replace default __str__ method of exception instanceszin %s
:: %sz, )filer   args)selfex r   4lib/python3.7/site-packages/pylint/test/test_func.pyexception_str(   s    r   c               @   sT   e Zd ZdZdZeZeZdZdZdZ	dZ
dd Zdd Zdd	 Zd
d Zdd ZdS )LintTestUsingModuleNr   modulec                s>    j d  j g} jr0| fdd jD 7 } | d S )N.c                s&   g | ]\}} j d |dd  qS )z.%sz.pyr
   )packagereplace).0name_)r   r   r   
<listcomp>@   s   z;LintTestUsingModule._test_functionality.<locals>.<listcomp>)r   r   depends_test)r   tocheckr   )r   r   _test_functionality;   s    
z'LintTestUsingModule._test_functionalityc             C   s$   |    d | d ks td S )N
)_get_expectedstripAssertionError)r   gotr   r   r   _check_resultE   s    z!LintTestUsingModule._check_resultc          
   C   s   t | jr| jd n| jd y| j| W nD tk
rz } z&| jj	  ||_
t| t|_ W d d }~X Y nX | | jj	  d S )NI)INFO_TEST_RGXmatchr   r   enabledisableZcheck	ExceptionZreporterfinalizer   printr   __str__r$   )r   r   r   r   r   r   r   H   s    zLintTestUsingModule._testc             C   s   | j d S )NZfunc_noerror_)r   
startswith)r   r   r   r   _has_outputX   s    zLintTestUsingModule._has_outputc          	   C   s<   |   r4| jr4t| jd}|  d S Q R X ndS d S )Nrr   r
   )r/   outputopenreadr!   )r   fobjr   r   r   r    [   s    z!LintTestUsingModule._get_expected)__name__
__module____qualname__	INPUT_DIRZDEFAULT_PACKAGEr   r   r   r   r1   
_TEST_TYPEr   r$   r   r/   r    r   r   r   r   r   -   s   
r   c               @   s   e Zd ZdZdd ZdS )LintTestUpdateupdatec          	   C   s\   |   rXy|  }W n tk
r,   d}Y nX ||krXt| jd}|| W d Q R X d S )Nr
   w)r/   r    IOErrorr2   r1   write)r   r#   Zexpectedr4   r   r   r   r$   g   s    
zLintTestUpdate._check_resultN)r5   r6   r7   r9   r$   r   r   r   r   r:   c   s   r:   c             C   s   | rt | j}ndd }g }xbtttddD ]P\}}||r.|drJq.|dddd }ttt|d}|	|||f q.W t
r|S t|d	k std
|S )Nc             S   s   dS )N   r   )xr   r   r   <lambda>v   s    zgen_tests.<locals>.<lambda>Zfunc_r
   )z.pycz	$py.classz.pyr   r?      z&Please do not add new test cases here.)recompilesearchr   r8   MSG_DIRendswithr   splitappendUPDATElenr"   )Z
filter_rgxZ	is_to_runZtestsmodule_filemessages_filebasedependenciesr   r   r   	gen_testsr   s    rP   z&module_file,messages_file,dependenciesc             C   s   g | ]}|d  qS )r   r   )r   or   r   r   r      s    r   )Zidsc             C   s@   t r
t nt }| dd|_||_|p*d |_t|_|  d S )Nz.pyr
   )	rJ   r:   r   r   r   r1   r   r8   r   )rL   rM   rO   ZLTr   r   r   test_functionality   s    
rR   __main__z-uTr?   )#__doc__sysrC   Zpytestos.pathr   r   r   Zpylint.testutilsr   r   version_infoZPY3KZSYS_VERS_STR__file__r8   rF   Z
FILTER_RGXrJ   rD   r&   Zquoter   objectr   r:   rP   ZmarkZparametrizerR   r5   argvremoverK   mainr   r   r   r   <module>   s:   

6

