o
    g                     @   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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rbe  dS dS )    N)DocTestSuite)support)threading_helperc                   @      e Zd ZdS )WeakN__name__
__module____qualname__ r   r   O/Users/admin/.pyenv/versions/3.10.0/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                   @   sl   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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#   2   r$   )_localrange	threadingThreadr   startjoin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   f@   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>E   s    z-BaseLocalTest.test_derived.<locals>.<genexpr>
   )r5   r&   r   Zstart_threadsr'   )r   r8   r   )r:   r   r   r5   r   test_derived5   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   K   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<   a   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:   R   s   

z3BaseLocalTest.test_derived_cycle_dealloc.<locals>.fr   c                    s   g | ]}  qS r   r   r;   )r8   r   r   r#   j   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_deallocI   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                 _   s   d S r   r   )r   r   kwargsr   r   r   r6   s   s   z6BaseLocalTest.test_arguments.<locals>.MyLocal.__init__Nr7   r   r   r   r   MyLocalr   s    rN   r%   )a)r&   assertRaises	TypeError)r   rN   r   r   r   test_argumentsp   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@   )crT   r   r   r   f2   s   
z)BaseLocalTest._test_one_class.<locals>.f2rJ   )	rX   r(   rK   r)   r*   rC   r+   rB   ZassertFalse)r   r\   rU   r]   t1t2r   )r\   rG   rH   rT   r   r   _test_one_class{   s   zBaseLocalTest._test_one_classc                 C      |  | j d S r   )r`   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       ri   )r&   r`   r   ri   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__rP   rW   )r   clsrT   r   r   r   _test_dict_attribute   s   "z"BaseLocalTest._test_dict_attributec                 C   ra   r   )rq   r&   r   r   r   r   test_dict_attribute   rc   z!BaseLocalTest.test_dict_attributec                 C   rd   )Nc                   @   re   )zABaseLocalTest.test_dict_attribute_subclass.<locals>.LocalSubclassrf   Nrg   r   r   r   r   ri      rj   ri   )r&   rq   rk   r   r   r   test_dict_attribute_subclass   rm   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   rt   )r&   r   r9   r   r   r,   r-   ZassertIsNone)r   rt   r9   wrr   r   r   test_cycle_collection   s   

z#BaseLocalTest.test_cycle_collectionN)r   r	   r
   r   r   r>   rL   rR   r`   rb   rl   rq   rr   rs   rv   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   rw          
rw   c                   @   s   e Zd ZejZdS )PyThreadingLocalTestN)r   r	   r
   _threading_localr   r&   r   r   r   r   rz      ry   rz   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   )rx   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	makeSuiterw   rz   r{   r   r   Zrun_unittest)Zsuiter~   r   r   r   r   	test_main   s   r   __main__)rY   r   doctestr   r}   r   Ztest.supportr   r   r,   rx   r(   r{   objectr   r   r   ZTestCaserw   rz   r   r   r   r   r   r   <module>   s(     .
