
    <e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
  e
j        d          Zd dl	mZ d Zd Zd%d	Ze j        d
             Z G d dej                  Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d e          Z G d! d"e          Z G d# d$e          Z dS )&    N)dedent)support)import_helper_xxsubinterpreters)interpretersc                     t          j                    \  }}|                     dd          }t          d| d| d          }|t	          |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windentedwrappeds        -/usr/lib/python3.11/test/test_interpreters.py_captured_scriptr      st    799DAq~~d$899H   	    G DW-----    c                      t          j                    D ]3} | j        dk    r	 |                                  $# t          $ r Y 0w xY wd S Nr   )r   list_allidcloseRuntimeErrorinterps    r   clean_up_interpretersr!      sf    '))  9>>	LLNNNN 	 	 	D	 s   8
AAc                     t          |          \  }}|5  |                     ||           |                                cd d d            S # 1 swxY w Y   d S )Nchannels)r   runread)r    requestr$   r   rpipes        r   _run_outputr)   $   s    $W--MFE	  

6H
---zz||                 s   +AAAc              #   B   K   t          j                    \  } fd}t          j        |          }|                                 d V  t          |d          5 }|                    d           d d d            n# 1 swxY w Y   |                                 d S )Nc                  T                          t          d d                     d S )Nz7
            # wait for "signal"
            with open(z5) as rpipe:
                rpipe.read()
            )r%   r   )r    r   s   r   r%   z_running.<locals>.run.   sF    

6      	 	 	 	 	r   targetr   done)r   r   	threadingThreadstartr   writejoin)r    r   r%   tspiper   s   `    @r   _runningr6   +   s      799DAq      	$$$AGGIII	EEE	a F              FFHHHHHs   B  BBc                       e Zd Zd ZdS )TestBasec                 "    t                       d S N)r!   selfs    r   tearDownzTestBase.tearDownA   s    r   N)__name__
__module____qualname__r=    r   r   r8   r8   ?   s#                 r   r8   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )CreateTestsc                     t          j                    }|                     |t           j                   |                     |t          j                               d S r:   )r   createassertIsInstanceInterpreterassertInr   r<   r    s     r   test_in_mainzCreateTests.test_in_mainG   sL    $&&fl&>???fl35566666r   c                 <   t          j                    d fd}t          j        |          }5  |                                 d d d            n# 1 swxY w Y   |                                 |                     t          j                               d S )Nc                  ~    t          j                                                                                       d S r:   )r   rE   acquirerelease)r    locks   r   fz%CreateTests.test_in_thread.<locals>.fO   s/    !(**FLLNNNLLNNNNNr   r,   )r/   Lockr0   r1   r3   rH   r   r   )r<   rP   r4   r    rO   s      @@r   test_in_threadzCreateTests.test_in_threadL   s    ~	 	 	 	 	 	
 A&&& 	 	GGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 		fl35566666s   AAAc                 &   t          j                    \  }t          j                    }t          |t	          d                    }t          j        t          |                    }|                     t          j                    |||g           d S )Nz
            from test.support import interpreters
            interp = interpreters.create()
            print(interp.id)
            )r   r   rE   r)   r   rG   intassertEqual)r<   mainr    outinterp2s        r   test_in_subinterpreterz"CreateTests.test_in_subinterpreterZ   s    %''$&&&& * # #  
 *3s8844.0042IJJJJJr   c                    t          t          j                              }g }t          d          D ]*}t          j                    }|                    |           +|D ]}|                                 t          j                    }|                     t          t          j                              ||hz             d S N   )setr   r   rangerE   appendr   rU   )r<   before
interp_lst_interpsr    s         r   test_after_destroy_allz"CreateTests.test_after_destroy_alle   s    \*,,--
q 	' 	'A")++Gg&&&&  	 	FLLNNNN$&&\24455v7HIIIIIr   c                    t          t          j                              }t          j                    }t          j                    }t          j                    }|                                 |                                 t          j                    }|                     t          t          j                              |||hz             d S r:   )r]   r   r   rE   r   rU   )r<   r`   interp1rX   interp3r    s         r   test_after_destroy_somez#CreateTests.test_after_destroy_somes   s    \*,,--%''%''%''$&&\24455v&@Q7QRRRRRr   N)r>   r?   r@   rJ   rR   rY   rd   rh   rA   r   r   rC   rC   E   sj        7 7 7
7 7 7	K 	K 	KJ J JS S S S Sr   rC   c                       e Zd Zd Zd ZdS )GetCurrentTestsc                 ~    t          j                    }t          j                    }|                     ||           d S r:   )r   get_mainget_currentrU   )r<   rV   currents      r   	test_mainzGetCurrentTests.test_main   s:    $&&*,,$'''''r   c                    t                                           }t          j                    }t	          |t          d                    }t          j        t          |                    }|                     ||           d S )Nz
            from test.support import interpreters
            cur = interpreters.get_current()
            print(cur.id)
            )	_interpretersrl   r   rE   r)   r   rG   rT   assertNotEqual)r<   rV   r    rW   rn   s        r   test_subinterpreterz#GetCurrentTests.test_subinterpreter   sw    %%''$&&&& * # #  
 *3s8844GT*****r   N)r>   r?   r@   ro   rs   rA   r   r   rj   rj      s2        ( ( (
	+ 	+ 	+ 	+ 	+r   rj   c                        e Zd Zd Zd Zd ZdS )ListAllTestsc                 r    t          j                    }|                     dt          |                     d S N   )r   r   rU   len)r<   rc   s     r   test_initialzListAllTests.test_initial   s2    '))CLL)))))r   c                 ,   t          j                    }t          j                    }t          j                    }g }t          j                    D ]}|                    |j                   |                     ||j        |j        |j        g           d S r:   )r   rm   rE   r   r_   r   rU   r<   rV   firstsecondidsr    s         r   test_after_creatingz ListAllTests.test_after_creating   s    '))#%%$&&"+-- 	" 	"FJJvy!!!!tw&)<=====r   c                 H   t          j                    }t          j                    }t          j                    }|                                 g }t          j                    D ]}|                    |j                   |                     ||j        |j        g           d S r:   )r   rm   rE   r   r   r_   r   rU   r|   s         r   test_after_destroyingz"ListAllTests.test_after_destroying   s    '))#%%$&&"+-- 	" 	"FJJvy!!!!tw	233333r   N)r>   r?   r@   rz   r   r   rA   r   r   ru   ru      sA        * * *	> 	> 	>
4 
4 
4 
4 
4r   ru   c                       e Zd Zd Zd Zd Zd Z ej        d          d             Z	 ej        d          d             Z
d Z ej        d          d	             Zd
 Zd Zd ZdS )TestInterpreterAttrsc                 V   t          j                    }t          j                    }t          j                    }|                     |j        t          j                   |                     |j        t          j                   |                     |j        t          j                   d S r:   )r   rl   rm   rE   rF   r   rq   InterpreterID)r<   rV   rn   r    s       r   test_id_typez!TestInterpreterAttrs.test_id_type   s    $&&*,,$&&dg}'BCCCgj-*EFFFfi)DEEEEEr   c                 b    t          j                    }|                     |j        d           d S r   )r   rl   rU   r   r<   rV   s     r   test_main_idz!TestInterpreterAttrs.test_main_id   s.    $&&!$$$$$r   c                     t          j        d          }|                     |j        d           |                     t
                    5  t          j        d           d d d            d S # 1 swxY w Y   d S Nrx   1)r   rG   rU   r   assertRaises	TypeErrorrI   s     r   test_custom_idz#TestInterpreterAttrs.test_custom_id   s    )!,,A&&&y)) 	* 	*$S)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*   
A,,A03A0c                     t          j        d          }|                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S Nrx      )r   rG   r   AttributeErrorr   rI   s     r   test_id_readonlyz%TestInterpreterAttrs.test_id_readonly   s    )!,,~.. 	 	FI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   AAAznot ready yet (see bpo-32604)c                 `    t          j                    }|                     |j                   d S r:   )r   rl   assertFalseisolatedr   s     r   test_main_isolatedz'TestInterpreterAttrs.test_main_isolated   s,    $&&'''''r   c                 `    t          j                    }|                     |j                   d S r:   )r   rE   r   r   rI   s     r   $test_subinterpreter_isolated_defaultz9TestInterpreterAttrs.test_subinterpreter_isolated_default   s,    $&&)))))r   c                     t          j        d          }t          j        d          }|                     |j                   |                     |j                   d S )NTr   F)r   rE   
assertTruer   r   r<   rf   rX   s      r   %test_subinterpreter_isolated_explicitz:TestInterpreterAttrs.test_subinterpreter_isolated_explicit   sZ    %t444%u555())))*****r   c                 b    t          j        d          }|                     |j                   d S rw   )r   rG   r   r   rI   s     r   test_custom_isolated_defaultz1TestInterpreterAttrs.test_custom_isolated_default   s.    )!,,)))))r   c                     t          j        dd          }t          j        dd          }|                     |j                   |                     |j                   d S )Nrx   Tr   F)r   rG   r   r   r   r   s      r   test_custom_isolated_explicitz2TestInterpreterAttrs.test_custom_isolated_explicit   s^    *1t<<<*1u===())))*****r   c                     t          j        d          }|                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S )Nrx   T)r   rG   r   r   r   rI   s     r   test_isolated_readonlyz+TestInterpreterAttrs.test_isolated_readonly   s    )!,,~.. 	# 	#"FO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r   c                     t          j                    }t          j                    }|                     ||           |                     ||           d S r:   )r   rE   rU   rr   r   s      r   test_equalityz"TestInterpreterAttrs.test_equality   sP    %''%'''***GW-----r   N)r>   r?   r@   r   r   r   r   unittestskipr   r   r   r   r   r   r   rA   r   r   r   r      s
       F F F% % %* * *  
 X]233( ( 43( X]233* * 43*+ + + X]233* * 43*+ + +# # #
. . . . .r   r   c                   ^    e Zd Zd Z ej        d          d             Zd Zd Zd Z	d Z
dS )	TestInterpreterIsRunningc                 z    t          j                    }|                     |                                           d S r:   )r   rl   r   
is_runningr   s     r   ro   z"TestInterpreterIsRunning.test_main   s2    $&&))*****r   Fails on FreeBSDc                 d   t          j                    }|                     |                                           t	          |          5  |                     |                                           d d d            n# 1 swxY w Y   |                     |                                           d S r:   )r   rE   r   r   r6   r   rI   s     r   rs   z,TestInterpreterIsRunning.test_subinterpreter   s    $&&**,,---f 	1 	1OOF--//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1**,,-----s   
(A>>BBc                     t          j                    }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   rE   r)   r   r   rU   strip)r<   r    rW   s      r   test_from_subinterpreterz1TestInterpreterIsRunning.test_from_subinterpreter  sl    $&&&& *)/* * * # #   	f-----r   c                     t          j                    }|                                 |                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S r:   )r   rE   r   r   r   r   rI   s     r   test_already_destroyedz/TestInterpreterIsRunning.test_already_destroyed  s    $&&|,, 	  	 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	    A$$A(+A(c                     t          j        d          }|                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S N@B )r   rG   r   r   r   rI   s     r   test_does_not_existz,TestInterpreterIsRunning.test_does_not_exist  s    ))44|,, 	  	 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	    AAAc                     t          j        d          }|                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S N)r   rG   r   
ValueErrorr   rI   s     r   test_bad_idz$TestInterpreterIsRunning.test_bad_id  s    )"--z** 	  	 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 r   N)r>   r?   r@   ro   r   r   rs   r   r   r   r   rA   r   r   r   r      s        + + + X]%&&. . '&.	. 	. 	.          
         r   r   c                   v    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ej        d
          d             ZdS )TestInterpreterClosec                    t          j                    }t          j                    }t          j                    }t          j                    }|                     t	          t          j                              ||||h           |                                 |                     t	          t          j                              |||h           d S r:   )r   rl   rE   rU   r]   r   r   )r<   rV   rf   rX   rg   s        r   
test_basiczTestInterpreterClose.test_basic   s    $&&%''%''%''\24455':	< 	< 	<\244551	3 	3 	3 	3 	3r   c                    t          t          j                              }t                      }t          d          D ]*}t          j                    }|                    |           +|                     t          t          j                              ||z             |D ]}|                                 |                     t          t          j                              |           d S r[   )r]   r   r   r^   rE   addrU   r   )r<   r`   rc   rb   r    s        r   test_allzTestInterpreterClose.test_all+  s    \*,,--%%q 	  	 A!(**FKK\24455v7GHHH 	 	FLLNNNN\24455v>>>>>r   c                 F    t          j                    \                       t                    5                                   d d d            n# 1 swxY w Y    fd}t          j        |          }|                                 |                                 d S )Nc                                           t                    5                                    d d d            d S # 1 swxY w Y   d S r:   )r   r   r   )rV   r<   s   r   rP   z)TestInterpreterClose.test_main.<locals>.f;  s    ""<00  

                 s   >AAr,   )	r   r   r   r   r   r/   r0   r1   r3   )r<   rP   r4   rV   s   `  @r   ro   zTestInterpreterClose.test_main6  s    %''|,, 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 		 	 	 	 	 	 A&&&					s   AAAc                     t          j                    }|                                 |                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S r:   )r   rE   r   r   r   rI   s     r   r   z+TestInterpreterClose.test_already_destroyedC  s    $&&|,, 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                     t          j        d          }|                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S r   )r   rG   r   r   r   rI   s     r   r   z(TestInterpreterClose.test_does_not_existI  s    ))44|,, 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                     t          j        d          }|                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S r   )r   rG   r   r   r   rI   s     r   r   z TestInterpreterClose.test_bad_idN  s    )"--z** 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c           	      x   t          j                    \  }t          j                    }t          |t	          dt          |j                   d                    }|                     |                                d           |                     t          t          j                              ||h           d S )Nza
            from test.support import interpreters
            interp = interpreters.Interpreter(z)
            try:
                interp.close()
            except RuntimeError:
                print('failed')
            failed)
r   r   rE   r)   r   rT   r   rU   r   r]   )r<   rV   r    rW   s       r   test_from_currentz&TestInterpreterClose.test_from_currentS  s    %''$&&&& */269~~* * * # #   	h///\24455f~FFFFFr   c                    t          j                    \  }t          j                    }t          j                    }|                     t	          t          j                              |||h           |                    t          d|j         d                     |                     t	          t          j                              ||h           d S )Nzf
            from test.support import interpreters
            interp2 = interpreters.Interpreter(int(zs))
            interp2.close()
            interp3 = interpreters.create()
            interp3.close()
            )r   r   rE   rU   r]   r%   r   r   )r<   rV   rf   rX   s       r   test_from_siblingz&TestInterpreterClose.test_from_siblinga  s    %''%''%''\244551	3 	3 	3F 4;J     	 	 	 	\24455gGGGGGr   c                     t          j                    fd}t          j        |          }|                                 |                                 d S )Nc                  0                                       d S r:   )r   r   s   r   rP   z6TestInterpreterClose.test_from_other_thread.<locals>.fr  s    LLNNNNNr   r,   )r   rE   r/   r0   r1   r3   )r<   rP   r4   r    s      @r   test_from_other_threadz+TestInterpreterClose.test_from_other_threadp  s]    $&&	 	 	 	 	 A&&&					r   r   c                    t          j                    \  }t          j                    }t          |          5  |                     t
                    5  |                                 d d d            n# 1 swxY w Y   |                     |                                           d d d            d S # 1 swxY w Y   d S r:   )	r   r   rE   r6   r   r   r   r   r   )r<   rV   r    s      r   test_still_runningz'TestInterpreterClose.test_still_runningy  s&   %''$&&f 	1 	1""<00                OOF--//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s5   B3A4(B34A8	8B3;A8	<*B33B7:B7N)r>   r?   r@   r   r   ro   r   r   r   r   r   r   r   r   r   rA   r   r   r   r     s        	3 	3 	3	? 	? 	?      
  
G G GH H H   X]%&&1 1 '&1 1 1r   r   c                       e Zd Zd Zd Z ej                    d             Z ej	        d          d             Z
d Zd Zd Zd	 Zd
S )TestInterpreterRunc                    t          j                    }t          d          \  }}|5  |                    |           |                                }d d d            n# 1 swxY w Y   |                     |d           d S )Nprint("it worked!", end="")
it worked!)r   rE   r   r%   r&   rU   )r<   r    r   filerW   s        r   test_successzTestInterpreterRun.test_success  s    $&&'(EFF 	 	JJv))++C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	l+++++s   *AA"%A"c                 b   t          j                    t          d          \  }|5  fd}t          j        |          }|                                 |                                 |                                }d d d            n# 1 swxY w Y   |                     |d           d S )Nr   c                  2                                     d S r:   )r%   )r    r   s   r   rP   z,TestInterpreterRun.test_in_thread.<locals>.f  s    

6"""""r   r,   r   )	r   rE   r   r/   r0   r1   r3   r&   rU   )r<   r   rP   r4   rW   r    r   s        @@r   rR   z!TestInterpreterRun.test_in_thread  s    $&&'(EFF 	 	# # # # # #  ***AGGIIIFFHHH))++C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	l+++++s   ABBBc                    t          j                    }dd l}|                    dd          5 }|                    d           |                                 d}t          d|j         d| d	          }|                    |           |	                    d           |
                                }|                     ||           d d d            d S # 1 swxY w 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   rE   tempfileNamedTemporaryFiler2   flushr   namer%   seekr&   rU   )r<   r    r   r   expectedr   contents          r   	test_forkzTestInterpreterRun.test_fork  s3   $&&(((@@ 	0DJJrNNNJJLLL1H 
 !%	  %-    F JJvIIaLLLiikkGWh///#	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   BCCCr   c                 
   t          j                    }t          |          5  |                     t                    5  |                    d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nprint("spam"))r   rE   r6   r   r   r%   rI   s     r   test_already_runningz'TestInterpreterRun.test_already_running  s    $&&f 	, 	,""<00 , ,

?+++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s4   A8A A8 A$	$A8'A$	(A88A<?A<c                     t          j        d          }|                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr   r   )r   rG   r   r   r%   rI   s     r   r   z&TestInterpreterRun.test_does_not_exist  s    ))44|,, 	( 	(JJ'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(   AAAc                     t          j        d          }|                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr   r   )r   rG   r   r   r%   rI   s     r   r   zTestInterpreterRun.test_bad_id  s    )"--z** 	( 	(JJ'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(r   c                     t          j                    }|                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )N
   r   rE   r   r   r%   rI   s     r   test_bad_scriptz"TestInterpreterRun.test_bad_script  s    $&&y)) 	 	JJrNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   AAAc                     t          j                    }|                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Ns   print("spam")r   rI   s     r   test_bytes_for_scriptz(TestInterpreterRun.test_bytes_for_script  s    $&&y)) 	) 	)JJ'(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)r   N)r>   r?   r@   r   rR   r   requires_forkr   r   r   r   r   r   r   r   rA   r   r   r   r     s        , , ,, , , W0 0 0, X]%&&, , '&,( ( (
( ( (
  
) ) ) ) )r   r   c                       e Zd Zd Zd ZdS )TestIsShareablec                     g d}|D ]X}|                      |          5  t          j        |          }|                     |           d d d            n# 1 swxY w Y   Yd S )N)N   spamspamr   i)subTestr   is_shareabler   )r<   
shareablesobj	shareables       r   test_default_shareablesz'TestIsShareable.test_default_shareables  s      
  	+ 	+Cc"" + +(5c::		***+ + + + + + + + + + + + + + +	+ 	+s   *AA	A	c                     G d d          } G d dt                     }ddt          dt          t          t                      t	                      d| |d	           |d
          g}|D ]c}|                     t          |                    5  |                     t          j	        |                     d d d            n# 1 swxY w Y   dd S )Nc                       e Zd Zd Zd ZdS )2TestIsShareable.test_not_shareable.<locals>.Cheesec                     || _         d S r:   r   )r<   r   s     r   __init__z;TestIsShareable.test_not_shareable.<locals>.Cheese.__init__  s     			r   c                     | j         S r:   r
  r;   s    r   __str__z:TestIsShareable.test_not_shareable.<locals>.Cheese.__str__  s
    y r   N)r>   r?   r@   r  r  rA   r   r   Cheeser    s2        ! ! !! ! ! ! !r   r  c                       e Zd ZdZdS )4TestIsShareable.test_not_shareable.<locals>.SubByteszA subclass of a shareable type.N)r>   r?   r@   __doc__rA   r   r   SubBytesr    s        1111r   r  TF.g      Y@Wensleydaler   )
bytesNotImplementedtypeobject	Exceptionr   reprr   r   r  )r<   r  r  not_shareablesr  s        r   test_not_shareablez"TestIsShareable.test_not_shareable  sL   	! 	! 	! 	! 	! 	! 	! 	!	2 	2 	2 	2 	2u 	2 	2 	2
 }%%!!" " 	4 	4Cd3ii(( 4 4   -c224 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s   (CC		C	N)r>   r?   r@   r  r  rA   r   r   r   r     s2        + + +4 4 4 4 4r   r   c                       e Zd Zd Zd ZdS )TestChannelsc                     t          j                    \  }}|                     |t           j                   |                     |t           j                   d S r:   )r   create_channelrF   RecvChannelSendChannel)r<   r   ss      r   test_createzTestChannels.test_create  sL    *,,1a!9:::a!9:::::r   c                 P   |                      t          j                    g            t                      }t	          d          D ]*}t          j                    }|                    |           +t          t          j                              }|                      ||           d S r[   )rU   r   list_all_channelsr]   r^   r  r   )r<   createdrb   chafters        r   test_list_allzTestChannels.test_list_all
  s    7992>>>%%q 	 	A,..BKKOOOOL24455(((((r   N)r>   r?   r@   r#  r)  rA   r   r   r  r    s2        ; ; ;
) ) ) ) )r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestRecvChannelAttrsc                 |    t          j                    \  }}|                     |j        t          j                   d S r:   r   r  rF   r   rq   	ChannelID)r<   rchrb   s      r   r   z!TestRecvChannelAttrs.test_id_type  s5    ,..Qcfm&=>>>>>r   c                     t          j        d          }|                     |j        d           |                     t
                    5  t          j        d           d d d            d S # 1 swxY w Y   d S r   )r   r   rU   r   r   r   r<   r/  s     r   r   z#TestRecvChannelAttrs.test_custom_id      &q))###y)) 	* 	*$S)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*r   c                     t          j        d          }|                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   r   r1  s     r   r   z%TestRecvChannelAttrs.test_id_readonly!      &q))~.. 	 	CF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                     t          j                    \  }}t          j                    \  }}|                     ||           |                     ||           d S r:   r   r  rU   rr   )r<   ch1rb   ch2s       r   r   z"TestRecvChannelAttrs.test_equality&  sX    ,..Q,..Qc"""C%%%%%r   Nr>   r?   r@   r   r   r   r   rA   r   r   r+  r+    P        ? ? ?* * *  
& & & & &r   r+  c                   &    e Zd Zd Zd Zd Zd ZdS )TestSendChannelAttrsc                 |    t          j                    \  }}|                     |j        t          j                   d S r:   r-  )r<   rb   schs      r   r   z!TestSendChannelAttrs.test_id_type/  s5    ,..3cfm&=>>>>>r   c                     t          j        d          }|                     |j        d           |                     t
                    5  t          j        d           d d d            d S # 1 swxY w Y   d S r   )r   r!  rU   r   r   r   r<   r>  s     r   r   z#TestSendChannelAttrs.test_custom_id3  r2  r   c                     t          j        d          }|                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S r   )r   r!  r   r   r   r@  s     r   r   z%TestSendChannelAttrs.test_id_readonly:  r4  r   c                     t          j                    \  }}t          j                    \  }}|                     ||           |                     ||           d S r:   r6  )r<   rb   r7  r8  s       r   r   z"TestSendChannelAttrs.test_equality?  sX    ,..3,..3c"""C%%%%%r   Nr9  rA   r   r   r<  r<  -  r:  r   r<  c                       e Zd Zd Zd Z ej        d          d             Zd Zd Z	d Z
d Z ej        d          d	             Zd
 Zd Zd Zd Zd Zd ZdS )TestSendRecvc                     t          j                    \  }}d}|                    |           |                                }|                     ||           |                     ||           d S Nr   )r   r  send_nowaitrecvrU   assertIsNotr<   r   r"  origr  s        r   test_send_recv_mainz TestSendRecv.test_send_recv_mainH  sj    *,,1	dffhhd###d#####r   c                 p    t          j                    }|                    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   rE   r%   r   rI   s     r   test_send_recv_same_interpreterz,TestSendRecv.test_send_recv_same_interpreterQ  sA    $&&

6    	 	 	 	 	r   zbroken (see BPO-...)c           	         t          j                    \  }}t          j                    \  }}d}|                    |           t          t          j                    t          dt          |           d          t          ||                    }|                                }| 	                    |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  rG  r)   rE   r   r   dictrH  rU   rr   rT   r<   r1s1r2s2orig1rW   obj2s           r   %test_send_recv_different_interpretersz2TestSendRecv.test_send_recv_different_interpreters]  s    ,..B,..B
u!!  %'uII	     B"%%%   wwyyw'''BtHHc#hh/////r   c                 j   t          j                    \  fd}t          j        |          }|                                 d}                    |           |                                                                 }|                     ||           | 	                    ||           d S )Nc                      	 	                                  } n*# t          j        $ r t          j        d           Y nw xY w@                    |            d S )NTg?)rH  r   ChannelEmptyErrortimesleepsend)r  r   r"  s    r   rP   z8TestSendRecv.test_send_recv_different_threads.<locals>.fx  sf    $$&&((C#5 $ $ $JsOOOOO$	$ FF3KKKKKs    #??r,   r   )
r   r  r/   r0   r1   rb  r3   rH  rU   rI  )r<   rP   r4   rK  r  r   r"  s        @@r    test_send_recv_different_threadsz-TestSendRecv.test_send_recv_different_threadsu  s    *,,1	 	 	 	 	 	 A&&&					t	ffhhd###d#####r   c                     t          j                    \  }}d}|                    |           |                                }|                     ||           |                     ||           d S rF  )r   r  rG  recv_nowaitrU   rI  rJ  s        r   test_send_recv_nowait_mainz'TestSendRecv.test_send_recv_nowait_main  sj    *,,1	dmmood###d#####r   c                     t          j                    \  }}|                    d           }|                     |           d S r:   )r   r  re  assertIsNone)r<   r   rb   r  s       r   'test_send_recv_nowait_main_with_defaultz4TestSendRecv.test_send_recv_nowait_main_with_default  s?    *,,1mmD!!#r   c                 p    t          j                    }|                    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_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'
            rN  rI   s     r   &test_send_recv_nowait_same_interpreterz3TestSendRecv.test_send_recv_nowait_same_interpreter  sA    $&&

6 	 	 	 		 		 		 		 		r   c           	         t          j                    \  }}t          j                    \  }}d}|                    |           t          t          j                    t          dt          |           d          t          ||                    }|                                }| 	                    |d           | 
                    t          |          t          |                     d S )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) != rQ  rR  r#   rS  )r   r  rG  r)   rE   r   r   rT  re  rU   rr   rT   rU  s           r   ,test_send_recv_nowait_different_interpretersz9TestSendRecv.test_send_recv_nowait_different_interpreters  s    ,..B,..B
u!!  %'uII	     B"%%%   ~~w'''BtHHc#hh/////r   c                     t          j        d          }|                     t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S r   )r   r   r   ChannelNotFoundErrorrH  r<   r'  s     r    test_recv_channel_does_not_existz-TestSendRecv.test_recv_channel_does_not_exist  s    %i00|@AA 	 	GGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   AAAc                     t          j        d          }|                     t           j                  5  |                    d           d d d            d S # 1 swxY w Y   d S Nr   r   )r   r!  r   ro  rb  rp  s     r    test_send_channel_does_not_existz-TestSendRecv.test_send_channel_does_not_exist  s    %i00|@AA 	 	GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   AAAc                     t          j        d          }|                     t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S r   )r   r   r   ro  re  rp  s     r   'test_recv_nowait_channel_does_not_existz4TestSendRecv.test_recv_nowait_channel_does_not_exist  s    %i00|@AA 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	rr  c                     t          j        d          }|                     t           j                  5  |                    d           d d d            d S # 1 swxY w Y   d S rt  )r   r!  r   ro  rG  rp  s     r   'test_send_nowait_channel_does_not_existz4TestSendRecv.test_send_nowait_channel_does_not_exist  s    %i00|@AA 	$ 	$NN7###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$rv  c                     t          j                    \  }}|                     t           j                  5  |                                 d d d            d S # 1 swxY w Y   d S r:   )r   r  r   r_  re  )r<   r'  rb   s      r   test_recv_nowait_emptyz#TestSendRecv.test_recv_nowait_empty  s    +--A|=>> 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                    t                      }t          j                    \  }}|                    |          }|                    d            |                    d           |                    d           |                    d           |                    |          }|                    |          }|                                }|                    |          }|                    |          }	|                     ||           |                     |d            |                     |d           |                     |d           |                     |d           |                     |	|           d S )Nrx   r   rS  )r  r   r  re  rG  assertIsrU   )
r<   defaultr/  r>  obj1r[  obj3obj4obj5obj6s
             r   test_recv_nowait_defaultz%TestSendRecv.test_recv_nowait_default  sM   ((.00Sw''      w''w''  w''w''dG$$$dD!!!q!!!w'''w'''dG$$$$$r   N)r>   r?   r@   rL  rO  r   r   r\  rc  rf  ri  rk  rm  rq  ru  rx  rz  r|  r  rA   r   r   rD  rD  F  s       $ $ $
 
 
 X])**0 0 +*0.$ $ $,$ $ $     X])**0 0 +*0.  
  
  
$ $ $
  
% % % % %r   rD  r:   )!
contextlibr   r/   textwrapr   r   r`  testr   test.supportr   import_modulerq   r   r   r!   r)   contextmanagerr6   TestCaser8   rC   rj   ru   r   r   r   r   r   r  r+  r<  rD  rA   r   r   <module>r     s;       				                   & & & & & &++,@AA % % % % % %	. 	. 	.        &         x       9S 9S 9S 9S 9S( 9S 9S 9Sx+ + + + +h + + +&4 4 4 4 48 4 4 4<>. >. >. >. >.8 >. >. >.B(  (  (  (  ( x (  (  ( Vb1 b1 b1 b1 b18 b1 b1 b1JI) I) I) I) I) I) I) I)\/4 /4 /4 /4 /4h /4 /4 /4d) ) ) ) )8 ) ) )"& & & & &8 & & &2& & & & &8 & & &2e% e% e% e% e%8 e% e% e% e% e%r   