a
    QýIh¢G  ã                   @   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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m.Z. dd%lm/Z/ dd&lm0Z0 dd'lm1Z1 G d(d)„ d)eƒZ2G d*d+„ d+eƒZ3G d,d-„ d-eƒZ4G d.d/„ d/eƒZ5G d0d1„ d1eƒZ6e&j7j8d2d3G d4d5„ d5eƒƒZ9G 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s4J ‚|jdksBJ ‚d S )Né   é   ©ÚretriesÚintervalZlogfunc                      s   ˆ rˆ   ¡  dd  q dS ©Nr*   r   ©Úpop© ©Úqueuer1   úU/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/psutil/tests/test_testutils.pyÚfooF   s    
z2TestRetryDecorator.test_retry_success.<locals>.fooé   )r   ÚlistÚrangeÚ
call_count©ÚselfÚsleepr5   r1   r2   r4   Útest_retry_successB   s
    z%TestRetryDecorator.test_retry_successc                    sh   t ddd d‡ fdd„ƒ}ttdƒƒ‰ t t¡ |ƒ  W d   ƒ n1 sL0    Y  |jdksdJ ‚d S )Nr)   r*   r+   c                      s   ˆ rˆ   ¡  dd  q dS r.   r/   r1   r2   r1   r4   r5   T   s    
z2TestRetryDecorator.test_retry_failure.<locals>.fooé   )r   r7   r8   r   ÚraisesÚZeroDivisionErrorr9   r:   r1   r2   r4   Útest_retry_failureQ   s    $z%TestRetryDecorator.test_retry_failurec                 C   sV   t tdddd„ ƒ}t t¡ |ƒ  W d   ƒ n1 s:0    Y  |jdksRJ ‚d S )Nr*   )Ú	exceptionr-   c                   S   s   t ‚d S ©N)Ú	TypeErrorr1   r1   r1   r4   r5   b   s    z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   Ú
ValueErrorr   r?   rD   r9   r:   r1   r1   r4   Útest_exception_arg`   s
    

$z%TestRetryDecorator.test_exception_argc                 C   sX   t dd d ddd„ ƒ}t t¡ |ƒ  W d   ƒ n1 s<0    Y  |jdksTJ ‚d S )Nr)   r+   c                   S   s   dd  d S r.   r1   r1   r1   r1   r4   r5   n   s    z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   ©r   r   r?   r@   r9   r:   r1   r1   r4   Útest_no_interval_argj   s
    
$z'TestRetryDecorator.test_no_interval_argc                 C   sX   t ddd ddd„ ƒ}t t¡ |ƒ  W d   ƒ n1 s<0    Y  |jdksTJ ‚d S )Nr)   r*   r+   c                   S   s   dd  d S r.   r1   r1   r1   r1   r4   r5   x   s    z0TestRetryDecorator.test_retries_arg.<locals>.foorG   r:   r1   r1   r4   Útest_retries_argv   s
    
$z#TestRetryDecorator.test_retries_argc                 C   s:   t  t¡ tddd W d   ƒ n1 s,0    Y  d S )Nr)   r*   )r,   Útimeout)r   r?   rE   r   )r;   r<   r1   r1   r4   Útest_retries_and_timeout_args€   s    z0TestRetryDecorator.test_retries_and_timeout_argsN)Ú__name__Ú
__module__Ú__qualname__r   Úpatchr=   rA   rF   rH   rI   rK   r1   r1   r1   r4   r(   A   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D t	 
tj¡ t |ƒ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  d S )NiŸ† úpsutil.tests.retry.__iter__r   ©Zreturn_value)r'   ÚosÚgetpidÚmaxÚpsutilZpidsr   rO   Úiterr   r?   ZNoSuchProcess)r;   Znopidr1   r1   r4   Útest_wait_for_pid‡   s
    z#TestSyncTestUtils.test_wait_for_pidc                 C   sX   |   ¡ }t|dƒ}| d¡ W d   ƒ n1 s20    Y  t|ƒ tj |¡rTJ ‚d S )NÚwr5   ©Ú
get_testfnÚopenÚwriter&   rS   ÚpathÚexists©r;   ÚtestfnÚfr1   r1   r4   Útest_wait_for_fileŽ   s
    (z$TestSyncTestUtils.test_wait_for_filec                 C   sR   |   ¡ }t|dƒ W d   ƒ n1 s(0    Y  t|dd tj |¡rNJ ‚d S )NrY   T)Úempty)r[   r\   r&   rS   r^   r_   ©r;   ra   r1   r1   r4   Útest_wait_for_file_empty•   s
    z*TestSyncTestUtils.test_wait_for_file_emptyc              	   C   sr   |   ¡ }tjdtdgƒdB t t¡ t|ƒ W d   ƒ n1 sF0    Y  W d   ƒ n1 sd0    Y  d S )NrQ   r   rR   )r[   r   rO   rW   r   r?   ÚOSErrorr&   re   r1   r1   r4   Útest_wait_for_file_no_fileœ   s    z,TestSyncTestUtils.test_wait_for_file_no_filec                 C   s\   |   ¡ }t|dƒ}| d¡ W d   ƒ n1 s20    Y  t|dd tj |¡sXJ ‚d S )NrY   r5   F)ÚdeleterZ   r`   r1   r1   r4   Útest_wait_for_file_no_delete¢   s
    (z.TestSyncTestUtils.test_wait_for_file_no_deletec                 C   s   t dd„ ƒ d S )Nc                   S   s   dS ©Nr*   r1   r1   r1   r1   r4   Ú<lambda>ª   ó    z3TestSyncTestUtils.test_call_until.<locals>.<lambda>r   ©r;   r1   r1   r4   Útest_call_until©   s    z!TestSyncTestUtils.test_call_untilN)	rL   rM   rN   rX   rc   rf   rh   rj   ro   r1   r1   r1   r4   rP   †   s   rP   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   s:   t tƒ}|jdksJ ‚W d   ƒ n1 s,0    Y  d S )NÚr)r   Ú__file__Úmode©r;   rb   r1   r1   r4   Útest_open_text¯   s    
zTestFSTestUtils.test_open_textc                 C   s:   t tƒ}|jdksJ ‚W d   ƒ n1 s,0    Y  d S )NÚrb)r   rr   rs   rt   r1   r1   r4   Útest_open_binary³   s    
z TestFSTestUtils.test_open_binaryc                 C   s<   |   ¡ }t|ƒ tj |¡s J ‚t|ƒ tj |¡s8J ‚d S rC   )r[   r    rS   r^   Úisdirre   r1   r1   r4   Útest_safe_mkdir·   s
    zTestFSTestUtils.test_safe_mkdirc              	   C   sÎ   |   ¡ }t|dƒ ¡  t|ƒ tj |¡r.J ‚t|ƒ t |¡ t|ƒ tj |¡rXJ ‚tj	dt
tjdƒdL}t t
¡ t|ƒ W d   ƒ n1 s˜0    Y  |js¬J ‚W d   ƒ n1 sÀ0    Y  d S )NrY   zpsutil.tests.os.statÚ )Zside_effect)r[   r\   Úcloser!   rS   r^   r_   Úmkdirr   rO   rg   ÚerrnoÚEINVALr   r?   Úcalled)r;   ra   Úmr1   r1   r4   Útest_safe_rmpath¾   s    
ÿ&z TestFSTestUtils.test_safe_rmpathc                 C   sp   |   ¡ }t ¡ }t |¡ t|ƒ* t ¡ tj ||¡ks>J ‚W d   ƒ n1 sR0    Y  t ¡ |kslJ ‚d S rC   )r[   rS   Úgetcwdr|   r   r^   Újoin)r;   ra   Úbaser1   r1   r4   Ú
test_chdirÒ   s    

8zTestFSTestUtils.test_chdirN)rL   rM   rN   ru   rw   ry   r   r…   r1   r1   r1   r4   rp   ®   s
   rp   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ƒ  | ¡ r2J ‚tjjr>J ‚tjjrJJ ‚d S rC   )	Úspawn_testprocrV   ÚProcessÚpidÚ
is_runningr   ÚtestsZ_pids_startedZ_subprocesses_started)r;   ZsubpÚpr1   r1   r4   Útest_reap_childrenÜ   s    z#TestProcessUtils.test_reap_childrenc                 C   sä   |   ¡ \}}|j|jksJ ‚| ¡ s(J ‚| ¡ s4J ‚t ¡  ¡ }||gksNJ ‚t ¡ jdd}t|ƒdksnJ ‚||v szJ ‚||v s†J ‚| ¡ t 	¡ ksšJ ‚| ¡ |jks¬J ‚t
|ƒ | ¡ rÀJ ‚| ¡ sÌJ ‚t
|ƒ | ¡ ràJ ‚d S )NT)Ú	recursiveé   )Zspawn_children_pairr‰   rŠ   rV   rˆ   ÚchildrenÚlenÚppidrS   rT   r$   )r;   ÚchildZ
grandchildr   r1   r1   r4   Útest_spawn_children_pairå   s"    z)TestProcessUtils.test_spawn_children_pairú
POSIX only©Úreasonc                 C   s"   |   ¡ \}}| ¡ tjksJ ‚d S rC   )Úspawn_zombieÚstatusrV   ZSTATUS_ZOMBIE)r;   Ú_parentÚzombier1   r1   r4   Ú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rê|  ¡ \}}t|ƒ t|ƒ |  |j¡ |  |j¡ d S )Nz-cz3import time; [time.sleep(0.1) for x in range(100)];)ÚstdoutÚstderrÚenv)r‡   r$   ZassertPidGoner‰   rV   rˆ   r   ÚPopenÚ
subprocessÚPIPEr   r   r˜   )r;   rŒ   Úcmdr‰   Úparentr›   r1   r1   r4   Útest_terminateÿ   s>    ýü
zTestProcessUtils.test_terminateN)rL   rM   rN   r   r”   r   ÚmarkÚskipifr   rœ   r¥   r1   r1   r1   r4   r†   Û   s
   	
r†   c                   @   sl   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
pNed	dd
d„ ƒƒZdd„ ZdS )ÚTestNetUtilsc                 C   sL   t ƒ }td|fd$}| ¡ d |ks*J ‚W d   ƒ n1 s>0    Y  d S )Nrz   ©Úaddrr*   )r   r   Úgetsockname)r;   ÚportÚsr1   r1   r4   r   (  s    zTestNetUtils.bind_socketr•   r–   c                 C   sÐ   |   ¡ }t|ƒf}|jtjks"J ‚|jtjks2J ‚| ¡ |ksBJ ‚tj	 
|¡sRJ ‚t t |¡j¡shJ ‚W d   ƒ n1 s|0    Y  |   ¡ }t|tjd }|jtjks®J ‚W d   ƒ n1 sÂ0    Y  d S )N)Útype)r[   r   ÚfamilyÚsocketÚAF_UNIXr®   ÚSOCK_STREAMr«   rS   r^   r_   ÚstatÚS_ISSOCKÚst_modeÚ
SOCK_DGRAM)r;   ÚnameÚsockr1   r1   r4   Útest_bind_unix_socket-  s    
4z"TestNetUtils.test_bind_unix_socketc              	   C   s˜   dt ƒ f}ttj|d\}}|d |@ | ¡ |ks8J ‚| ¡ |ksHJ ‚| ¡ |ksXJ ‚W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  d S )Nz	127.0.0.1r©   )r   r#   r°   ÚAF_INETr«   Úgetpeername)r;   rª   ÚserverÚclientr1   r1   r4   Útest_tcp_socketpair;  s    
z TestNetUtils.test_tcp_socketpairz*/var/run/log UNIX socket opened by defaultc                 C   sÚ   t  ¡ }| ¡ }t|jddƒr$J ‚|  ¡ }t|ƒ\}}zŠtj 	|¡sJJ ‚t
 t 
|¡j¡s`J ‚| ¡ | dkstJ ‚tt|jddƒƒdksJ ‚| ¡ |ks J ‚| ¡ |ks°J ‚W | ¡  | ¡  n| ¡  | ¡  0 d S )NÚunix)Úkindr   )rV   rˆ   Únum_fdsr   Znet_connectionsr[   r%   rS   r^   r_   r³   r´   rµ   r‘   r«   r»   r{   )r;   rŒ   rÁ   r·   r¼   r½   r1   r1   r4   Útest_unix_socketpairD  s*    ÿýÿ
ÿz!TestNetUtils.test_unix_socketpairc                 C   sÞ   t ƒ Ä}t t¡}t t¡}|D ]2}||j  d7  < || tjtj¡  d7  < q |tj	 dksfJ ‚t
ƒ r~|tj dks~J ‚tr˜tr˜|tj dks˜J ‚|tj dksªJ ‚|tj dks¼J ‚W d   ƒ n1 sÐ0    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­   r1   r1   r4   Útest_create_sockets^  s    

z TestNetUtils.test_create_socketsN)rL   rM   rN   r   r   r¦   r§   r   r¹   r¾   r   r   rÂ   rÌ   r1   r1   r1   r4   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s4J ‚d S )	Nc                      s   ˆ d  d7  < d S )NÚcntr*   r1   r1   ©rÐ   r1   r4   Úfuns  s    z(TestMemLeakClass.test_times.<locals>.funrÐ   r   é
   é   )ÚtimesÚwarmup_timesé   )Úexecute)r;   rÒ   r1   rÑ   r4   Ú
test_timesq  s    zTestMemLeakClass.test_timesc                 C   s2  t  t¡" | jdd„ dd W d   ƒ n1 s20    Y  t  t¡" | jdd„ dd W d   ƒ n1 sn0    Y  t  t¡" | jdd„ dd W d   ƒ n1 sª0    Y  t  t¡" | jd	d„ dd
 W d   ƒ n1 sæ0    Y  t  t¡" | jdd„ dd W d   ƒ n1 s$0    Y  d S )Nc                   S   s   dS ©Nr   r1   r1   r1   r1   r4   rl   |  rm   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   ©rÕ   c                   S   s   dS rÚ   r1   r1   r1   r1   r4   rl   ~  rm   éÿÿÿÿc                   S   s   dS rÚ   r1   r1   r1   r1   r4   rl   €  rm   )rÖ   c                   S   s   dS rÚ   r1   r1   r1   r1   r4   rl   ‚  rm   )Ú	tolerancec                   S   s   dS rÚ   r1   r1   r1   r1   r4   rl   „  rm   )r,   )r   r?   rE   rØ   rn   r1   r1   r4   Útest_param_errz  s    0000zTestMemLeakClass.test_param_errzskipped on CIr–   zskipped during test coveragec                 C   s\   g }|fdd„}zBt jtdd | j|dd W d   ƒ n1 sD0    Y  W ~n~0 d S )Nc                 S   s   |   dd ¡ d S )NZøxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   ©Úappend©Úlsr1   r1   r4   rÒ   Œ  s    z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem©Úmatchéd   rÛ   )r   r?   ÚAssertionErrorrØ   )r;   rã   rÒ   r1   r1   r4   Útest_leak_mem†  s    .zTestMemLeakClass.test_leak_memc                    s^   ‡ ‡fdd„}g ‰ t rdnd}tjtd| d ˆ |¡ W d   ƒ n1 sP0    Y  d S )Nc                     s"   t tƒ} ˆ | j¡ ˆ  | ¡ d S rC   )r\   rr   Z
addCleanupr{   rá   )rb   ©Úboxr;   r1   r4   rÒ   —  s    z1TestMemLeakClass.test_unclosed_files.<locals>.funÚfdÚhandlez	unclosed rä   )r   r   r?   rç   rØ   )r;   rÒ   rÀ   r1   ré   r4   Ú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à   r1   râ   r1   r4   rÒ   ¢  s    z,TestMemLeakClass.test_tolerance.<locals>.funræ   r   i  €)rÕ   rÖ   rÝ   r*   )rØ   r‘   )r;   rÒ   rÕ   r1   râ   r4   Útest_tolerance¡  s    ÿzTestMemLeakClass.test_tolerancec                 C   sŒ   dd„ }|   t|¡ t t¡ |   t|¡ W d   ƒ n1 s@0    Y  dd„ }t t¡ |   t|¡ W d   ƒ n1 s~0    Y  d S )Nc                   S   s   dd  d S r.   r1   r1   r1   r1   r4   Úfun_1­  s    z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_1c                   S   s   d S rC   r1   r1   r1   r1   r4   Úfun_2´  s    z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_2)Zexecute_w_excr@   r   r?   rg   rç   )r;   rï   rð   r1   r1   r4   Útest_execute_w_exc¬  s    *z#TestMemLeakClass.test_execute_w_excN)rL   rM   rN   r   rÙ   rÞ   r   r¦   r§   r	   r
   rè   rí   rî   rñ   r1   r1   r1   r4   rÏ   o  s   
rÏ   c                   @   sD   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S )ÚTestFakePytestc                 C   s(   t  ¡ }| |¡ t  ¡ }| |¡}|S rC   )ÚunittestZ	TestSuiteZaddTestZTextTestRunnerÚrun)r;   ÚklassÚsuiteÚrunnerÚresultr1   r1   r4   Úrun_test_class¼  s
    

zTestFakePytest.run_test_classc              
   C   sö   t  t¡}dd  W d   ƒ n1 s(0    Y  t|jtƒsBJ ‚t jtdd}tdƒ‚W d   ƒ n1 sn0    Y  z:t jtdd}tdƒ‚W d   ƒ n1 s¦0    Y  W n4 tyæ } zt|ƒdksÒJ ‚W Y d }~nd }~0 0 |  d¡‚d S )Nr*   r   r5   rä   Úbarz"foo" does not match "bar"úexception not raised)	r   r?   r@   Ú
isinstanceÚvaluerE   rç   ÚstrÚfail)r;   ÚcmÚerrr1   r1   r4   Ú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sRJ ‚d S )NrÍ   rÎ   c                   S   s   dS rk   r1   r1   r1   r1   r4   r5   Ô  s    z%TestFakePytest.test_mark.<locals>.foor*   c                   @   s   e Zd Zdd„ ZdS )z%TestFakePytest.test_mark.<locals>.Fooc                 S   s   dS rk   r1   rn   r1   r1   r4   rú   Ü  s    z)TestFakePytest.test_mark.<locals>.Foo.barN)rL   rM   rN   rú   r1   r1   r1   r4   ÚFooÚ  s   r  )r   r¦   Úxdist_grouprú   )r;   r5   r  r1   r1   r4   Ú	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sTJ ‚G dd„ dt jƒ}|  |dƒ¡}| ¡ s€J ‚t|jƒdks’J ‚d S )Nc                   @   s$   e Zd Zejjddddd„ ƒZdS )ú,TestFakePytest.test_skipif.<locals>.TestCaseTr—   r–   c                 S   s   ddksJ ‚d S rk   r1   rn   r1   r1   r4   r5   ã  s    ú0TestFakePytest.test_skipif.<locals>.TestCase.fooN©rL   rM   rN   r   r¦   r§   r5   r1   r1   r1   r4   ÚTestCaseâ  s   r	  r5   r*   r   r—   c                   @   s$   e Zd Zejjddddd„ ƒZdS )r  Fr—   r–   c                 S   s   ddksJ ‚d S rk   r1   rn   r1   r1   r4   r5   í  s    r  Nr  r1   r1   r1   r4   r	  ì  s   ©ró   r	  rù   ZwasSuccessfulr‘   Zskipped©r;   r	  rø   r1   r1   r4   Ú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sTJ ‚d S )Nc                   @   s   e Zd Zdd„ ZdS )z*TestFakePytest.test_skip.<locals>.TestCasec                 S   s   t  d¡ ddksJ ‚d S )Nr—   r*   r   )r   Úskiprn   r1   r1   r4   r5   ÷  s    
z.TestFakePytest.test_skip.<locals>.TestCase.fooN)rL   rM   rN   r5   r1   r1   r1   r4   r	  ö  s   r	  r5   r*   r   r—   r
  r  r1   r1   r4   Ú	test_skipõ  s
    zTestFakePytest.test_skipc              	   C   s  | j td}t |¡ ttj |d¡dƒ W d   ƒ n1 s@0    Y  ttj |d¡dƒ$}| t 	d¡ 
¡ ¡ W d   ƒ n1 sˆ0    Y  tj tjd|¡T |  td¡( t ¡ }| ¡ dksÌJ ‚W d   ƒ n1 sà0    Y  W d   ƒ n1 sþ0    Y  d S )	N)Údirz__init__.pyrY   ztest_file.pyz¬                import unittest

                class TestCase(unittest.TestCase):
                    def test_passed(self):
                        pass
                r   zFake pytest module was usedr*   )r[   r   rS   r|   r\   r^   rƒ   r]   ÚtextwrapÚdedentÚlstripr   rO   ÚobjectrV   r‹   ZassertWarnsRegexÚUserWarningr   ÚmainZcountTestCases)r;   Ztmpdirrb   rö   r1   r1   r4   Ú	test_main   s    
2ÿzTestFakePytest.test_mainc                 C   s<  t  t¡  tjdtdd W d   ƒ n1 s00    Y  z>t  t¡  tjdtdd W d   ƒ n1 sl0    Y  W n tyŠ   Y n0 |  d¡‚t jtdd  tjdtdd W d   ƒ n1 sÊ0    Y  zDt jtdd  tjdtdd W d   ƒ n1 s0    Y  W n ty,   Y n0 |  d¡‚d S )Nr5   r*   )Ú
stacklevelrû   rä   rú   )r   Zwarnsr  ÚwarningsÚwarnÚDeprecationWarningrç   rÿ   rn   r1   r1   r4   Ú
test_warns  s     .2
.4zTestFakePytest.test_warnsN)
rL   rM   rN   rù   r  r  r  r  r  r  r1   r1   r1   r4   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sHJ ‚d S )Nc                 s   s   | ]}|d  dkr|V  qdS )r*   r’   Nr1   ©Ú.0Úxr1   r1   r4   Ú	<genexpr>5  rm   z:TestTestingUtils.test_process_namespace.<locals>.<genexpr>r   )rV   rˆ   r   ÚtestÚnextrW   Úgettersr’   )r;   rŒ   ÚnsrÒ   r1   r1   r4   Útest_process_namespace1  s
    z'TestTestingUtils.test_process_namespacec                 C   s:   t ƒ }tdd„ | |j¡D ƒƒd }|ƒ t ¡ ks6J ‚d S )Nc                 s   s   | ]}|d  dkr|V  qdS )r*   Únet_if_addrsNr1   r  r1   r1   r4   r   :  rm   z9TestTestingUtils.test_system_namespace.<locals>.<genexpr>r   )r"   r"  rW   r#  rV   r&  )r;   r$  rÒ   r1   r1   r4   Útest_system_namespace8  s    z&TestTestingUtils.test_system_namespaceN)rL   rM   rN   r%  r'  r1   r1   r1   r4   r  0  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚTestOtherUtilsc                 C   s.   t t dd¡dddƒƒsJ ‚t tƒ ƒr*J ‚d S )Nr5   za b cr*   r   r6   )r   rÃ   Ú
namedtupleÚtuplern   r1   r1   r4   Útest_is_namedtuple?  s    z!TestOtherUtils.test_is_namedtupleN)rL   rM   rN   r+  r1   r1   r1   r4   r(  >  s   r(  )=Ú__doc__rÃ   r}   rS   r°   r³   r¡   r  ró   r  r   rV   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(   rP   rp   r†   r¨   r¦   r  rÏ   rò   r  r(  r1   r1   r1   r4   Ú<module>   st   E(-LHKu