o
    F+ idI  ã                   @   sÊ  d Z ddlZddlZddlZddlZddlZddlZddl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ZddlZddl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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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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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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m.Z. dd#lm/Z/ dd$lm0Z0 dd%lm1Z1 dd&lm2Z2 dd'lm3Z3 G d(d)„ d)eƒZ4G d*d+„ d+eƒZ5G d,d-„ d-eƒZ6G d.d/„ d/eƒZ7G d0d1„ d1eƒZ8e(j9j:d2d3G d4d5„ d5eƒƒZ;G d6d7„ d7eƒZ<G d8d9„ d9eƒZ=G d:d;„ d;eƒZ>dS )<z1Tests for testing utils (psutil.tests namespace).é    N)Úmock)ÚFREEBSD)ÚNETBSD)ÚPOSIX)Úopen_binary)Ú	open_text)Úsupports_ipv6)Ú
CI_TESTING)ÚCOVERAGE)ÚHAS_NET_CONNECTIONS_UNIX)ÚHERE)Ú
PYTHON_EXE)ÚPYTHON_EXE_ENV)ÚPsutilTestCase)ÚTestMemoryLeak)Úbind_socket)Úbind_unix_socket©Ú
call_until)Úchdir)Úcreate_sockets)Úfake_pytest)Úfilter_proc_net_connections)Úget_free_port)Úis_namedtuple)Úprocess_namespace)Úpytest)Úreap_children)Úretry)Úretry_on_failure)Ú
safe_mkdir)Úsafe_rmpath)Úsystem_namespace)Útcp_socketpair)Ú	terminate)Úunix_socketpair)Úwait_for_file)Úwait_for_pidc                   @   sx   e Zd Ze d¡dd„ ƒZe d¡dd„ ƒZe d¡dd„ ƒZe d¡dd	„ ƒZe d¡d
d„ ƒZ	e d¡dd„ ƒZ
dS )ÚTestRetryDecoratorz
time.sleepc                    sF   t ddd d‡ fdd„ƒ}ttdƒƒ‰ |ƒ dksJ ‚|jdks!J ‚d S )Né   é   ©ÚretriesÚintervalZlogfunc                      ó   ˆ rˆ   ¡  dd  ˆ sdS ©Nr*   r   ©Úpop© ©Úqueuer2   úg/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/psutil/tests/test_testutils.pyÚfooG   ó
   þz2TestRetryDecorator.test_retry_success.<locals>.fooé   )r   ÚlistÚrangeÚ
call_count©ÚselfÚsleepr6   r2   r3   r5   Útest_retry_successC   s
   z%TestRetryDecorator.test_retry_successc                    sh   t ddd d‡ fdd„ƒ}ttdƒƒ‰ t t¡ |ƒ  W d   ƒ n1 s&w   Y  |jdks2J ‚d S )Nr)   r*   r+   c                      r.   r/   r0   r2   r3   r2   r5   r6   U   r7   z2TestRetryDecorator.test_retry_failure.<locals>.fooé   )r   r9   r:   r   ÚraisesÚZeroDivisionErrorr;   r<   r2   r3   r5   Útest_retry_failureR   s   ÿz%TestRetryDecorator.test_retry_failurec                 C   sV   t tdddd„ ƒ}t t¡ |ƒ  W d   ƒ n1 sw   Y  |jdks)J ‚d S )Nr*   )Ú	exceptionr-   c                   S   s   t ‚©N)Ú	TypeErrorr2   r2   r2   r5   r6   c   ó   z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   Ú
ValueErrorr   rA   rF   r;   r<   r2   r2   r5   Útest_exception_arga   s   

ÿz%TestRetryDecorator.test_exception_argc                 C   sX   t dd d ddd„ ƒ}t t¡ |ƒ  W d   ƒ n1 sw   Y  |jdks*J ‚d S )Nr)   r+   c                   S   ó   dd  d S r/   r2   r2   r2   r2   r5   r6   o   ó   z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   ©r   r   rA   rB   r;   r<   r2   r2   r5   Útest_no_interval_argk   s   
ÿz'TestRetryDecorator.test_no_interval_argc                 C   sX   t ddd ddd„ ƒ}t t¡ |ƒ  W d   ƒ n1 sw   Y  |jdks*J ‚d S )Nr)   r*   r+   c                   S   rJ   r/   r2   r2   r2   r2   r5   r6   y   rK   z0TestRetryDecorator.test_retries_arg.<locals>.foorL   r<   r2   r2   r5   Útest_retries_argw   s   
ÿz#TestRetryDecorator.test_retries_argc                 C   s<   t  t¡ tddd W d   ƒ d S 1 sw   Y  d S )Nr)   r*   )r,   Útimeout)r   rA   rH   r   )r=   r>   r2   r2   r5   Útest_retries_and_timeout_args   s   "ÿz0TestRetryDecorator.test_retries_and_timeout_argsN)Ú__name__Ú
__module__Ú__qualname__r   Úpatchr?   rC   rI   rM   rN   rP   r2   r2   r2   r5   r(   B   s    


	

	r(   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S )ÚTestSyncTestUtilsc              	   C   sš   t t ¡ ƒ tt ¡ ƒd }tjdtdgƒd+ t	 
tj¡ t |ƒ W d   ƒ n1 s.w   Y  W d   ƒ d S W d   ƒ d S 1 sFw   Y  d S )NiŸ† úpsutil.tests.retry.__iter__r   ©Úreturn_value)r'   ÚosÚgetpidÚmaxÚpsutilZpidsr   rT   Úiterr   rA   ZNoSuchProcess)r=   Znopidr2   r2   r5   Útest_wait_for_pidˆ   s   
ÿÿ"ÿz#TestSyncTestUtils.test_wait_for_pidc                 C   sX   |   ¡ }t|dƒ}| d¡ W d   ƒ n1 sw   Y  t|ƒ tj |¡r*J ‚d S )NÚwr6   ©Ú
get_testfnÚopenÚwriter&   rY   ÚpathÚexists©r=   ÚtestfnÚfr2   r2   r5   Útest_wait_for_file   s   ÿz$TestSyncTestUtils.test_wait_for_filec                 C   sR   |   ¡ }t|dƒ W d   ƒ n1 sw   Y  t|dd tj |¡r'J ‚d S )Nr_   T)Úempty)ra   rb   r&   rY   rd   re   ©r=   rg   r2   r2   r5   Útest_wait_for_file_empty–   s   ÿz*TestSyncTestUtils.test_wait_for_file_emptyc              	   C   s„   |   ¡ }tjdtdgƒd* t t¡ t|ƒ W d   ƒ n1 s#w   Y  W d   ƒ d S W d   ƒ d S 1 s;w   Y  d S )NrV   r   rW   )ra   r   rT   r]   r   rA   ÚOSErrorr&   rk   r2   r2   r5   Útest_wait_for_file_no_file   s   
ÿÿ"ÿz,TestSyncTestUtils.test_wait_for_file_no_filec                 C   s\   |   ¡ }t|dƒ}| d¡ W d   ƒ n1 sw   Y  t|dd tj |¡s,J ‚d S )Nr_   r6   F)Údeleter`   rf   r2   r2   r5   Útest_wait_for_file_no_delete£   s   ÿz.TestSyncTestUtils.test_wait_for_file_no_deletec                 C   s   t dd„ ƒ d S )Nc                   S   ó   dS ©Nr*   r2   r2   r2   r2   r5   Ú<lambda>«   ó    z3TestSyncTestUtils.test_call_until.<locals>.<lambda>r   ©r=   r2   r2   r5   Útest_call_untilª   s   z!TestSyncTestUtils.test_call_untilN)	rQ   rR   rS   r^   ri   rl   rn   rp   rv   r2   r2   r2   r5   rU   ‡   s    rU   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestFSTestUtilsc                 C   ó<   t tƒ}|jdksJ ‚W d   ƒ d S 1 sw   Y  d S )NÚr)r   Ú__file__Úmode©r=   rh   r2   r2   r5   Útest_open_text°   ó   
"ÿzTestFSTestUtils.test_open_textc                 C   rx   )NÚrb)r   rz   r{   r|   r2   r2   r5   Útest_open_binary´   r~   z TestFSTestUtils.test_open_binaryc                 C   s<   |   ¡ }t|ƒ tj |¡sJ ‚t|ƒ tj |¡sJ ‚d S rE   )ra   r    rY   rd   Úisdirrk   r2   r2   r5   Útest_safe_mkdir¸   s
   zTestFSTestUtils.test_safe_mkdirc              	   C   sÐ   |   ¡ }t|dƒ ¡  t|ƒ tj |¡rJ ‚t|ƒ t |¡ t|ƒ tj |¡r,J ‚tj	dt
tjdƒd'}t t
¡ t|ƒ W d   ƒ n1 sLw   Y  |jsVJ ‚W d   ƒ d S 1 saw   Y  d S )Nr_   zpsutil.tests.os.statÚ )Zside_effect)ra   rb   Úcloser!   rY   rd   re   Úmkdirr   rT   rm   ÚerrnoÚEINVALr   rA   Úcalled)r=   rg   Úmr2   r2   r5   Útest_safe_rmpath¿   s"   
ÿ
ÿ"ûz TestFSTestUtils.test_safe_rmpathc                 C   sp   |   ¡ }t ¡ }t |¡ t|ƒ t ¡ tj ||¡ksJ ‚W d   ƒ n1 s)w   Y  t ¡ |ks6J ‚d S rE   )ra   rY   Úgetcwdr…   r   rd   Újoin)r=   rg   Úbaser2   r2   r5   Ú
test_chdirÓ   s   

ÿzTestFSTestUtils.test_chdirN)rQ   rR   rS   r}   r€   r‚   rŠ   rŽ   r2   r2   r2   r5   rw   ¯   s    rw   c                   @   s>   e Zd Zdd„ Zdd„ Zejje dddd„ ƒZ	d	d
„ Z
dS )ÚTestProcessUtilsc                 C   sN   |   ¡ }t |j¡}| ¡ sJ ‚tƒ  | ¡ rJ ‚tjjrJ ‚tjjr%J ‚d S rE   )	Úspawn_subprocr\   ÚProcessÚpidÚ
is_runningr   ÚtestsZ_pids_startedZ_subprocesses_started)r=   ZsubpÚpr2   r2   r5   Útest_reap_childrenÝ   s   z#TestProcessUtils.test_reap_childrenc                 C   sä   |   ¡ \}}|j|jksJ ‚| ¡ sJ ‚| ¡ sJ ‚t ¡  ¡ }||gks'J ‚t ¡ jdd}t|ƒdks7J ‚||v s=J ‚||v sCJ ‚| ¡ t 	¡ ksMJ ‚| ¡ |jksVJ ‚t
|ƒ | ¡ r`J ‚| ¡ sfJ ‚t
|ƒ | ¡ rpJ ‚d S )NT)Ú	recursiveé   )Zspawn_children_pairr’   r“   r\   r‘   ÚchildrenÚlenÚppidrY   rZ   r$   )r=   ÚchildZ
grandchildr™   r2   r2   r5   Útest_spawn_children_pairæ   s"   z)TestProcessUtils.test_spawn_children_pairú
POSIX only©Úreasonc                 C   s"   |   ¡ \}}| ¡ tjksJ ‚d S rE   )Úspawn_zombieÚstatusr\   ZSTATUS_ZOMBIE)r=   Ú_parentÚzombier2   r2   r5   Útest_spawn_zombieû   s   z"TestProcessUtils.test_spawn_zombiec                 C   sò   |   ¡ }t|ƒ |  |j¡ t|ƒ t |   ¡ j¡}t|ƒ |  |j¡ t|ƒ tddg}tj|tj	tj	t
d}t|ƒ |  |j¡ t|ƒ |   ¡ j}t|ƒ |  |j¡ t|ƒ trw|  ¡ \}}t|ƒ t|ƒ |  |j¡ |  |j¡ d S d S )Nz-cz3import time; [time.sleep(0.1) for x in range(100)];)ÚstdoutÚstderrÚenv)r   r$   Zassert_pid_goner’   r\   r‘   r   ÚPopenÚ
subprocessÚPIPEr   r   r¡   )r=   r•   Úcmdr’   Úparentr¤   r2   r2   r5   Útest_terminate   s@   ýü
ûzTestProcessUtils.test_terminateN)rQ   rR   rS   r–   r   r   ÚmarkÚskipifr   r¥   r®   r2   r2   r2   r5   r   Ü   s    	
r   c                   @   s~   e Zd Zdd„ Zejje dddd„ ƒZdd„ Z	ejje ddejje
p'ed	dejje d
ddd„ ƒƒƒZdd„ ZdS )ÚTestNetUtilsc                 C   sN   t ƒ }td|fd}| ¡ d |ksJ ‚W d   ƒ d S 1 s w   Y  d S )Nrƒ   ©Úaddrr*   )r   r   Úgetsockname)r=   ÚportÚsr2   r2   r5   r   )  s   "ÿzTestNetUtils.bind_socketrž   rŸ   c                 C   sÒ   |   ¡ }t|ƒ3}|jtjksJ ‚|jtjksJ ‚| ¡ |ks!J ‚tj	 
|¡s)J ‚t t |¡j¡s4J ‚W d   ƒ n1 s>w   Y  |   ¡ }t|tjd}|jtjksWJ ‚W d   ƒ d S 1 sbw   Y  d S )N)Útype)ra   r   ÚfamilyÚsocketÚAF_UNIXr·   ÚSOCK_STREAMr´   rY   rd   re   ÚstatÚS_ISSOCKÚst_modeÚ
SOCK_DGRAM)r=   ÚnameÚsockr2   r2   r5   Útest_bind_unix_socket.  s   
û"ÿz"TestNetUtils.test_bind_unix_socketc              	   C   sª   dt ƒ f}ttj|d\}}|; |  | ¡ |ksJ ‚| ¡ |ks$J ‚| ¡ |ks,J ‚W d   ƒ n1 s6w   Y  W d   ƒ d S W d   ƒ d S 1 sNw   Y  d S )Nz	127.0.0.1r²   )r   r#   r¹   ÚAF_INETr´   Úgetpeername)r=   r³   ÚserverÚclientr2   r2   r5   Útest_tcp_socketpair<  s   
Püz TestNetUtils.test_tcp_socketpairz*/var/run/log UNIX socket opened by defaultzcan't list UNIX socketsc                 C   sØ   t  ¡ }| ¡ }t|jddƒrJ ‚|  ¡ }t|ƒ\}}zFtj 	|¡s%J ‚t
 t 
|¡j¡s0J ‚| ¡ | dks:J ‚tt|jddƒƒdksHJ ‚| ¡ |ksPJ ‚| ¡ |ksXJ ‚W | ¡  | ¡  d S | ¡  | ¡  w )NÚunix)Úkindr˜   )r\   r‘   Únum_fdsr   Znet_connectionsra   r%   rY   rd   re   r¼   r½   r¾   rš   r´   rÄ   r„   )r=   r•   rÊ   rÀ   rÅ   rÆ   r2   r2   r5   Útest_unix_socketpairE  s(   ÿýÿ
z!TestNetUtils.test_unix_socketpairc                 C   sà   t ƒ c}t t¡}t t¡}|D ]}||j  d7  < || tjtj¡  d7  < q|tj	 dks3J ‚t
ƒ r?|tj dks?J ‚trLtrL|tj dksLJ ‚|tj dksUJ ‚|tj dks^J ‚W d   ƒ d S 1 siw   Y  d S )Nr*   r˜   )r   ÚcollectionsÚdefaultdictÚintr¸   Ú
getsockoptr¹   Ú
SOL_SOCKETÚSO_TYPErÃ   r   ÚAF_INET6r   r   rº   r»   r¿   )r=   ÚsocksZfamsÚtypesr¶   r2   r2   r5   Útest_create_socketsb  s   

"óz TestNetUtils.test_create_socketsN)rQ   rR   rS   r   r   r¯   r°   r   rÂ   rÇ   r   r   r   rË   rÕ   r2   r2   r2   r5   r±   (  s    
	ÿÿr±   Úserial©rÀ   c                   @   sh   e Zd Zeƒ dd„ ƒZdd„ Zeƒ ejje	ddejje
dddd	„ ƒƒƒZd
d„ Zdd„ Zdd„ ZdS )ÚTestMemLeakClassc                    s8   ‡ fdd„}ddi‰ | j |ddd ˆ d dksJ ‚d S )	Nc                      s   ˆ d  d7  < d S )NÚcntr*   r2   r2   ©rÙ   r2   r5   Úfunw  s   z(TestMemLeakClass.test_times.<locals>.funrÙ   r   é
   é   )ÚtimesÚwarmup_timesé   )Úexecute)r=   rÛ   r2   rÚ   r5   Ú
test_timesu  s   zTestMemLeakClass.test_timesc                 C   s2  t  t¡ | jdd„ dd W d   ƒ n1 sw   Y  t  t¡ | jdd„ dd W d   ƒ n1 s7w   Y  t  t¡ | jdd„ dd W d   ƒ n1 sUw   Y  t  t¡ | jd	d„ dd
 W d   ƒ n1 ssw   Y  t  t¡ | jdd„ dd W d   ƒ d S 1 s’w   Y  d S )Nc                   S   rq   ©Nr   r2   r2   r2   r2   r5   rs   €  rt   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   ©rÞ   c                   S   rq   rã   r2   r2   r2   r2   r5   rs   ‚  rt   éÿÿÿÿc                   S   rq   rã   r2   r2   r2   r2   r5   rs   „  rt   )rß   c                   S   rq   rã   r2   r2   r2   r2   r5   rs   †  rt   )Ú	tolerancec                   S   rq   rã   r2   r2   r2   r2   r5   rs   ˆ  rt   )r,   )r   rA   rH   rá   ru   r2   r2   r5   Útest_param_err~  s   ÿÿÿÿ"ÿzTestMemLeakClass.test_param_errzskipped on CIrŸ   zskipped during test coveragec              
   C   sÔ   g }|fdd„}z_t jt jjddJ t t ¡ ¡& t t ¡ ¡ | j	|dd W d   ƒ n1 s4w   Y  W d   ƒ n1 sCw   Y  W d   ƒ W ~d S W d   ƒ W ~d S 1 s_w   Y  W ~d S ~w )Nc                 S   s   |   dd ¡ d S )NZøxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   ©Úappend©Úlsr2   r2   r5   rÛ     ó   z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem©Úmatchéd   rä   )
r   rA   ÚfailÚ	ExceptionÚ
contextlibÚredirect_stdoutÚioÚStringIOÚredirect_stderrrá   )r=   rì   rÛ   r2   r2   r5   Útest_leak_memŠ  s(   ÿþý€ ÿûÿú
zTestMemLeakClass.test_leak_memc                    sd   ‡ ‡fdd„}g ‰ t rdnd}tjtjjd| d ˆ |¡ W d   ƒ d S 1 s+w   Y  d S )Nc                     s"   t tƒ} ˆ | j¡ ˆ  | ¡ d S rE   )rb   rz   Z
addCleanupr„   rê   )rh   ©Úboxr=   r2   r5   rÛ   ž  s   z1TestMemLeakClass.test_unclosed_files.<locals>.funÚfdÚhandlez	unclosed rî   )r   r   rA   rñ   rò   rá   )r=   rÛ   rÉ   r2   rù   r5   Útest_unclosed_files  s   "ÿz$TestMemLeakClass.test_unclosed_filesc                    s>   ‡ fdd„}g ‰ d}| j ||ddd tˆ ƒ|d ksJ ‚d S )Nc                      s   ˆ   dd ¡ d S )NZxxxxxxxxxxxxxxxxxxxxxxxxrè   ré   r2   rë   r2   r5   rÛ   ©  rí   z,TestMemLeakClass.test_tolerance.<locals>.funrð   r   i  €)rÞ   rß   ræ   r*   )rá   rš   )r=   rÛ   rÞ   r2   rë   r5   Útest_tolerance¨  s   ÿzTestMemLeakClass.test_tolerancec                 C   s’   dd„ }|   t|¡ t t¡ |   t|¡ W d   ƒ n1 s w   Y  dd„ }t tjj¡ |   t|¡ W d   ƒ d S 1 sBw   Y  d S )Nc                   S   rJ   r/   r2   r2   r2   r2   r5   Úfun_1´  s   z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_1c                   S   s   d S rE   r2   r2   r2   r2   r5   Úfun_2»  ó   z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_2)Zexecute_w_excrB   r   rA   rm   rñ   rò   )r=   rÿ   r   r2   r2   r5   Útest_execute_w_exc³  s   ÿ"ÿz#TestMemLeakClass.test_execute_w_excN)rQ   rR   rS   r   râ   rç   r   r¯   r°   r	   r
   rø   rý   rþ   r  r2   r2   r2   r5   rØ   s  s    
rØ   c                   @   sL   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S )ÚTestFakePytestc                 C   s0   t  ¡ }| |¡ t jt ¡ d}| |¡}|S )N)Ústream)ÚunittestZ	TestSuiteZaddTestZTextTestRunnerrõ   rö   Úrun)r=   ÚklassÚsuiteÚrunnerÚresultr2   r2   r5   Úrun_test_classÃ  s
   

zTestFakePytest.run_test_classc              
   C   sØ   t  t¡}dd  W d   ƒ n1 sw   Y  t|jtƒs!J ‚t jtdd}tdƒ‚1 s0w   Y  zt jtdd}tdƒ‚1 sEw   Y  W n tyf } zt|ƒdks[J ‚W Y d }~d S d }~ww t 	d¡S )Nr*   r   r6   rî   Úbarz"foo" does not match "bar"úexception not raised)
r   rA   rB   Ú
isinstanceÚvaluerH   ÚAssertionErrorÚstrr   rñ   )r=   ÚcmÚerrr2   r2   r5   Útest_raisesË  s    
ÿÿÿ€ÿ
zTestFakePytest.test_raisesc                 C   sV   t jjdddd„ ƒ}|ƒ dksJ ‚t jjddG dd„ dƒƒ}|ƒ  ¡ dks)J ‚d S )NrÖ   r×   c                   S   rq   rr   r2   r2   r2   r2   r5   r6   Ü  rG   z%TestFakePytest.test_mark.<locals>.foor*   c                   @   ó   e Zd Zdd„ ZdS )z%TestFakePytest.test_mark.<locals>.Fooc                 S   rq   rr   r2   ru   r2   r2   r5   r  ä  r  z)TestFakePytest.test_mark.<locals>.Foo.barN)rQ   rR   rS   r  r2   r2   r2   r5   ÚFooâ  s    r  )r   r¯   Úxdist_groupr  )r=   r6   r  r2   r2   r5   Ú	test_markÛ  s   
zTestFakePytest.test_markc                 C   s–   G dd„ dt jƒ}|  |dƒ¡}| ¡ sJ ‚t|jƒdksJ ‚|jd d dks*J ‚G dd„ dt jƒ}|  |dƒ¡}| ¡ s@J ‚t|jƒdksIJ ‚d S )Nc                   @   ó$   e Zd Zejjddddd„ ƒZdS )ú,TestFakePytest.test_skipif.<locals>.TestCaseTr    rŸ   c                 S   ó   ddksJ ‚d S rr   r2   ru   r2   r2   r5   r6   ë  ó   ú0TestFakePytest.test_skipif.<locals>.TestCase.fooN©rQ   rR   rS   r   r¯   r°   r6   r2   r2   r2   r5   ÚTestCaseê  ó    r  r6   r*   r   r    c                   @   r  )r  Fr    rŸ   c                 S   r  rr   r2   ru   r2   r2   r5   r6   õ  r  r  Nr  r2   r2   r2   r5   r  ô  r   ©r  r  r  ZwasSuccessfulrš   Zskipped©r=   r  r
  r2   r2   r5   Útest_skipifé  s   zTestFakePytest.test_skipifc                 C   sX   G dd„ dt jƒ}|  |dƒ¡}| ¡ sJ ‚t|jƒdksJ ‚|jd d dks*J ‚d S )Nc                   @   r  )z*TestFakePytest.test_skip.<locals>.TestCasec                 S   s   t  d¡ ddksJ ‚d S )Nr    r*   r   )r   Úskipru   r2   r2   r5   r6   ÿ  s   
z.TestFakePytest.test_skip.<locals>.TestCase.fooN)rQ   rR   rS   r6   r2   r2   r2   r5   r  þ  ó    r  r6   r*   r   r    r!  r"  r2   r2   r5   Ú	test_skipý  s
   zTestFakePytest.test_skipc              	   C   s  | j td}t |¡ ttj |d¡dƒ W d   ƒ n1 s w   Y  ttj |d¡dƒ}| t 	d¡ 
¡ ¡ W d   ƒ n1 sDw   Y  tj tjd|¡, t t ¡ ¡ t ¡ }W d   ƒ n1 siw   Y  | ¡ dksvJ ‚W d   ƒ d S 1 sw   Y  d S )N)Údirz__init__.pyr_   ztest_file.pyz¬                import unittest

                class TestCase(unittest.TestCase):
                    def test_passed(self):
                        pass
                r   r*   )ra   r   rY   r…   rb   rd   rŒ   rc   ÚtextwrapÚdedentÚlstripr   rT   Úobjectr\   r”   ró   r÷   rõ   rö   r   ÚmainZcountTestCases)r=   Ztmpdirrh   r  r2   r2   r5   Ú	test_main  s    
ÿúÿ
ÿ"ýzTestFakePytest.test_mainc                 C   s6  t  t¡ tjdtdd W d   ƒ n1 sw   Y  zt  t¡ tjdtdd W d   ƒ n1 s6w   Y  W n	 tyE   Y nw t d¡S t jtdd tjdtdd W d   ƒ n1 sew   Y  z!t jtdd tjdtdd W d   ƒ n1 s…w   Y  W n
 ty•   Y d S w t d¡S )Nr6   r*   )Ú
stacklevelr  rî   r  )	r   ZwarnsÚUserWarningÚwarningsÚwarnÚDeprecationWarningr  r   rñ   ru   r2   r2   r5   Ú
test_warns  s0   ÿÿ€ÿ
ÿÿ€ÿ
zTestFakePytest.test_warnsc                 C   s.   t  t jj¡ t  d¡‚1 sw   Y  d S )Nr    )r   rA   rñ   rò   ru   r2   r2   r5   Ú	test_fail5  s   
ÿzTestFakePytest.test_failN)rQ   rR   rS   r  r  r  r#  r&  r-  r3  r4  r2   r2   r2   r5   r  Â  s    r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestTestingUtilsc                 C   sL   t  ¡ }t|ƒ}| ¡  tdd„ | |j¡D ƒƒd }|ƒ | ¡ ks$J ‚d S )Nc                 s   ó     | ]}|d  dkr|V  qdS )r*   r›   Nr2   ©Ú.0Úxr2   r2   r5   Ú	<genexpr>?  ó   € z:TestTestingUtils.test_process_namespace.<locals>.<genexpr>r   )r\   r‘   r   ÚtestÚnextr]   Úgettersr›   )r=   r•   ÚnsrÛ   r2   r2   r5   Útest_process_namespace;  s
   z'TestTestingUtils.test_process_namespacec                 C   s:   t ƒ }tdd„ | |j¡D ƒƒd }|ƒ t ¡ ksJ ‚d S )Nc                 s   r6  )r*   Únet_if_addrsNr2   r7  r2   r2   r5   r:  D  r;  z9TestTestingUtils.test_system_namespace.<locals>.<genexpr>r   )r"   r=  r]   r>  r\   rA  )r=   r?  rÛ   r2   r2   r5   Útest_system_namespaceB  s   z&TestTestingUtils.test_system_namespaceN)rQ   rR   rS   r@  rB  r2   r2   r2   r5   r5  :  s    r5  c                   @   r  )ÚTestOtherUtilsc                 C   s.   t t dd¡dddƒƒsJ ‚t tƒ ƒrJ ‚d S )Nr6   za b cr*   r˜   r8   )r   rÌ   Ú
namedtupleÚtupleru   r2   r2   r5   Útest_is_namedtupleI  s   z!TestOtherUtils.test_is_namedtupleN)rQ   rR   rS   rF  r2   r2   r2   r5   rC  H  r%  rC  )?Ú__doc__rÌ   ró   r†   rõ   rY   r¹   r¼   rª   r(  r  r0  r   r\   Zpsutil.testsr   r   r   Zpsutil._commonr   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    r!   r"   r#   r$   r%   r&   r'   r(   rU   rw   r   r±   r¯   r  rØ   r  r5  rC  r2   r2   r2   r5   Ú<module>   sz   E(-LKNx