B
    18\Z                 @   s   d dl Z d dl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re  dS )    N)DocTestSuite)supportc               @   s   e Zd ZdS )WeakN)__name__
__module____qualname__ r   r   ]/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_threading_local.pyr      s   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 }x2t|D ]&}tjt||fd}|  |  qW ~t  | 	t
|| dd |D }| t
||d |f d |_t  dd |D }| t
||d |f|t
|f d S )N)r   argsc             S   s   g | ]}| d kr|qS )Nr   ).0r
   r   r   r	   
<listcomp>+   s    z-BaseLocalTest._local_refs.<locals>.<listcomp>   c             S   s   g | ]}| d kr|qS )Nr   )r   r
   r   r   r	   r   1   s    )_localrange	threadingThreadr   startjoingccollectassertEquallenassertInZsomeothervar)r   nr   r   itZdeadlistr   r   r	   r      s    zBaseLocalTest._local_refsc          	      s^   dd l G fdddj}| fdd t fddtdD  W d Q R X 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?)sleep)r   )timer   r	   __init__;   s    z2BaseLocalTest.test_derived.<locals>.Local.__init__N)r   r   r   r,   r   )r+   r   r	   Local:   s   r-   c                s   |  _  j |  d S )N)xr$   )r(   )r   r   r   r	   f?   s    z%BaseLocalTest.test_derived.<locals>.fc             3   s   | ]}t j |fd V  qdS ))r   r   N)r   r   )r   r(   )r/   r   r	   	<genexpr>D   s   z-BaseLocalTest.test_derived.<locals>.<genexpr>
   )r+   r   r   start_threadsr   )r   r-   r   )r/   r   r   r+   r	   test_derived4   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               @   s   e Zd ZdS )z7BaseLocalTest.test_derived_cycle_dealloc.<locals>.LocalN)r   r   r   r   r   r   r	   r-   J   s   r-   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	   r0   `   s    zFBaseLocalTest.test_derived_cycle_dealloc.<locals>.f.<locals>.<genexpr>)r   r5   r"   r#   setwaitall)cycle)r-   e1e2localspassedr   r	   r/   Q   s    

z3BaseLocalTest.test_derived_cycle_dealloc.<locals>.f)r   c                s   g | ]
}  qS r   r   )r   r(   )r-   r   r	   r   i   s    z<BaseLocalTest.test_derived_cycle_dealloc.<locals>.<listcomp>r1   )
r   r   Eventr   r    r8   r   r7   r!   
assertTrue)r   r/   r)   r   )r-   r;   r<   r=   r>   r	   test_derived_cycle_deallocH   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 )Nr   )r   r   kwargsr   r   r	   r,   r   s    z6BaseLocalTest.test_arguments.<locals>.MyLocal.__init__N)r   r   r   r,   r   r   r   r	   MyLocalq   s   rC   r   )a)r   assertRaises	TypeError)r   rC   r   r   r	   test_argumentso   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 )Nr5   r4   )r.   yr7   r8   r   )r;   r<   objr   r	   f1   s
    z)BaseLocalTest._test_one_class.<locals>.f1c                 sF   y
j } W n tk
r$   d_Y nX d|  f _tjj d S )N z'Incorrectly got value %r from class %r
)r.   AttributeError_failedsysstderrwrite)r5   )crI   r   r   r	   f2   s    
z)BaseLocalTest._test_one_class.<locals>.f2)r   )	rM   r   r?   r   r    r8   r!   r7   assertFalse)r   rQ   rJ   rR   t1t2r   )rQ   r;   r<   rI   r   r	   _test_one_classz   s    zBaseLocalTest._test_one_classc             C   s   |  | j d S )N)rV   r   )r   r   r   r	   test_threading_local   s    z"BaseLocalTest.test_threading_localc             C   s    G dd d| j }| | d S )Nc               @   s   e Zd ZdZdS )zBBaseLocalTest.test_threading_local_subclass.<locals>.LocalSubclassz(To test that subclasses behave properly.N)r   r   r   __doc__r   r   r   r	   LocalSubclass   s   rY   )r   rV   )r   rY   r   r   r	   test_threading_local_subclass   s    z+BaseLocalTest.test_threading_local_subclassc          	   C   sX   | }d|_ | |jddi | t i |_W d Q R X | t
 |`W d Q R X d S )N   r.   )r.   r$   __dict__rE   rL   )r   clsrI   r   r   r	   _test_dict_attribute   s    z"BaseLocalTest._test_dict_attributec             C   s   |  | j d S )N)r^   r   )r   r   r   r	   test_dict_attribute   s    z!BaseLocalTest.test_dict_attributec             C   s    G dd d| j }| | d S )Nc               @   s   e Zd ZdZdS )zABaseLocalTest.test_dict_attribute_subclass.<locals>.LocalSubclassz(To test that subclasses behave properly.N)r   r   r   rX   r   r   r   r	   rY      s   rY   )r   r^   )r   rY   r   r   r	   test_dict_attribute_subclass   s    z*BaseLocalTest.test_dict_attribute_subclassc             C   sJ   G dd d}| }|   |_||j_t|}~t  | |  d S )Nc               @   s   e Zd ZdS )z.BaseLocalTest.test_cycle_collection.<locals>.XN)r   r   r   r   r   r   r	   X   s   ra   )r   r   r.   r   r   r"   r#   assertIsNone)r   ra   r.   wrr   r   r	   test_cycle_collection   s    

z#BaseLocalTest.test_cycle_collectionN)r   r   r   r   r   r3   rA   rG   rV   rW   rZ   r^   r_   r`   rd   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	   re      s   re   c               @   s   e Zd ZejZdS )PyThreadingLocalTestN)r   r   r   _threading_localr   r   r   r   r   r	   rg      s   rg   c                 sr   t  } | td | t t | t t tj dd } fdd}| td||d t	
|  d S )Nrh   c             S   s   t jt_d S )N)rf   r   rh   r   )testr   r   r	   setUp   s    ztest_main.<locals>.setUpc                s
    t _d S )N)rh   r   )ri   )
local_origr   r	   tearDown   s    ztest_main.<locals>.tearDown)rj   rl   )unittest	TestSuiteaddTestr   	makeSuitere   rg   rh   r   r   run_unittest)suiterj   rl   r   )rk   r	   	test_main   s    rs   __main__)rN   rm   doctestr   ri   r   r   r"   rf   r   rh   objectr   r   r   TestCasere   rg   rs   r   r   r   r   r	   <module>   s"    .