o
    îðh¢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sJ ‚|jdks!J ‚d S )Né   é   ©ÚretriesÚintervalÚlogfunc                      ó   ˆ rˆ   ¡  dd  ˆ sdS ©Nr*   r   ©Úpop© ©Úqueuer3   úO/var/www/vscode/kcb/lib/python3.10/site-packages/psutil/tests/test_testutils.pyÚfooF   ó
   þz2TestRetryDecorator.test_retry_success.<locals>.fooé   )r   ÚlistÚrangeÚ
call_count©ÚselfÚsleepr7   r3   r4   r6   Ú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 s&w   Y  |jdks2J ‚d S )Nr)   r*   r+   c                      r/   r0   r1   r3   r4   r3   r6   r7   T   r8   z2TestRetryDecorator.test_retry_failure.<locals>.fooé   )r   r:   r;   r   ÚraisesÚZeroDivisionErrorr<   r=   r3   r4   r6   Útest_retry_failureQ   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)Ú	TypeErrorr3   r3   r3   r6   r7   b   ó   z2TestRetryDecorator.test_exception_arg.<locals>.foor   )r   Ú
ValueErrorr   rB   rG   r<   r=   r3   r3   r6   Ú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w   Y  |jdks*J ‚d S )Nr)   r+   c                   S   ó   dd  d S r0   r3   r3   r3   r3   r6   r7   n   ó   z4TestRetryDecorator.test_no_interval_arg.<locals>.foor   ©r   r   rB   rC   r<   r=   r3   r3   r6   Ú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w   Y  |jdks*J ‚d S )Nr)   r*   r+   c                   S   rK   r0   r3   r3   r3   r3   r6   r7   x   rL   z0TestRetryDecorator.test_retries_arg.<locals>.foorM   r=   r3   r3   r6   Útest_retries_argv   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   rB   rI   r   )r>   r?   r3   r3   r6   Útest_retries_and_timeout_args€   s   "ÿz0TestRetryDecorator.test_retries_and_timeout_argsN)Ú__name__Ú
__module__Ú__qualname__r   Úpatchr@   rD   rJ   rN   rO   rQ   r3   r3   r3   r6   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+ 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ÚpsutilÚpidsr   rU   Úiterr   rB   ÚNoSuchProcess)r>   Únopidr3   r3   r6   Ú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Úwr7   ©Ú
get_testfnÚopenÚwriter&   rZ   ÚpathÚexists©r>   ÚtestfnÚfr3   r3   r6   Ú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 )Nrc   T)Úempty)re   rf   r&   rZ   rh   ri   ©r>   rk   r3   r3   r6   Ú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 )NrW   r   rX   )re   r   rU   r_   r   rB   ÚOSErrorr&   ro   r3   r3   r6   Ú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 )Nrc   r7   F)Údeleterd   rj   r3   r3   r6   Ú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*   r3   r3   r3   r3   r6   Ú<lambda>ª   ó    z3TestSyncTestUtils.test_call_until.<locals>.<lambda>r   ©r>   r3   r3   r6   Útest_call_until©   s   z!TestSyncTestUtils.test_call_untilN)	rR   rS   rT   rb   rm   rp   rr   rt   rz   r3   r3   r3   r6   rV   †   s    rV   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>   rl   r3   r3   r6   Útest_open_text¯   ó   
"ÿzTestFSTestUtils.test_open_textc                 C   r|   )NÚrb)r   r~   r   r€   r3   r3   r6   Útest_open_binary³   r‚   z TestFSTestUtils.test_open_binaryc                 C   s<   |   ¡ }t|ƒ tj |¡sJ ‚t|ƒ tj |¡sJ ‚d S rF   )re   r    rZ   rh   Úisdirro   r3   r3   r6   Ú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 )Nrc   zpsutil.tests.os.statÚ )Úside_effect)re   rf   Úcloser!   rZ   rh   ri   Úmkdirr   rU   rq   ÚerrnoÚEINVALr   rB   Úcalled)r>   rk   Úmr3   r3   r6   Ú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 rF   )re   rZ   ÚgetcwdrŠ   r   rh   Újoin)r>   rk   Úbaser3   r3   r6   Ú
test_chdirÒ   s   

ÿzTestFSTestUtils.test_chdirN)rR   rS   rT   r   r„   r†   r   r“   r3   r3   r3   r6   r{   ®   s    r{   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 rF   )	Úspawn_testprocr]   ÚProcessÚpidÚ
is_runningr   ÚtestsÚ_pids_startedÚ_subprocesses_started)r>   ÚsubpÚpr3   r3   r6   Ú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é   )Úspawn_children_pairr—   r˜   r]   r–   ÚchildrenÚlenÚppidrZ   r[   r$   )r>   ÚchildÚ
grandchildr¢   r3   r3   r6   Útest_spawn_children_pairå   s"   z)TestProcessUtils.test_spawn_children_pairú
POSIX only©Úreasonc                 C   s"   |   ¡ \}}| ¡ tjksJ ‚d S rF   )Úspawn_zombieÚstatusr]   ÚSTATUS_ZOMBIE)r>   Ú_parentÚzombier3   r3   r6   Ú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$   ÚassertPidGoner—   r]   r–   r   ÚPopenÚ
subprocessÚPIPEr   r   r«   )r>   r   Úcmdr—   Úparentr¯   r3   r3   r6   Útest_terminateÿ   s@   ýü
ûzTestProcessUtils.test_terminateN)rR   rS   rT   rž   r§   r   ÚmarkÚskipifr   r°   rº   r3   r3   r3   r6   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
p'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Úsr3   r3   r6   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)re   r   ÚfamilyÚsocketÚAF_UNIXrÃ   ÚSOCK_STREAMrÀ   rZ   rh   ri   ÚstatÚS_ISSOCKÚst_modeÚ
SOCK_DGRAM)r>   ÚnameÚsockr3   r3   r6   Ú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Úclientr3   r3   r6   Útest_tcp_socketpair;  s   
Püz TestNetUtils.test_tcp_socketpairz*/var/run/log UNIX socket opened by defaultc                 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   Únet_connectionsre   r%   rZ   rh   ri   rÈ   rÉ   rÊ   r£   rÀ   rÐ   r‰   )r>   r   rÖ   rÌ   rÑ   rÒ   r3   r3   r6   Útest_unix_socketpairD  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>   ÚsocksÚfamsÚtypesrÂ   r3   r3   r6   Útest_create_sockets^  s   

"óz TestNetUtils.test_create_socketsN)rR   rS   rT   r   r   r»   r¼   r   rÎ   rÓ   r   r   rØ   rã   r3   r3   r3   r6   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*   r3   r3   ©rç   r3   r6   Úfuns  s   z(TestMemLeakClass.test_times.<locals>.funrç   r   é
   é   )ÚtimesÚwarmup_timesé   )Úexecute)r>   ré   r3   rè   r6   Ú
test_timesq  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   ru   ©Nr   r3   r3   r3   r3   r6   rw   |  rx   z1TestMemLeakClass.test_param_err.<locals>.<lambda>r   ©rì   c                   S   ru   rñ   r3   r3   r3   r3   r6   rw   ~  rx   éÿÿÿÿc                   S   ru   rñ   r3   r3   r3   r3   r6   rw   €  rx   )rí   c                   S   ru   rñ   r3   r3   r3   r3   r6   rw   ‚  rx   )Ú	tolerancec                   S   ru   rñ   r3   r3   r3   r3   r6   rw   „  rx   )r,   )r   rB   rI   rï   ry   r3   r3   r6   Útest_param_errz  s   ÿÿÿÿ"ÿzTestMemLeakClass.test_param_errzskipped on CIr©   zskipped during test coveragec                 C   s`   g }|fdd„}z%t jtdd | j|dd W d   ƒ W ~d S 1 s%w   Y  W ~d S ~w )Nc                 S   s   |   dd ¡ d S )NÚøxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   ©Úappend©Úlsr3   r3   r6   ré   Œ  ó   z+TestMemLeakClass.test_leak_mem.<locals>.funz	extra-mem©Úmatchéd   rò   )r   rB   ÚAssertionErrorrï   )r>   rû   ré   r3   r3   r6   Ú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   ƒ d S 1 s)w   Y  d S )Nc                     s"   t tƒ} ˆ | j¡ ˆ  | ¡ d S rF   )rf   r~   Ú
addCleanupr‰   rù   )rl   ©Úboxr>   r3   r6   ré   —  s   z1TestMemLeakClass.test_unclosed_files.<locals>.funÚfdÚhandlez	unclosed rý   )r   r   rB   r   rï   )r>   ré   rÕ   r3   r  r6   Ú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 )NÚxxxxxxxxxxxxxxxxxxxxxxxxr÷   rø   r3   rú   r3   r6   ré   ¢  rü   z,TestMemLeakClass.test_tolerance.<locals>.funrÿ   r   i  €)rì   rí   rô   r*   )rï   r£   )r>   ré   rì   r3   rú   r6   Ú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¡ |   t|¡ W d   ƒ d S 1 s@w   Y  d S )Nc                   S   rK   r0   r3   r3   r3   r3   r6   Úfun_1­  s   z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_1c                   S   s   d S rF   r3   r3   r3   r3   r6   Úfun_2´  ó   z2TestMemLeakClass.test_execute_w_exc.<locals>.fun_2)Úexecute_w_excrC   r   rB   rq   r   )r>   r
  r  r3   r3   r6   Útest_execute_w_exc¬  s   ÿ"ÿz#TestMemLeakClass.test_execute_w_excN)rR   rS   rT   r   rð   rõ   r   r»   r¼   r	   r
   r  r  r	  r  r3   r3   r3   r6   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 rF   )ÚunittestÚ	TestSuiteÚaddTestÚTextTestRunnerÚrun)r>   ÚklassÚsuiteÚrunnerÚresultr3   r3   r6   Ú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 |  d¡‚)Nr*   r   r7   rý   Úbarz"foo" does not match "bar"úexception not raised)	r   rB   rC   Ú
isinstanceÚvaluerI   r   ÚstrÚfail)r>   ÚcmÚerrr3   r3   r6   Ú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   ru   rv   r3   r3   r3   r3   r6   r7   Ô  rH   z%TestFakePytest.test_mark.<locals>.foor*   c                   @   ó   e Zd Zdd„ ZdS )z%TestFakePytest.test_mark.<locals>.Fooc                 S   ru   rv   r3   ry   r3   r3   r6   r  Ü  r  z)TestFakePytest.test_mark.<locals>.Foo.barN)rR   rS   rT   r  r3   r3   r3   r6   ÚFooÚ  s    r$  )r   r»   Úxdist_groupr  )r>   r7   r$  r3   r3   r6   Ú	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 rv   r3   ry   r3   r3   r6   r7   ã  ó   ú0TestFakePytest.test_skipif.<locals>.TestCase.fooN©rR   rS   rT   r   r»   r¼   r7   r3   r3   r3   r6   ÚTestCaseâ  ó    r-  r7   r*   r   rª   c                   @   r'  )r(  Frª   r©   c                 S   r)  rv   r3   ry   r3   r3   r6   r7   í  r*  r+  Nr,  r3   r3   r3   r6   r-  ì  r.  ©r  r-  r  ÚwasSuccessfulr£   Úskipped©r>   r-  r  r3   r3   r6   Ú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   Úskipry   r3   r3   r6   r7   ÷  s   
z.TestFakePytest.test_skip.<locals>.TestCase.fooN)rR   rS   rT   r7   r3   r3   r3   r6   r-  ö  ó    r-  r7   r*   r   rª   r/  r2  r3   r3   r6   Ú	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|¡3 |  td¡ t ¡ }| ¡ dksfJ ‚W d   ƒ n1 spw   Y  W d   ƒ d S W d   ƒ d S 1 sˆw   Y  d S )	N)Údirz__init__.pyrc   ztest_file.pyz¬                import unittest

                class TestCase(unittest.TestCase):
                    def test_passed(self):
                        pass
                r   zFake pytest module was usedr*   )re   r   rZ   rŠ   rf   rh   r‘   rg   ÚtextwrapÚdedentÚlstripr   rU   Úobjectr]   r™   ÚassertWarnsRegexÚUserWarningr   ÚmainÚcountTestCases)r>   Útmpdirrl   r  r3   r3   r6   Ú	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 |  d¡‚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 |  d¡‚)Nr7   r*   )Ú
stacklevelr  rý   r  )r   Úwarnsr=  ÚwarningsÚwarnÚDeprecationWarningr   r  ry   r3   r3   r6   Ú
test_warns  s0   ÿÿ€ÿ
ÿÿ€ÿ
zTestFakePytest.test_warnsN)
rR   rS   rT   r  r"  r&  r3  r6  rA  rG  r3   r3   r3   r6   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¤   Nr3   ©Ú.0Úxr3   r3   r6   Ú	<genexpr>5  ó   € z:TestTestingUtils.test_process_namespace.<locals>.<genexpr>r   )r]   r–   r   ÚtestÚnextr_   Úgettersr¤   )r>   r   Únsré   r3   r3   r6   Útest_process_namespace1  s
   z'TestTestingUtils.test_process_namespacec                 C   s:   t ƒ }tdd„ | |j¡D ƒƒd }|ƒ t ¡ ksJ ‚d S )Nc                 s   rI  )r*   Únet_if_addrsNr3   rJ  r3   r3   r6   rM  :  rN  z9TestTestingUtils.test_system_namespace.<locals>.<genexpr>r   )r"   rP  r_   rQ  r]   rT  )r>   rR  ré   r3   r3   r6   Útest_system_namespace8  s   z&TestTestingUtils.test_system_namespaceN)rR   rS   rT   rS  rU  r3   r3   r3   r6   rH  0  s    rH  c                   @   r#  )ÚTestOtherUtilsc                 C   s.   t t dd¡dddƒƒsJ ‚t tƒ ƒrJ ‚d S )Nr7   za b cr*   r    r9   )r   rÙ   Ú
namedtupleÚtuplery   r3   r3   r6   Útest_is_namedtuple?  s   z!TestOtherUtils.test_is_namedtupleN)rR   rS   rT   rY  r3   r3   r3   r6   rV  >  r5  rV  )=Ú__doc__rÙ   r‹   rZ   rÅ   rÈ   r¶   r8  r  rD  r   r]   Úpsutil.testsr   r   r   Ú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(   rV   r{   r”   r½   r»   r%  ræ   r  rH  rV  r3   r3   r3   r6   Ú<module>   sv   E(-LHKu