o
    bq                     @   s  d dl mZmZ 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mZmZmZ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mZmZmZ d d
lmZm Z m!Z!m"Z"m#Z#m$Z$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/ d dlm0Z0 d dlm1Z1 d dl2Z2ej3dkrej4dkrdZ5ndZ5n
ej6dkrdZ5ndZ5zej7Z8W n e9y   dZ8Y nw edd Z:dd Z;eee<Z=ee=dZ>ee=dZ?edd Z@ddd ZAe2jBd!d" ZCd#d$ ZDe2jEFd%d&gd'gd(gd)gd*ggd+d, ZGe2jEFd%d'd-gd.d&gd(d/gd*d/ggd0d1 ZHe2jEFd%g d2g d3g d4gd5d6 ZIe2jBd7d8d9d: ZJe2jBd7d8d;d< ZKe2jBd=d> ZLd?d@ ZMdAdB ZNdCdD ZOdEdF ZPdGdH ZQdIdJ ZRdKdL ZSdMdN ZTdOdP ZUdQdR ZVdSdT ZWdUdV ZXdWdX ZYdYdZ ZZd[d\ Z[d]d^ Z\d_d` Z]dadb Z^dcdd Z_dedf Z`dgdh Zadidj Zbdkdl Zcdmdn Zde2jBdodp Zee2jEfdpdqdr Zge2jEjhe8dsdte2jEfdpdudv Zie2jEfdpdwdx Zje2jEfdpdydz ZkG d{d| d|elZme2jBd}d~ ZnG dd delZodd Zpdd ZqdS )    )contextmanagerredirect_stdoutN)rmtree)getcwdchdir)joinbasenamedirnameisdirabspathsep)reload)StringIO)configlint)PyLinterRunpreprocess_optionsArgumentPreprocessingError)MSG_STATE_SCOPE_CONFIGMSG_STATE_SCOPE_MODULEMSG_STATE_CONFIDENCEMessagesStoreMessageDefinition	FileStatetokenize_module)InvalidMessageErrorUnknownMessageError)text)checkers)check_messages)
exceptions)
interfacesjavantUSERPROFILEHOMEwin32c               
   c   s    t d} tjt}z&| tjt< d V  W tjdd |d u r&tjt= n|tjt< t| dd d S tjdd |d u rCtjt= n|tjt< t| dd w )Nz	fake-homePYLINTRC T)ignore_errors)tempfilemkdtemposenvirongetr&   popr   )folderZold_home r2   X/var/www/secure340b-portal/env/lib/python3.10/site-packages/pylint/test/unittest_lint.py	fake_homeM   s    





r4   c                 C   s&   zt |  W d S  ty   Y d S w N)r-   removeOSError)filer2   r2   r3   r6   ]   s
   r6   inputregrtest_datac                  c   sP    t  } t }t|  td}z|V  W t| t| dS t| t| w )z}Create a temp directory and change the current location to it.

    This is supposed to be used with a *with* statement.
    .N)r+   r,   r   r   r   r   )tmpcurrent_dirZabs_tmpr2   r2   r3   tempdiri   s   
r>   r;   c                 C   s   t  t  }}| D ]!}t||}t|}|dkr|| q	|t| || q	|D ]}t|s8t| q-|D ]	}t|d	  q;dS )a  Creates directories and files found in <path>.

    :param paths: list of relative paths to files or directories
    :param chroot: the root directory in which paths will be created

    >>> from os.path import isdir, isfile
    >>> isdir('/tmp/a')
    False
    >>> create_files(['a/b/foo.py', 'a/b/c/', 'a/b/c/d/e.py'], '/tmp')
    >>> isdir('/tmp/a')
    True
    >>> isdir('/tmp/a/b/c')
    True
    >>> isfile('/tmp/a/b/c/d/e.py')
    True
    >>> isfile('/tmp/a/b/foo.py')
    True
    r)   wN)
setr   r   addr	   r
   r-   makedirsopenclose)pathschrootdirsfilespathfilenamedirpathfilepathr2   r2   r3   create_files}   s   

rM   c                  c   s:    t tj} g d}|tjd d < |V  | tjd d < d S )N)         )listsysrI   )origZfaker2   r2   r3   	fake_path   s   
rT   c                 C   sP   t g  tjdg|  ksJ W d    n1 sw   Y  tj| ks&J d S )Nr;   )r   fix_import_pathrR   rI   )rT   r2   r2   r3   test_no_args   s   rV   caseza/b/a/ba/b/__init__.pyza/ac              	   C   s   t  C}tdg t|dgdg |  }tj| ksJ t| tj|ks(J W d    n1 s2w   Y  tj| ks>J W d    d S 1 sIw   Y  d S )NrY   rZ   r;   r>   rM   r   rR   rI   r   rU   rT   rW   rF   expectedr2   r2   r3   test_one_arg   s   
"r^   za/cza/c/a/c/__init__.pyc              	   C   s   t  D}tddg t|dgdg |  }tj| ksJ t| tj|ks)J W d    n1 s3w   Y  tj| ks?J W d    d S 1 sJw   Y  d S )NrY   r_   rZ   r;   r[   r\   r2   r2   r3   test_two_similar_args   s   
"r`   a/b/c/__init__.pyza/d/__init__.pyza/e/f.py)a/b/crZ   a/e)rc   rZ   rc   rd   rZ   c              	      s   t  P tg d  fddtddtdfD dg |  }tj| ks(J t| tj|ks5J W d    n1 s?w   Y  tj| ksKJ W d    d S 1 sVw   Y  d S )Nra   c                    s   g | ]}t  |qS r2   )r   ).0suffixrF   r2   r3   
<listcomp>   s    z"test_more_args.<locals>.<listcomp>)rZ   brZ   )rZ   er;   )r>   rM   r   r   rR   rI   r   rU   )rT   rW   r]   r2   rg   r3   test_more_args   s    	
	"rk   modulescopec                 C   s   dgS )NIr2   )disabler2   r2   r3   rp         rp   c                 C   s   t jS r5   )	testutilsTestReporter)reporterr2   r2   r3   rt      rq   rt   c                 C   s    |    | d td| _| S )NZtoto)rC   set_current_moduler   
file_statelinterr2   r2   r3   init_linter   s   

ry   c                 C   sL   G dd dt j}| ||  |   t }| t| | d d S )Nc                   @   s.   e Zd ZejZdZddiZeddd Z	dS )z@test_pylint_visit_method_taken_in_account.<locals>.CustomCheckercustomZW9999)r)   rz   r)   c                 S   s   d S r5   r2   )self_r2   r2   r3   visit_class  s   zLtest_pylint_visit_method_taken_in_account.<locals>.CustomChecker.visit_classN)
__name__
__module____qualname__r"   ZIAstroidCheckerZ__implements__namemsgsr    r}   r2   r2   r2   r3   CustomChecker   s    r   abc)	r   ZBaseCheckerZregister_checkerrC   r   set_reporterr   TextReportercheck)rx   r   outr2   r2   r3   )test_pylint_visit_method_taken_in_account   s   	r   c                 C   s   | }| ds	J | dsJ |jddd |jdddd | dr&J | ddr.J |d | dr:J | dsAJ |jddd |jdddd | dsWJ | dds_J d S )	NW0101W0102packagerm   rl   rN   rn   linetutuis_message_enabledrp   ru   enablery   rx   r2   r2   r3   test_enable_message  s   
r   c                 C   s   | }| ds	J | dsJ |jddd |jdddd	 | dr&J | ds-J |j ddd
r6J |d | drBJ | dsIJ |jddd |jdddd	 | ds_J | dsfJ |j ddd
soJ d S )Nr   C0202Wr   rm   Crl   rN   r   )r   r   r   r   r2   r2   r3   test_enable_message_category!  s    
r   c                 C   s   G dd dt }| }|d t|dksJ |jdddd t|dks)J t|ddks3J |jdddd t|ddksEJ | |_t|jd	tj	d
ksUJ d S )Nc                   @   s   e Zd ZdgZdS )z,test_message_state_scope.<locals>.FakeConfigZHIGHN)r~   r   r   
confidencer2   r2   r2   r3   
FakeConfig5  s    
r   r   r   rl   rP   r   r   zthis-is-bad)r   )
objectrp   r   Zget_message_state_scoper   r   r   r   r"   Z	INFERENCE)ry   r   rx   r2   r2   r3   test_message_state_scope4  s   
r   c                 C   s|  | }|   ttd}|d ||d}|t| |j}||j	| |
ds.J |
ds5J |
dds=J |
ddrEJ |
ddrMJ |
ddsUJ |
dd	r]J |
dd
seJ |
ddrmJ |
ddruJ |
dds}J |
ddrJ |
ddrJ |
ddrJ |
ddsJ |
ddrJ |
ddrJ |
ddsJ |
ddsJ |
ddrJ |
ddsJ |
ddsJ |
ddrJ |
ddsJ |
ddsJ |
ddsJ |j}d|jd ksJ d|jd ksJ d|jvsJ d|jd  ksJ d|jd! ks(J d"|jd# ks2J d$|jd% ks<J d S )&Nzfunc_block_disable_msg.pyZfunc_block_disable_msgW0613E1101                $   *   +   .   1   3   9   =   @   B   ZE0602>   F   H   K   M      )r   r      )r   !   )r   r   rN   )C0302r   )r   2   j   )r   l   m   )r   n   )rC   r   REGRTEST_DATAru   Zget_astZprocess_tokensr   rv   Zcollect_block_linesZ
msgs_storer   Z_suppression_mapping)ry   rx   rL   Zastroidfsr2   r2   r3   test_enable_message_blockF  sT   

r   c                 C   s6  | }| ds	J | dsJ | dsJ | dsJ |jddd |jdddd	 | dr4J | dr;J | ddrCJ | ddrKJ |d
 | drWJ | dr^J | dseJ | dslJ |jddd |jdddd	 | dsJ | dsJ | ddsJ | ddsJ dS )zkmessages can be controlled by symbolic names.

    The state is consistent across symbols and numbers.
    r   Zunreachabler   zdangerous-default-valuer   rm   rl   rN   r   r   Nr   r   r2   r2   r3   test_enable_by_symbol  s,   
r   c                 C   sB   |  dsJ | d |  drJ | d |  dsJ d S )NZRP0001)Zreport_is_enabledrp   r   rw   r2   r2   r3   test_enable_report  s
   

r   c                 C   s,   t |  | dd | jjjdksJ d S )Noutput-formatr   r   )r   register
set_optionrt   	__class__r~   rw   r2   r2   r3   !test_report_output_format_aliased  s   
r   c                 C   sH   t |  ttj | dd W d    d S 1 sw   Y  d S )Nr   zmissing.module.Class)r   r   pytestraisesr!   ZInvalidReporterErrorr   rw   r2   r2   r3   test_set_unsupported_reporter  s   
"r   c                 C   V   |  dd | drJ | drJ | dsJ | dr"J | dr)J d S )Nrp   zC0111,W0234C0111W0234W0113missing-docstringnon-iterator-returnedr   r   rw   r2   r2   r3   test_set_option_1     r   c                 C   r   )Nrp   )r   r   r   r   r   r   r   r   rw   r2   r2   r3   test_set_option_2  r   r   c                 C   sL   |  d ddd |  D vsJ | d ddd |  D v s$J d S )Ndesignc                 S      g | ]}|j qS r2   r   re   cr2   r2   r3   rh         z(test_enable_checkers.<locals>.<listcomp>c                 S   r   r2   r   r   r2   r2   r3   rh     r   )rp   prepare_checkersr   rw   r2   r2   r3   test_enable_checkers  s   

r   c                 C   s<   |    |  }dd |D }h d}t ||@ ksJ d S )Nc                 S   s   h | ]}|j qS r2   r   r   r2   r2   r3   	<setcomp>  r   z#test_errors_only.<locals>.<setcomp>>   miscellaneousr   formatmetricssimilarities)Z
error_moder   r@   )rx   r   checker_namesZ
should_notr2   r2   r3   test_errors_only  s
   r   c                 C   s6   |  dd |  dd ddd |  D vsJ d S )Nrp   ZRP0801ZR0801r   c                 S   r   r2   r   r   r2   r2   r3   rh     r   z(test_disable_similar.<locals>.<listcomp>r   r   rw   r2   r2   r3   test_disable_similar  s   r   c                 C   sH   |  dd |  dd dd |  D }dD ]
}||vs!J |qdS )	z(check that we disabled a lot of checkersZreportsFrp   zR,C,Wc                 S   r   r2   r   r   r2   r2   r3   rh     r   z%test_disable_alot.<locals>.<listcomp>)r   r   r   Nr   )rx   r   cnamer2   r2   r3   test_disable_alot  s   r   c                 C   sX   |  t  |   | d | jdddd | jdddd d	d
g| jjks*J d S )N0123ZC0301rN   rN   rO   )r   argsline-too-longrO   )rP      zC:  1: Line too long (1/2)zC:  2: Line too long (3/4))r   rr   rs   rC   ru   add_messagert   messagesrw   r2   r2   r3   test_addmessage  s   
r   c                 C   s  |  t  |   | d tt}| jddd W d    n1 s'w   Y  t	|j
dks5J tt}| jddddd W d    n1 sNw   Y  t	|j
d	ks\J tt}| d
 W d    n1 sqw   Y  t	|j
dksJ d S )Nr   r   r   )r   z)Message C0301 must provide line, got NonerO   Z	fake_node)r   noder   z@Message C0301 must only provide line, got line=2, node=fake_nodeZC0321z)Message C0321 must provide Node, got None)r   rr   rs   rC   ru   r   r   r   r   strvalue)rx   cmr2   r2   r3   test_addmessage_invalid  s$   
r   c                  C   sb   t tdd} tj|  tddt tddgdd}tdd |j D d	ks)J tj	|  d S )
Nr:   dummy_plugin--load-pluginsempty.pyFZdo_exitc                 S      g | ]
}|j d kr|j qS r   r   re   chr2   r2   r3   rh         z1test_load_plugin_command_line.<locals>.<listcomp>rO   
r   HERErR   rI   appendr   lenrx   Zget_checkersr6   dummy_plugin_pathrunr2   r2   r3   test_load_plugin_command_line  s   r  c                  C   sn   t tdd} tj|  t tdd}td|t tddgdd}tdd	 |j D d
ks/J tj	|  d S )Nr:   r   zdummy_plugin.rcz--rcfiler   Fr   c                 S   r   r   r   r   r2   r2   r3   rh     r   z0test_load_plugin_config_file.<locals>.<listcomp>rO   r   )r  Zconfig_pathr  r2   r2   r3   test_load_plugin_config_file  s   r  c               	   C   sP   t tdd} tj|  tddddt tddgdd	}|jjjg d
ks&J d S )Nr:   r   r   Zdummy_conf_pluginz--ignorezfoo,barr   Fr   )foobarbin)	r   r   rR   rI   r   r   rx   r   Z
black_listr   r2   r2   r3   test_load_plugin_configuration#  s   

r  c                   C   sr   t t tg d W d    n1 sw   Y  t t tg d W d    d S 1 s2w   Y  d S )N)r   
unexistant--init-hookraise RuntimeError)r
  r  r   r	  )r   r   RuntimeErrorr   r2   r2   r2   r3   *test_init_hooks_called_before_load_plugins4  s   "r  c                 C   sB   |  t  | tjtjtdd dg| j	j
ksJ d S )NdataZascriptzC:  2: Line too long (175/100))r   rr   rs   r   r-   rI   r   r	   __file__rt   r   rw   r2   r2   r3   test_analyze_explicit_script;  s   r  c                 C   sL   dd |   D }d|vsJ | dd dd |   D }d|v s$J d S )Nc                 S   r   r2   r   r   r2   r2   r3   rh   B  r   z1test_python3_checker_disabled.<locals>.<listcomp>python3r   c                 S   r   r2   r   r   r2   r2   r3   rh   F  r   )r   r   )rx   r   r2   r2   r3   test_python3_checker_disabledA  s
   r  c                 C   sD   t  }| | | }dD ]}t|tj}t||sJ qd S )N)z$^Pylint global options and switches$z+Verbatim name of the checker is ``python3``z^:old-octal-literal \(E1608\):z^:dummy-variables-rgx:)r   Zprint_full_documentationgetvaluerecompile	MULTILINEsearch)rx   r   outputZre_strregexpr2   r2   r3   test_full_documentationJ  s   
	r  c                   C   s   t jdd  d S )Nr(   )r-   r.   r0   r2   r2   r2   r3   pop_pylintrc\  s   r  c                  C   s   t jd} | dkrd}nt j| d}tj|ksJ zAtt d}|t jd< zt	t tj|ks4J W zt 
| W n   Y nzt 
| W w    Y w W t jd= d S W t jd= d S t jd= w )N~z	.pylint.dZ
PYLINTHOME)r-   rI   
expanduserr   r   ZPYLINT_HOMEr+   
gettempdirr.   r   r6   )Zuhomer]   Zpylintdr2   r2   r3   test_pylint_homea  s.   
r  zITOX runs this test from within the repo and finds the project's pylintrc.)reasonc               	   C   s   t  T t } ttjtjtj z1t	
 d u sJ tt dtjd< t	
 d u s/J dtjd< t	
 d u s<J W t|  tt	 n	t|  tt	 w W d    d S 1 sZw   Y  d S )N	.pylintrcr(   r;   )r4   r   r   r-   rI   r	   r   rR   
executabler   find_pylintrcr   r+   r  r.   r   )r=   r2   r2   r3   test_pylintrcy  s   

"r$  c                  C   s   t  f} tg d t  t d u sJ W d    n1 s w   Y  t| ddt| dddt| dddt| dddt| ddddddd	}| D ]\}}tt| | t |ks`J qLW d    d S 1 slw   Y  d S )
N)
a/pylintrcrY   a/b/pylintrcrb   a/b/c/d/__init__.pyza/b/c/d/e/.pylintrcrZ   pylintrcri   r   drj   r!  )rZ   rX   rc   a/b/c/dz	a/b/c/d/e)	r>   rM   r4   r   r#  r   itemsr-   r   rF   resultsZbasedirr]   r2   r2   r3   test_pylintrc_parentdir  s$   

"r.  c               	   C   s   t  [} t ? tg d t d u sJ t| ddt| dddd d d}| D ]\}}tt| | t |ks>J q*W d    n1 sIw   Y  W d    d S W d    d S 1 saw   Y  d S )N)r%  r&  r'  rZ   r(  ri   )rZ   rX   rc   r*  )	r>   r4   rM   r   r#  r   r+  r-   r   r,  r2   r2   r3   "test_pylintrc_parentdir_no_package  s"   
"r/  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestPreprocessOptionsc                 C   s   | j ||f d S r5   )r   r   )r{   r   r   r2   r2   r3   	_callback  s   zTestPreprocessOptions._callbackc                 C   s<   g | _ tg d| jdf| jdfd ddg| j ksJ d S )N)--fooz	--bar=baz--qu=uxFT)r  qu)r  Nr4  uxr   r   r1  r{   r2   r2   r3   test_value_equal  s   z&TestPreprocessOptions.test_value_equalc                 C   s2   g | _ tddgd| jdfi dg| j ksJ d S )Nz--qur6  r4  Tr5  r7  r8  r2   r2   r3   test_value_space  s   z&TestPreprocessOptions.test_value_spacec                 C   s~   t t tg dddi W d    n1 sw   Y  t t tddgddi W d    d S 1 s8w   Y  d S )N)r2  --barr3  r  )NTr2  r;  r   r   r   r   r8  r2   r2   r3   !test_error_missing_expected_value  s   "z7TestPreprocessOptions.test_error_missing_expected_valuec                 C   sB   t t tg dddi W d    d S 1 sw   Y  d S )N)r2  z
--bar=spamr3  r  )NFr<  r8  r2   r2   r3   test_error_unexpected_value  s
   "z1TestPreprocessOptions.test_error_unexpected_valueN)r~   r   r   r1  r9  r:  r=  r>  r2   r2   r2   r3   r0    s    r0  c                  C   s&   t  } G dd dt}| |  | S )Nc                   @   s4   e Zd ZdZdddddgifddd	d
difdZdS )zstore.<locals>.CheckerZacheckermessage
msg-symbolzmsg description.Z	old_names)W0001
old-symbolz(Duplicate keyword argument %r in %s callduplicate-keyword-argzJUsed when a function call passes the same keyword argument multiple times.Z
maxversion)rO      )W1234E1234N)r~   r   r   r   r   r2   r2   r2   r3   Checker  s    
rG  )r   r   Zregister_messages_from_checker)storerG  r2   r2   r3   rH    s   rH  c                   @   sN   e Zd Zd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 )TestMessagesStoreFc                 C   s   ||j |dks
J d S )N
checkerref)format_help)r{   descmsgrK  r2   r2   r3   _compare_messages  s   z#TestMessagesStore._compare_messagesc                 C   sR   t |dd tsJ tt |d W d    d S 1 s"w   Y  d S )NrE  r   ZYB12)
isinstanceget_message_definitionsr   r   r   r   r{   rH  r2   r2   r3   test_check_message_id  s   "z'TestMessagesStore.test_check_message_idc                 C   2   | dd }| jd|dd | jd|dd d S )NrE  r   z_:msg-symbol (W1234): *message*
  msg description. This message belongs to the achecker checker.TrJ  z1:msg-symbol (W1234): *message*
  msg description.FrQ  rO  r{   rH  Zmessage_definitionr2   r2   r3   test_message_help  s   
z#TestMessagesStore.test_message_helpc                 C   rT  )NrF  r   z:duplicate-keyword-arg (E1234): *Duplicate keyword argument %r in %s call*
  Used when a function call passes the same keyword argument multiple times.
  This message belongs to the achecker checker. It can't be emitted when using
  Python >= 2.6.TrJ  z:duplicate-keyword-arg (E1234): *Duplicate keyword argument %r in %s call*
  Used when a function call passes the same keyword argument multiple times.
  This message can't be emitted when using Python >= 2.6.FrU  rV  r2   r2   r3   test_message_help_minmax
  s   
z*TestMessagesStore.test_message_help_minmaxc                 C   sJ   t  }t| |  W d    n1 sw   Y  d| v s#J d S )Nz:msg-symbol (W1234): *message*)r   r   Zlist_messagesr  )r{   rH  r  r2   r2   r3   test_list_messages  s
   

z$TestMessagesStore.test_list_messagesc                 C   sB   | ddd d|dd jksJ d|dd jksJ d S )NrE  zold-bad-namer@  r   )add_renamed_messagerQ  symbolrR  r2   r2   r3   test_add_renamed_message$  s   z*TestMessagesStore.test_add_renamed_messagec                 C   sR   t t}|ddd W d    n1 sw   Y  d}t|j|ks'J d S )NrE  zold-msg-symbolrC  zWMessage id 'W1234' cannot have both 'msg-symbol' and 'old-msg-symbol' as symbolic name.)r   r   r   rZ  r   r   )r{   rH  r   r]   r2   r2   r3    test_add_renamed_message_invalid)  s   z2TestMessagesStore.test_add_renamed_message_invalidc                 C   s4   d| dd jksJ d| dd jksJ d S )Nr@  rA  r   rB  )rQ  r[  rR  r2   r2   r3   test_renamed_message_register5  s   z/TestMessagesStore.test_renamed_message_registerNF)r~   r   r   rO  rS  rW  rX  rY  r\  r]  r^  r2   r2   r2   r3   rI    s    
rI  c               	      s   G  fdddt  tjtdd} tj| d}dD ]L}t }  }||j_d|j_	|
  || ztjtj|  || |g W tj  ntj  w |j}t|dks_J d	|d v sgJ qd
S )zYCheck that we can write custom should_analyze_file that work
    even for arguments.
    c                       s    e Zd Zd fdd	Z  ZS )z7test_custom_should_analyze_file.<locals>.CustomPyLinterFc                    s*   t j|dkr
dS t | j|||dS )Nwrong.pyF)is_argument)r-   rI   r   supershould_analyze_file)r{   modnamerI   ra  )CustomPyLinterr   r2   r3   rc  @  s
   
zKtest_custom_should_analyze_file.<locals>.CustomPyLinter.should_analyze_filer_  )r~   r   r   rc  __classcell__r2   re  )r   r3   re  ?  s    re  r:   Zbad_packager`  r   r   rN   zinvalid syntaxN)r   r-   rI   r   r   rr   rs   r   jobs
persistentrC   r   rR   r   r	   r   r0   r   r   )package_dirZ
wrong_filerh  rt   rx   r   r2   rg  r3   test_custom_should_analyze_file:  s$   	
rk  c                 C   sN   t  }| }|  || ttd}||g |j}t|dks%J d S )Nznot__init__.pyr   )	rr   rs   rC   r   r   INPUTDIRr   r   r   )ry   rt   rx   rL   r   r2   r2   r3   test_filename_with__init__^  s   

rm  )r;   )r
contextlibr   r   rR   r-   r  r+   shutilr   r   r   os.pathr   r   r	   r
   r   r   	importlibr   ior   Zpylintr   r   Zpylint.lintr   r   r   r   Zpylint.utilsr   r   r   r   r   r   r   Zpylint.exceptionsr   r   Zpylint.testutilsrr   Zpylint.reportersr   r   Zpylint.checkers.utilsr    r!   r"   r   r   _namer&   platformpypy_version_infoZPYPY_VERSION_INFOAttributeErrorr4   r6   r  r   rl  r   r>   rM   ZfixturerT   rV   markZparametrizer^   r`   rk   rp   rt   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  Zusefixturesr  Zskipifr$  r.  r/  r   r0  rH  rI  rk  rm  r2   r2   r2   r3   <module>   s    $	








%


	





:				








H$