o
    HXîhéY  ã                   @   sF  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Zd dl	m
Z
 dd„ Zdd„ Zd&dd	„Ze jd
d„ ƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZG d$d%„ d%eƒZdS )'é    N)Údedent)Úinterpretersc                 C   s>   t  ¡ \}}|  dd¡}td|› d|› dƒ}|t|ddfS )NÚ
z
                z-
        import contextlib
        with open(zg, 'w', encoding='utf-8') as spipe:
            with contextlib.redirect_stdout(spipe):
                z	
        úutf-8©Úencoding)ÚosÚpipeÚreplacer   Úopen)ÚscriptÚrÚwZindentedÚwrapped© r   ú@/opt/python-3.10.19/usr/lib/python3.10/test/test_interpreters.pyÚ_captured_script   s   þ
ür   c               	   C   s<   t  ¡ D ]} | jdkrqz|  ¡  W q ty   Y qw d S ©Nr   )r   Úlist_allÚidÚcloseÚRuntimeError©Úinterpr   r   r   Úclean_up_interpreters   s   
ÿûr   c                 C   sJ   t |ƒ\}}| | j||d | ¡ W  d   ƒ S 1 sw   Y  d S )N©Úchannels)r   ÚrunÚread)r   Zrequestr   r   Zrpiper   r   r   Ú_run_output"   s
   $þr   c                 #   sv    t  ¡ \‰}‡ ‡fdd„}tj|d}| ¡  d V  t|dƒ}| d¡ W d   ƒ n1 s0w   Y  | ¡  d S )Nc                      s   ˆ   tdˆ› dƒ¡ d S )Nz7
            # wait for "signal"
            with open(z5) as rpipe:
                rpipe.read()
            )r   r   r   ©r   r   r   r   r   ,   s   þz_running.<locals>.run©Útargetr   Údone)r   r	   Ú	threadingÚThreadÚstartr   ÚwriteÚjoin)r   r   r   ÚtZspiper   r    r   Ú_running)   s   €ÿr*   c                   @   s   e Zd Zdd„ ZdS )ÚTestBasec                 C   s
   t ƒ  d S ©N)r   ©Úselfr   r   r   ÚtearDown?   ó   
zTestBase.tearDownN)Ú__name__Ú
__module__Ú__qualname__r/   r   r   r   r   r+   =   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 )ÚCreateTestsc                 C   s*   t  ¡ }|  |t j¡ |  |t  ¡ ¡ d S r,   )r   ÚcreateÚassertIsInstanceÚInterpreterÚassertInr   ©r.   r   r   r   r   Útest_in_mainE   s   zCreateTests.test_in_mainc                    sn   t  ¡ ‰d ‰ ‡ ‡fdd„}t j|d}ˆ | ¡  W d   ƒ n1 s$w   Y  | ¡  |  ˆ t ¡ ¡ d S )Nc                      s   t  ¡ ‰ ˆ ¡  ˆ ¡  d S r,   )r   r5   ÚacquireÚreleaser   ©r   Úlockr   r   ÚfM   s   z%CreateTests.test_in_thread.<locals>.fr!   )r$   ÚLockr%   r&   r(   r8   r   r   ©r.   r?   r)   r   r=   r   Útest_in_threadJ   s   
ÿzCreateTests.test_in_threadc                 C   sH   t  ¡ \}t  ¡ }t|tdƒƒ}t  t|ƒ¡}|  t  ¡ |||g¡ d S )Nz‡
            from test.support import interpreters
            interp = interpreters.create()
            print(interp.id)
            )r   r   r5   r   r   r7   ÚintÚassertEqual)r.   Úmainr   ÚoutÚinterp2r   r   r   Útest_in_subinterpreterX   s
   
z"CreateTests.test_in_subinterpreterc                 C   sh   t t ¡ ƒ}g }tdƒD ]}t ¡ }| |¡ q|D ]}| ¡  qt ¡ }|  t t ¡ ƒ||hB ¡ d S ©Né   )Úsetr   r   Úranger5   Úappendr   rD   )r.   ÚbeforeZ
interp_lstÚ_Úinterpsr   r   r   r   Útest_after_destroy_allc   s   
z"CreateTests.test_after_destroy_allc                 C   s\   t t ¡ ƒ}t ¡ }t ¡ }t ¡ }| ¡  | ¡  t ¡ }|  t t ¡ ƒ|||hB ¡ d S r,   )rK   r   r   r5   r   rD   )r.   rN   Úinterp1rG   Úinterp3r   r   r   r   Útest_after_destroy_someq   s    z#CreateTests.test_after_destroy_someN)r1   r2   r3   r:   rB   rH   rQ   rT   r   r   r   r   r4   C   s    r4   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚGetCurrentTestsc                 C   s    t  ¡ }t  ¡ }|  ||¡ d S r,   )r   Úget_mainÚget_currentrD   )r.   rE   Úcurrentr   r   r   Ú	test_main   s   zGetCurrentTests.test_mainc                 C   s<   t  ¡ }t ¡ }t|tdƒƒ}t t|ƒ¡}|  ||¡ d S )Nz†
            from test.support import interpreters
            cur = interpreters.get_current()
            print(cur.id)
            )	Ú_interpretersrW   r   r5   r   r   r7   rC   ÚassertNotEqual)r.   rE   r   rF   rY   r   r   r   Útest_subinterpreter†   s
   z#GetCurrentTests.test_subinterpreterN)r1   r2   r3   rZ   r]   r   r   r   r   rV      ó    rV   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚListAllTestsc                 C   s   t  ¡ }|  dt|ƒ¡ d S ©Né   )r   r   rD   Úlen)r.   rP   r   r   r   Útest_initial”   s   zListAllTests.test_initialc                 C   sR   t  ¡ }t  ¡ }t  ¡ }g }t  ¡ D ]}| |j¡ q|  ||j|j|jg¡ d S r,   )r   rX   r5   r   rM   r   rD   ©r.   rE   ÚfirstÚsecondZidsr   r   r   r   Útest_after_creating˜   s   z ListAllTests.test_after_creatingc                 C   sV   t  ¡ }t  ¡ }t  ¡ }| ¡  g }t  ¡ D ]}| |j¡ q|  ||j|jg¡ d S r,   )r   rX   r5   r   r   rM   r   rD   rd   r   r   r   Útest_after_destroying£   s   z"ListAllTests.test_after_destroyingN)r1   r2   r3   rc   rg   rh   r   r   r   r   r_   ’   s    r_   c                   @   s‚   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze d	¡d
d„ ƒZ	e d	¡dd„ ƒZ
dd„ Ze d	¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestInterpreterAttrsc                 C   sL   t  ¡ }t  ¡ }t  ¡ }|  |jtj¡ |  |jtj¡ |  |jtj¡ d S r,   )r   rW   rX   r5   r6   r   r[   ZInterpreterID)r.   rE   rY   r   r   r   r   Útest_id_type²   s   z!TestInterpreterAttrs.test_id_typec                 C   s   t  ¡ }|  |jd¡ d S r   )r   rW   rD   r   ©r.   rE   r   r   r   Útest_main_idº   ó   z!TestInterpreterAttrs.test_main_idc                 C   óR   t  d¡}|  |jd¡ |  t¡ t  d¡ W d   ƒ d S 1 s"w   Y  d S ©Nra   Ú1)r   r7   rD   r   ÚassertRaisesÚ	TypeErrorr9   r   r   r   Útest_custom_id¾   ó
   
"ÿz#TestInterpreterAttrs.test_custom_idc                 C   ó@   t  d¡}|  t¡ d|_W d   ƒ d S 1 sw   Y  d S ©Nra   é   )r   r7   rq   ÚAttributeErrorr   r9   r   r   r   Útest_id_readonlyÅ   ó   
"ÿz%TestInterpreterAttrs.test_id_readonlyznot ready yet (see bpo-32604)c                 C   ó   t  ¡ }|  |j¡ d S r,   )r   rW   ÚassertFalseÚisolatedrk   r   r   r   Útest_main_isolatedÊ   ó   z'TestInterpreterAttrs.test_main_isolatedc                 C   r{   r,   )r   r5   r|   r}   r9   r   r   r   Ú$test_subinterpreter_isolated_defaultÏ   r   z9TestInterpreterAttrs.test_subinterpreter_isolated_defaultc                 C   s4   t jdd}t jdd}|  |j¡ |  |j¡ d S )NT©r}   F)r   r5   Ú
assertTruer}   r|   ©r.   rR   rG   r   r   r   Ú%test_subinterpreter_isolated_explicitÔ   ó   z:TestInterpreterAttrs.test_subinterpreter_isolated_explicitc                 C   s   t  d¡}|  |j¡ d S r`   )r   r7   r|   r}   r9   r   r   r   Útest_custom_isolated_defaultÚ   s   
z1TestInterpreterAttrs.test_custom_isolated_defaultc                 C   s8   t jddd}t jddd}|  |j¡ |  |j¡ d S )Nra   Tr   F)r   r7   r‚   r}   r|   rƒ   r   r   r   Útest_custom_isolated_explicitß   s   z2TestInterpreterAttrs.test_custom_isolated_explicitc                 C   ru   )Nra   T)r   r7   rq   rx   r}   r9   r   r   r   Útest_isolated_readonlyå   rz   z+TestInterpreterAttrs.test_isolated_readonlyc                 C   s,   t  ¡ }t  ¡ }|  ||¡ |  ||¡ d S r,   )r   r5   rD   r\   rƒ   r   r   r   Útest_equalityê   s   z"TestInterpreterAttrs.test_equalityN)r1   r2   r3   rj   rl   rs   ry   ÚunittestÚskipr~   r€   r„   r†   r‡   rˆ   r‰   r   r   r   r   ri   °   s    


ri   c                   @   sF   e Zd Zdd„ Ze d¡dd„ ƒZdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )ÚTestInterpreterIsRunningc                 C   s   t  ¡ }|  | ¡ ¡ d S r,   )r   rW   r‚   Ú
is_runningrk   r   r   r   rZ   ó   rm   z"TestInterpreterIsRunning.test_mainúFails on FreeBSDc                 C   s^   t  ¡ }|  | ¡ ¡ t|ƒ |  | ¡ ¡ W d   ƒ n1 s!w   Y  |  | ¡ ¡ d S r,   )r   r5   r|   r   r*   r‚   r9   r   r   r   r]   ÷   s   
ÿz,TestInterpreterIsRunning.test_subinterpreterc                 C   s4   t  ¡ }t|td|j› dƒƒ}|  | ¡ d¡ d S )Nz`
            import _xxsubinterpreters as _interpreters
            if _interpreters.is_running(zZ):
                print(True)
            else:
                print(False)
            ÚTrue)r   r5   r   r   r   rD   Ústrip)r.   r   rF   r   r   r   Útest_from_subinterpreter   s
   þz1TestInterpreterIsRunning.test_from_subinterpreterc                 C   sH   t  ¡ }| ¡  |  t¡ | ¡  W d   ƒ d S 1 sw   Y  d S r,   )r   r5   r   rq   r   r   r9   r   r   r   Útest_already_destroyed  ó
   
"ÿz/TestInterpreterIsRunning.test_already_destroyedc                 C   óB   t  d¡}|  t¡ | ¡  W d   ƒ d S 1 sw   Y  d S ©Né@B )r   r7   rq   r   r   r9   r   r   r   Útest_does_not_exist  ó   

"ÿz,TestInterpreterIsRunning.test_does_not_existc                 C   r”   ©Néÿÿÿÿ)r   r7   rq   Ú
ValueErrorr   r9   r   r   r   Útest_bad_id  r˜   z$TestInterpreterIsRunning.test_bad_idN)r1   r2   r3   rZ   rŠ   r‹   r]   r‘   r’   r—   rœ   r   r   r   r   rŒ   ñ   s    
rŒ   c                   @   sf   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d„ Ze d¡dd„ ƒZdS )ÚTestInterpreterClosec                 C   sb   t  ¡ }t  ¡ }t  ¡ }t  ¡ }|  tt  ¡ ƒ||||h¡ | ¡  |  tt  ¡ ƒ|||h¡ d S r,   )r   rW   r5   rD   rK   r   r   )r.   rE   rR   rG   rS   r   r   r   Ú
test_basic  s   
ÿÿzTestInterpreterClose.test_basicc                 C   st   t t ¡ ƒ}t ƒ }tdƒD ]}t ¡ }| |¡ q|  t t ¡ ƒ||B ¡ |D ]}| ¡  q'|  t t ¡ ƒ|¡ d S rI   )rK   r   r   rL   r5   ÚaddrD   r   )r.   rN   rP   rO   r   r   r   r   Útest_all)  s   
zTestInterpreterClose.test_allc                    sj   t  ¡ \‰ ˆ t¡ ˆ  ¡  W d   ƒ n1 sw   Y  ‡ ‡fdd„}tj|d}| ¡  | ¡  d S )Nc                      s8   ˆ  t¡ ˆ  ¡  W d   ƒ d S 1 sw   Y  d S r,   )rq   r   r   r   ©rE   r.   r   r   r?   9  s   
"ÿz)TestInterpreterClose.test_main.<locals>.fr!   )	r   r   rq   r   r   r$   r%   r&   r(   rA   r   r¡   r   rZ   4  s   

ÿzTestInterpreterClose.test_mainc                 C   sH   t  ¡ }| ¡  |  t¡ | ¡  W d   ƒ d S 1 sw   Y  d S r,   )r   r5   r   rq   r   r9   r   r   r   r’   A  r“   z+TestInterpreterClose.test_already_destroyedc                 C   r”   r•   )r   r7   rq   r   r   r9   r   r   r   r—   G  r˜   z(TestInterpreterClose.test_does_not_existc                 C   r”   r™   )r   r7   rq   r›   r   r9   r   r   r   rœ   L  r˜   z TestInterpreterClose.test_bad_idc                 C   sZ   t  ¡ \}t  ¡ }t|tdt|jƒ› dƒƒ}|  | ¡ d¡ |  t	t  ¡ ƒ||h¡ d S )Nza
            from test.support import interpreters
            interp = interpreters.Interpreter(z)
            try:
                interp.close()
            except RuntimeError:
                print('failed')
            Zfailed)
r   r   r5   r   r   rC   r   rD   r   rK   )r.   rE   r   rF   r   r   r   Útest_from_currentQ  s   
þz&TestInterpreterClose.test_from_currentc                 C   sh   t  ¡ \}t  ¡ }t  ¡ }|  tt  ¡ ƒ|||h¡ | td|j› dƒ¡ |  tt  ¡ ƒ||h¡ d S )Nzf
            from test.support import interpreters
            interp2 = interpreters.Interpreter(int(zs))
            interp2.close()
            interp3 = interpreters.create()
            interp3.close()
            )r   r   r5   rD   rK   r   r   r   )r.   rE   rR   rG   r   r   r   Útest_from_sibling_  s   
ÿþz&TestInterpreterClose.test_from_siblingc                    s4   t  ¡ ‰ ‡ fdd„}tj|d}| ¡  | ¡  d S )Nc                      s   ˆ   ¡  d S r,   )r   r   r   r   r   r?   p  s   z6TestInterpreterClose.test_from_other_thread.<locals>.fr!   )r   r5   r$   r%   r&   r(   rA   r   r   r   Útest_from_other_threadn  s
   z+TestInterpreterClose.test_from_other_threadrŽ   c              	   C   s€   t  ¡ \}t  ¡ }t|ƒ) |  t¡ | ¡  W d   ƒ n1 s"w   Y  |  | ¡ ¡ W d   ƒ d S 1 s9w   Y  d S r,   )	r   r   r5   r*   rq   r   r   r‚   r   )r.   rE   r   r   r   r   Útest_still_runningw  s   


ÿ"ýz'TestInterpreterClose.test_still_runningN)r1   r2   r3   rž   r    rZ   r’   r—   rœ   r¢   r£   r¤   rŠ   r‹   r¥   r   r   r   r   r     s    	r   c                   @   sh   e Zd Zdd„ Zdd„ Ze eedƒd¡dd„ ƒZ	e 
d	¡d
d„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestInterpreterRunc                 C   sZ   t  ¡ }tdƒ\}}| | |¡ | ¡ }W d   ƒ n1 s w   Y  |  |d¡ d S )Núprint("it worked!", end="")ú
it worked!)r   r5   r   r   r   rD   )r.   r   r   ÚfilerF   r   r   r   Útest_successƒ  s   

þzTestInterpreterRun.test_successc                    sz   t  ¡ ‰ tdƒ\‰}|! ‡ ‡fdd„}tj|d}| ¡  | ¡  | ¡ }W d   ƒ n1 s0w   Y  |  |d¡ d S )Nr§   c                      s   ˆ   ˆ¡ d S r,   )r   r   ©r   r   r   r   r?     s   z,TestInterpreterRun.test_in_thread.<locals>.fr!   r¨   )	r   r5   r   r$   r%   r&   r(   r   rD   )r.   r©   r?   r)   rF   r   r«   r   rB   Œ  s   
ù	z!TestInterpreterRun.test_in_threadÚforkztest needs os.fork()c                 C   sš   t  ¡ }dd l}|jddd4}| d¡ | ¡  d}td|j› d|› d	ƒ}| |¡ | 	d¡ | 
¡ }|  ||¡ W d   ƒ d S 1 sFw   Y  d S )
Nr   zw+r   r   Ú zspam spam spam spam spamz’
                import os
                try:
                    os.fork()
                except RuntimeError:
                    with open('zE', 'w', encoding='utf-8') as out:
                        out.write('z')
                )r   r5   ÚtempfileÚNamedTemporaryFiler'   Úflushr   Únamer   Úseekr   rD   )r.   r   r®   r©   Zexpectedr   Zcontentr   r   r   Ú	test_forkš  s    
û
ú

"ïzTestInterpreterRun.test_forkrŽ   c              	   C   sz   t  ¡ }t|ƒ+ |  t¡ | d¡ W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s6w   Y  d S )Núprint("spam"))r   r5   r*   rq   r   r   r9   r   r   r   Útest_already_running±  s   
ÿÿ"ÿz'TestInterpreterRun.test_already_runningc                 C   óD   t  d¡}|  t¡ | d¡ W d   ƒ d S 1 sw   Y  d S )Nr–   r´   )r   r7   rq   r   r   r9   r   r   r   r—   ¸  ó   
"ÿz&TestInterpreterRun.test_does_not_existc                 C   r¶   )Nrš   r´   )r   r7   rq   r›   r   r9   r   r   r   rœ   ½  r·   zTestInterpreterRun.test_bad_idc                 C   óB   t  ¡ }|  t¡ | d¡ W d   ƒ d S 1 sw   Y  d S )Né
   ©r   r5   rq   rr   r   r9   r   r   r   Útest_bad_scriptÂ  ó   "ÿz"TestInterpreterRun.test_bad_scriptc                 C   r¸   )Ns   print("spam")rº   r9   r   r   r   Útest_bytes_for_scriptÇ  r¼   z(TestInterpreterRun.test_bytes_for_scriptN)r1   r2   r3   rª   rB   rŠ   Z
skipUnlessÚhasattrr   r³   r‹   rµ   r—   rœ   r»   r½   r   r   r   r   r¦     s    	

r¦   c                   @   rU   )ÚTestIsShareablec              	   C   sT   g d¢}|D ]!}|   |¡ t |¡}|  |¡ W d   ƒ n1 s"w   Y  qd S )N)Nó   spamZspamr¹   iöÿÿÿ)ÚsubTestr   Úis_shareabler‚   )r.   Z
shareablesÚobjZ	shareabler   r   r   Útest_default_shareablesÑ  s   	
þ€ÿz'TestIsShareable.test_default_shareablesc                 C   s’   G dd„ dƒ}G dd„ dt ƒ}ddtdtttƒ tƒ d||d	ƒ|d
ƒg}|D ]!}|  t|ƒ¡ |  t 	|¡¡ W d   ƒ n1 sAw   Y  q%d S )Nc                   @   rU   )z2TestIsShareable.test_not_shareable.<locals>.Cheesec                 S   s
   || _ d S r,   ©r±   )r.   r±   r   r   r   Ú__init__â  r0   z;TestIsShareable.test_not_shareable.<locals>.Cheese.__init__c                 S   s   | j S r,   rÅ   r-   r   r   r   Ú__str__ä  s   z:TestIsShareable.test_not_shareable.<locals>.Cheese.__str__N)r1   r2   r3   rÆ   rÇ   r   r   r   r   ÚCheeseá  s    rÈ   c                   @   s   e Zd ZdS )z4TestIsShareable.test_not_shareable.<locals>.SubBytesN)r1   r2   r3   r   r   r   r   ÚSubBytesç  s    rÉ   TF.g      Y@ZWensleydalerÀ   )
ÚbytesÚNotImplementedÚtypeÚobjectÚ	ExceptionrÁ   Úreprr|   r   rÂ   )r.   rÈ   rÉ   Znot_shareablesrÃ   r   r   r   Útest_not_shareableà  s.   ñÿÿ€ÿz"TestIsShareable.test_not_shareableN)r1   r2   r3   rÄ   rÐ   r   r   r   r   r¿   Ï  s    r¿   c                   @   rU   )ÚTestChannelsc                 C   s,   t  ¡ \}}|  |t j¡ |  |t j¡ d S r,   )r   Úcreate_channelr6   ÚRecvChannelÚSendChannel)r.   r   Úsr   r   r   Útest_create  s   zTestChannels.test_createc                 C   sR   |   t ¡ g ¡ tƒ }tdƒD ]}t ¡ }| |¡ qtt ¡ ƒ}|   ||¡ d S rI   )rD   r   Zlist_all_channelsrK   rL   rÒ   rŸ   )r.   ÚcreatedrO   ÚchZafterr   r   r   Útest_list_all  s   zTestChannels.test_list_allN)r1   r2   r3   rÖ   rÙ   r   r   r   r   rÑ     r^   rÑ   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestRecvChannelAttrsc                 C   s    t  ¡ \}}|  |jtj¡ d S r,   ©r   rÒ   r6   r   r[   Z	ChannelID)r.   ÚrchrO   r   r   r   rj     ó   z!TestRecvChannelAttrs.test_id_typec                 C   rn   ro   )r   rÓ   rD   r   rq   rr   ©r.   rÝ   r   r   r   rs     rt   z#TestRecvChannelAttrs.test_custom_idc                 C   ru   rv   )r   rÓ   rq   rx   r   rß   r   r   r   ry     rz   z%TestRecvChannelAttrs.test_id_readonlyc                 C   s4   t  ¡ \}}t  ¡ \}}|  ||¡ |  ||¡ d S r,   ©r   rÒ   rD   r\   )r.   Úch1rO   Úch2r   r   r   r‰   $  r…   z"TestRecvChannelAttrs.test_equalityN©r1   r2   r3   rj   rs   ry   r‰   r   r   r   r   rÛ     ó
    rÛ   c                   @   rÚ   )
ÚTestSendChannelAttrsc                 C   s    t  ¡ \}}|  |jtj¡ d S r,   rÜ   )r.   rO   Úschr   r   r   rj   -  rÞ   z!TestSendChannelAttrs.test_id_typec                 C   rn   ro   )r   rÔ   rD   r   rq   rr   ©r.   ræ   r   r   r   rs   1  rt   z#TestSendChannelAttrs.test_custom_idc                 C   ru   rv   )r   rÔ   rq   rx   r   rç   r   r   r   ry   8  rz   z%TestSendChannelAttrs.test_id_readonlyc                 C   s4   t  ¡ \}}t  ¡ \}}|  ||¡ |  ||¡ d S r,   rà   )r.   rO   rá   râ   r   r   r   r‰   =  r…   z"TestSendChannelAttrs.test_equalityNrã   r   r   r   r   rå   +  rä   rå   c                   @   s   e Zd Zdd„ Zdd„ Ze d¡dd„ ƒZdd	„ Zd
d„ Z	dd„ Z
dd„ Ze d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestSendRecvc                 C   ó>   t  ¡ \}}d}| |¡ | ¡ }|  ||¡ |  ||¡ d S ©NrÀ   )r   rÒ   Úsend_nowaitÚrecvrD   ÚassertIsNot©r.   r   rÕ   ÚorigrÃ   r   r   r   Útest_send_recv_mainF  ó   
z TestSendRecv.test_send_recv_mainc                 C   ó   t  ¡ }| tdƒ¡ d S )Na>  
            from test.support import interpreters
            r, s = interpreters.create_channel()
            orig = b'spam'
            s.send_nowait(orig)
            obj = r.recv()
            assert obj == orig, 'expected: obj == orig'
            assert obj is not orig, 'expected: obj is not orig'
            ©r   r5   r   r   r9   r   r   r   Útest_send_recv_same_interpreterO  rm   z,TestSendRecv.test_send_recv_same_interpreterzbroken (see BPO-...)c                 C   ó|   t  ¡ \}}t  ¡ \}}d}| |¡ tt  ¡ tdt|ƒ› dƒt||dd}| ¡ }|  	|d¡ |  
t|ƒt|ƒ¡ d S )NrÀ   zÉ
                obj1 = r.recv()
                assert obj1 == b'spam', 'expected: obj1 == orig1'
                # When going to another interpreter we get a copy.
                assert id(obj1) != ú–, 'expected: obj1 is not orig1'
                orig2 = b'eggs'
                print(id(orig2))
                s.send_nowait(orig2)
                ©r   rÕ   r   ó   eggs)r   rÒ   rë   r   r5   r   r   Údictrì   rD   r\   rC   ©r.   Zr1Ús1Zr2Ús2Zorig1rF   Úobj2r   r   r   Ú%test_send_recv_different_interpreters[  ó   
ü
	õz2TestSendRecv.test_send_recv_different_interpretersc                    sh   t  ¡ \‰ ‰‡ ‡fdd„}tj|d}| ¡  d}ˆ |¡ | ¡  ˆ  ¡ }|  ||¡ |  	||¡ d S )Nc                     s>   	 zˆ   ¡ } W n tjy   t d¡ Y nw qˆ | ¡ d S )NTgš™™™™™¹?)rì   r   ÚChannelEmptyErrorÚtimeÚsleepÚsend)rÃ   r÷   r   r   r?   v  s   ÿüz8TestSendRecv.test_send_recv_different_threads.<locals>.fr!   rÀ   )
r   rÒ   r$   r%   r&   r  r(   rì   rD   rí   )r.   r?   r)   rï   rÃ   r   r÷   r   Ú test_send_recv_different_threadss  s   
z-TestSendRecv.test_send_recv_different_threadsc                 C   ré   rê   )r   rÒ   rë   Úrecv_nowaitrD   rí   rî   r   r   r   Útest_send_recv_nowait_main‰  rñ   z'TestSendRecv.test_send_recv_nowait_mainc                 C   s$   t  ¡ \}}| d ¡}|  |¡ d S r,   )r   rÒ   r  ZassertIsNone)r.   r   rO   rÃ   r   r   r   Ú'test_send_recv_nowait_main_with_default’  s   
z4TestSendRecv.test_send_recv_nowait_main_with_defaultc                 C   rò   )Na“  
            from test.support import interpreters
            r, s = interpreters.create_channel()
            orig = b'spam'
            s.send_nowait(orig)
            obj = r.recv_nowait()
            assert obj == orig, 'expected: obj == orig'
            # When going back to the same interpreter we get the same object.
            assert obj is not orig, 'expected: obj is not orig'
            ró   r9   r   r   r   Ú&test_send_recv_nowait_same_interpreter˜  rm   z3TestSendRecv.test_send_recv_nowait_same_interpreterc                 C   rõ   )NrÀ   zÐ
                obj1 = r.recv_nowait()
                assert obj1 == b'spam', 'expected: obj1 == orig1'
                # When going to another interpreter we get a copy.
                assert id(obj1) != rö   r÷   r   rø   )r   rÒ   rë   r   r5   r   r   rù   r  rD   r\   rC   rú   r   r   r   Ú,test_send_recv_nowait_different_interpreters¥  rÿ   z9TestSendRecv.test_send_recv_nowait_different_interpretersc                 C   óD   t  d¡}|  t j¡ | ¡  W d   ƒ d S 1 sw   Y  d S r•   )r   rÓ   rq   ÚChannelNotFoundErrorrì   ©r.   rØ   r   r   r   Ú test_recv_channel_does_not_exist½  ó   

"ÿz-TestSendRecv.test_recv_channel_does_not_existc                 C   óF   t  d¡}|  t j¡ | d¡ W d   ƒ d S 1 sw   Y  d S ©Nr–   rÀ   )r   rÔ   rq   r  r  r  r   r   r   Ú test_send_channel_does_not_existÂ  ó   
"ÿz-TestSendRecv.test_send_channel_does_not_existc                 C   r
  r•   )r   rÓ   rq   r  r  r  r   r   r   Ú'test_recv_nowait_channel_does_not_existÇ  r  z4TestSendRecv.test_recv_nowait_channel_does_not_existc                 C   r  r  )r   rÔ   rq   r  rë   r  r   r   r   Ú'test_send_nowait_channel_does_not_existÌ  r  z4TestSendRecv.test_send_nowait_channel_does_not_existc                 C   sF   t  ¡ \}}|  t j¡ | ¡  W d   ƒ d S 1 sw   Y  d S r,   )r   rÒ   rq   r   r  )r.   rØ   rO   r   r   r   Útest_recv_nowait_emptyÑ  s   
"ÿz#TestSendRecv.test_recv_nowait_emptyc           
      C   sÀ   t ƒ }t ¡ \}}| |¡}| d ¡ | d¡ | d¡ | d¡ | |¡}| |¡}| ¡ }| |¡}| |¡}	|  ||¡ |  |d ¡ |  |d¡ |  |d¡ |  |d¡ |  |	|¡ d S )Nra   rÀ   rø   )rÍ   r   rÒ   r  rë   ZassertIsrD   )
r.   ÚdefaultrÝ   ræ   Zobj1rý   Zobj3Zobj4Zobj5Zobj6r   r   r   Útest_recv_nowait_defaultÖ  s$   








z%TestSendRecv.test_recv_nowait_defaultN)r1   r2   r3   rð   rô   rŠ   r‹   rþ   r  r  r  r  r	  r  r  r  r  r  r  r   r   r   r   rè   D  s"    	
	
rè   r,   )Ú
contextlibr   r$   Útextwrapr   rŠ   r  Z_xxsubinterpretersr[   Ztest.supportr   r   r   r   Úcontextmanagerr*   ZTestCaser+   r4   rV   r_   ri   rŒ   r   r¦   r¿   rÑ   rÛ   rå   rè   r   r   r   r   Ú<module>   s4    


<A+eN2