o
    HXh                     @   s   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
Z
d dlZd dlZd dlZd dlZG dd deZdd	 ZG d
d dZG dd dejeZG dd dejeZdd Zedkrhe  dS dS )    N)DocTestSuite)support)threading_helper)import_modulec                   @      e Zd ZdS )WeakN__name__
__module____qualname__ r   r   C/opt/python-3.10.19/usr/lib/python3.10/test/test_threading_local.pyr          r   c                 C   s    t  }|| _|t| d S N)r   weakappendweakrefref)localweaklistr   r   r   r   target   s   r   c                   @   st   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dd Zdd Zdd Zdd ZdS )BaseLocalTestc                 C   s"   |  d |  d |  d d S )N   2   d   )_local_refsselfr   r   r   test_local_refs   s   

zBaseLocalTest.test_local_refsc                 C   s   |   }g }t|D ]}tjt||fd}|  |  q
~t  | 	t
|| dd |D }| t
||d |f d |_t  dd |D }| t
||d |f|t
|f d S )Nr   argsc                 S      g | ]	}| d u r|qS r   r   .0r   r   r   r   
<listcomp>-       z-BaseLocalTest._local_refs.<locals>.<listcomp>   c                 S   r!   r   r   r"   r   r   r   r$   3   r%   )_localrange	threadingThreadr   startjoinr   
gc_collectassertEquallenZassertInZsomeothervar)r   nr   r   itZdeadlistr   r   r   r       s   
&zBaseLocalTest._local_refsc                    st   dd l G fdddj}| fdd t fddtdD 	 W d    d S 1 s3w   Y  d S )	Nr   c                       s   e Zd Z fddZdS )z)BaseLocalTest.test_derived.<locals>.Localc                    s     d d S )Ng{Gz?)sleepr   timer   r   __init__=   s   z2BaseLocalTest.test_derived.<locals>.Local.__init__Nr	   r
   r   r6   r   r4   r   r   Local<   s    r8   c                    s   |  _  j |  d S r   )xr.   )r1   )r   r   r   r   fA   s   z%BaseLocalTest.test_derived.<locals>.fc                 3   s     | ]}t j |fd V  qdS )r   N)r)   r*   r#   r1   )r:   r   r   	<genexpr>F   s    z-BaseLocalTest.test_derived.<locals>.<genexpr>
   )r5   r'   r   Zstart_threadsr(   )r   r8   r   )r:   r   r   r5   r   test_derived6   s   
"zBaseLocalTest.test_derivedc                    s   G dd d| j  d dt t  fdd}tj|d}|     fddtd	D   |  | 	 d S )
Nc                   @   r   )z7BaseLocalTest.test_derived_cycle_dealloc.<locals>.LocalNr   r   r   r   r   r8   L   r   r8   Fc                     sL     g} |  |  d| d _~ t      tdd D d S )Nbarr   c                 s   s    | ]	}t |d  V  qdS )fooN)hasattr)r#   r   r   r   r   r<   b   s    zFBaseLocalTest.test_derived_cycle_dealloc.<locals>.f.<locals>.<genexpr>)r   r@   r   r-   setwaitall)cycler8   e1e2localsZpassedr   r   r:   S   s   

z3BaseLocalTest.test_derived_cycle_dealloc.<locals>.fr   c                    s   g | ]}  qS r   r   r;   )r8   r   r   r$   k   s    z<BaseLocalTest.test_derived_cycle_dealloc.<locals>.<listcomp>r=   )
r'   r)   Eventr*   r+   rC   r(   rB   r,   Z
assertTrue)r   r:   r2   r   rF   r   test_derived_cycle_deallocJ   s   z(BaseLocalTest.test_derived_cycle_deallocc                 C   sJ   G dd d| j }|dd |d | jt| j dd | t| j d d S )Nc                   @   s   e Zd Zdd ZdS )z-BaseLocalTest.test_arguments.<locals>.MyLocalc                 _      d S r   r   )r   r    kwargsr   r   r   r6   t   s   z6BaseLocalTest.test_arguments.<locals>.MyLocal.__init__Nr7   r   r   r   r   MyLocals   s    rO   r&   )a)r'   assertRaises	TypeError)r   rO   r   r   r   test_argumentsq   s
   
zBaseLocalTest.test_argumentsc                    s   d_   t t fdd} fdd}tj|d}|    tj|d}|  |    |  j j  d S )Nz No error message set or cleared.c                      s$   d_ d_`     d S )Nr@   r?   )r9   yrB   rC   r   )rG   rH   objr   r   f1   s
   z)BaseLocalTest._test_one_class.<locals>.f1c                     sF   zj } W n ty   d_Y d S w d|  f _tjj d S )N z'Incorrectly got value %r from class %r
)r9   AttributeError_failedsysstderrwrite)r@   )crU   r   r   r   f2   s   
z)BaseLocalTest._test_one_class.<locals>.f2rJ   )	rY   r)   rK   r*   r+   rC   r,   rB   ZassertFalse)r   r]   rV   r^   t1t2r   )r]   rG   rH   rU   r   r   _test_one_class|   s   zBaseLocalTest._test_one_classc                 C      |  | j d S r   )ra   r'   r   r   r   r   test_threading_local      z"BaseLocalTest.test_threading_localc                 C       G dd d| j }| | d S )Nc                   @      e Zd ZdZdS )zBBaseLocalTest.test_threading_local_subclass.<locals>.LocalSubclass(To test that subclasses behave properly.Nr	   r
   r   __doc__r   r   r   r   LocalSubclass       rj   )r'   ra   r   rj   r   r   r   test_threading_local_subclass      z+BaseLocalTest.test_threading_local_subclassc                 C   s   | }d|_ | |jddi | t i |_W d    n1 s"w   Y  | t |`W d    d S 1 s:w   Y  d S )N   r9   )r9   r.   __dict__rQ   rX   )r   clsrU   r   r   r   _test_dict_attribute   s   "z"BaseLocalTest._test_dict_attributec                 C   rb   r   )rr   r'   r   r   r   r   test_dict_attribute   rd   z!BaseLocalTest.test_dict_attributec                 C   re   )Nc                   @   rf   )zABaseLocalTest.test_dict_attribute_subclass.<locals>.LocalSubclassrg   Nrh   r   r   r   r   rj      rk   rj   )r'   rr   rl   r   r   r   test_dict_attribute_subclass   rn   z*BaseLocalTest.test_dict_attribute_subclassc                 C   sJ   G dd d}| }|   |_||j_t|}~t  | |  d S )Nc                   @   r   )z.BaseLocalTest.test_cycle_collection.<locals>.XNr   r   r   r   r   X   r   ru   )r'   r   r9   r   r   r   r-   ZassertIsNone)r   ru   r9   wrr   r   r   test_cycle_collection   s   

z#BaseLocalTest.test_cycle_collectionc                 C   s:   t d}|dd d tdD ]}t }q|  d S )N	_testcapic                   S   rM   r   r   r   r   r   r   <lambda>   s    z?BaseLocalTest.test_threading_local_clear_race.<locals>.<lambda>Fi  )r   Zcall_in_temporary_c_threadr(   r)   r   Zjoin_temporary_c_thread)r   rx   _r   r   r   test_threading_local_clear_race   s
   
z-BaseLocalTest.test_threading_local_clear_raceN)r	   r
   r   r   r   r>   rL   rS   ra   rc   rm   rr   rs   rt   rw   r{   r   r   r   r   r      s    '$	r   c                   @   s   e Zd ZejZdS )ThreadLocalTestN)r	   r
   r   _threadr'   r   r   r   r   r|          
r|   c                   @   s   e Zd ZejZdS )PyThreadingLocalTestN)r	   r
   r   _threading_localr   r'   r   r   r   r   r      r~   r   c                     sr   t  } | td | t t | t t tj dd } fdd}| td||d t	
|  d S )Nr   c                 S   s   t jt_d S r   )r}   r'   r   r   testr   r   r   setUp   s   ztest_main.<locals>.setUpc                    s
    t _d S r   )r   r   r   Z
local_origr   r   tearDown   s   
ztest_main.<locals>.tearDown)r   r   )unittestZ	TestSuiteZaddTestr   Z	makeSuiter|   r   r   r   r   Zrun_unittest)Zsuiter   r   r   r   r   	test_main   s   r   __main__)rZ   r   doctestr   r   r   Ztest.supportr   Ztest.support.import_helperr   r   gcr}   r)   r   objectr   r   r   ZTestCaser|   r   r   r	   r   r   r   r   <module>   s*     :
