
    dafN                     F   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 ej                  d        G d d	e      Zd
 Z G d d      Z G d dej&                  e      Z G d dej&                  e      Zd Zedk(  r ej0                          yy)    N)DocTestSuite)support)threading_helper)import_moduleT)modulec                       e Zd Zy)WeakN__name__
__module____qualname__     4/root/Python-3.12.4/Lib/test/test_threading_local.pyr	   r	      s    r   r	   c                 n    t               }|| _        |j                  t        j                  |             y N)r	   weakappendweakrefref)localweaklistr   s      r   targetr      s%    6DEJOOGKK%&r   c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)BaseLocalTestc                 j    | j                  d       | j                  d       | j                  d       y )N   2   d   )_local_refsselfs    r   test_local_refszBaseLocalTest.test_local_refs   s,    r   c                 `   | j                         }g }t        |      D ]?  }t        j                  t        ||f      }|j                          |j                          A ~t        j                          | j                  t        |      |       |D cg c]  } |       | }}| j                  t        |      |dz
  |f       d |_        t        j                          |D cg c]  } |       | }}| j                  t        |      |dz
  |f|t        |      f       y c c}w c c}w )Nr   args   )_localrange	threadingThreadr   startjoinr   
gc_collectassertEquallenassertInsomeothervar)r"   nr   r   itr   deadlists           r   r    zBaseLocalTest._local_refs"   s   q 	A  eX5FGAGGIFFH	 X* &.@TD@@c(mac1X. "%-@TD@@c(mac1X3x=/AB A As   D&!D&&D+3D+c                      dd l  G fdd j                        } |        fdt        j                  fdt	        d      D              5  	 d d d        y # 1 sw Y   y xY w)Nr   c                       e Zd Z fdZy))BaseLocalTest.test_derived.<locals>.Localc                 (    j                  d       y )Ng{Gz?)sleep)r"   times    r   __init__z2BaseLocalTest.test_derived.<locals>.Local.__init__?   s    

4 r   Nr   r   r   r=   )r<   s   r   Localr9   >   s    !r   r?   c                 L    | _         j                  j                   |        y r   )xr/   )r4   r   r"   s    r   fz%BaseLocalTest.test_derived.<locals>.fC   s    EGUWWa(r   c              3   N   K   | ]  }t        j                  |f         yw)r%   N)r*   r+   ).0r4   rB   s     r   	<genexpr>z-BaseLocalTest.test_derived.<locals>.<genexpr>H   s-      ,@01 -6,<,<AQD,Q,Q ,@s   "%
   )r<   r(   r   start_threadsr)   )r"   r?   rB   r   r<   s   ` @@@r   test_derivedzBaseLocalTest.test_derived8   sb    
 		!DKK 	! 	)
 ++ ,@5:2Y,@ @ 		 	 	s   AA(c                     G d d| j                         d dt        j                         t        j                         fd}t        j                  |      }|j	                          j                          t        d      D cg c]	  }         c}j                          |j                          | j                         y c c}w )Nc                       e Zd Zy)7BaseLocalTest.test_derived_cycle_dealloc.<locals>.LocalNr
   r   r   r   r?   rK   N       r   r?   Fc                              g} | j                  |        d| d   _        ~ t        j                          j	                          j                          t        d D              y )Nbarr   c              3   6   K   | ]  }t        |d          yw)fooN)hasattr)rD   r   s     r   rE   zFBaseLocalTest.test_derived_cycle_dealloc.<locals>.f.<locals>.<genexpr>d   s     GuWUE22Gs   )r   rP   r   r.   setwaitall)cycler?   e1e2localspasseds    r   rB   z3BaseLocalTest.test_derived_cycle_dealloc.<locals>.fU   sZ     WIELL E!HL  FFHGGI GGGFr   r   rF   )
r(   r*   Eventr+   r,   rS   r)   rR   r-   
assertTrue)	r"   rB   r5   r4   r?   rV   rW   rX   rY   s	       @@@@@r   test_derived_cycle_deallocz(BaseLocalTest.test_derived_cycle_deallocL   s    	DKK 	____	H 	H" A&		
	
 $)9-a%'-
		 .s   Cc                      G d d| j                         } |d        |d       | j                  t        | j                   d       | j                  t        | j                   d       y )Nc                       e Zd Zd Zy)-BaseLocalTest.test_arguments.<locals>.MyLocalc                      y r   r   )r"   r&   kwargss      r   r=   z6BaseLocalTest.test_arguments.<locals>.MyLocal.__init__v   s    r   Nr>   r   r   r   MyLocalr`   u   s    r   rc   r'   )a)r(   assertRaises	TypeError)r"   rc   s     r   test_argumentszBaseLocalTest.test_argumentss   sQ    	dkk 	 	!
)T[[A6)T[[!4r   c                     d _                 t        j                         t        j                         fd} fd}t        j                  |      }|j	                          j                          t        j                  |      }|j	                          |j                          j                          |j                           j                   j                    j                          y )Nz No error message set or cleared.c                  f    d_         d_        ` j                          j                          y )NrP   rN   )rA   yrR   rS   )rV   rW   objs   r   f1z)BaseLocalTest._test_one_class.<locals>.f1   s(    CECEFFHGGIr   c                      	 j                   } d| dd_        t        j                  j	                  j                         y # t
        $ r
 d_        Y y w xY w)NzIncorrectly got value z from class 
 )rA   _failedsysstderrwriteAttributeError)rP   crk   r"   s    r   f2z)BaseLocalTest._test_one_class.<locals>.f2   sO    /ee "%a!)

  . " "!"s   A AArZ   )	rp   r*   r[   r+   r,   rS   r-   rR   assertFalse)	r"   ru   rl   rv   t1t2rV   rW   rk   s	   ``    @@@r   _test_one_classzBaseLocalTest._test_one_class~   s    9c____			/ R(


	R(


	

	t||4r   c                 :    | j                  | j                         y r   )rz   r(   r!   s    r   test_threading_localz"BaseLocalTest.test_threading_local   s    T[[)r   c                 P     G d d| j                         }| j                  |       y )Nc                       e Zd ZdZy)BBaseLocalTest.test_threading_local_subclass.<locals>.LocalSubclass(To test that subclasses behave properly.Nr   r   r   __doc__r   r   r   LocalSubclassr          :r   r   )r(   rz   r"   r   s     r   test_threading_local_subclassz+BaseLocalTest.test_threading_local_subclass   s     	;DKK 	;]+r   c                     |       }d|_         | j                  |j                  ddi       | j                  t              5  i |_        d d d        | j                  t              5  |`d d d        y # 1 sw Y   *xY w# 1 sw Y   y xY w)N   rA   )rA   r/   __dict__re   rt   )r"   clsrk   s      r   _test_dict_attributez"BaseLocalTest._test_dict_attribute   s    eQx0~. 	CL	~. 		 		 		 	s   A3'A?3A<?Bc                 :    | j                  | j                         y r   )r   r(   r!   s    r   test_dict_attributez!BaseLocalTest.test_dict_attribute   s    !!$++.r   c                 P     G d d| j                         }| j                  |       y )Nc                       e Zd ZdZy)ABaseLocalTest.test_dict_attribute_subclass.<locals>.LocalSubclassr   Nr   r   r   r   r   r      r   r   r   )r(   r   r   s     r   test_dict_attribute_subclassz*BaseLocalTest.test_dict_attribute_subclass   s     	;DKK 	;!!-0r   c                      G d d      } |       }| j                         |_        ||j                  _        t        j                  |      }~t        j                          | j                   |              y )Nc                       e Zd Zy).BaseLocalTest.test_cycle_collection.<locals>.XNr
   r   r   r   Xr      rL   r   r   )r(   r   rA   r   r   r   r.   assertIsNone)r"   r   rA   wrs       r   test_cycle_collectionz#BaseLocalTest.test_cycle_collection   sY    	 	 C++-	[[^"$r   c                     t        d      }|j                  d d       t        d      D ]  }t        j                         } |j                          y )N	_testcapic                       y r   r   r   r   r   <lambda>z?BaseLocalTest.test_threading_local_clear_race.<locals>.<lambda>   s    r   Fi  )r   call_in_temporary_c_threadr)   r*   r   join_temporary_c_thread)r"   r   _s      r   test_threading_local_clear_racez-BaseLocalTest.test_threading_local_clear_race   sK     "+.	,,\5At 	"A!A	" 	))+r   N)r   r   r   r#   r    rH   r]   rg   rz   r|   r   r   r   r   r   r   r   r   r   r   r      sF    
C,(% N	5"5H*,
/1

 	,r   r   c                   $    e Zd Zej                  Zy)ThreadLocalTestN)r   r   r   _threadr(   r   r   r   r   r      s    ^^Fr   r   c                   $    e Zd Zej                  Zy)PyThreadingLocalTestN)r   r   r   _threading_localr   r(   r   r   r   r   r      s    ##Fr   r   c                     |j                  t        d             t        j                  d }fd}|j	                  t        d||             |S )Nr   c                 6    t         j                  t        _        y r   )r   r(   r   r   )tests    r   setUpzload_tests.<locals>.setUp   s    !(r   c                     t         _        y r   )r   r   )r   
local_origs    r   tearDownzload_tests.<locals>.tearDown   s    !+r   )r   r   )addTestr   r   r   addTests)loadertestspatternr   r   r   s        @r   
load_testsr      sM    	MM,123!''J0,	NN< 2&+h@  Lr   __main__)rq   unittestdoctestr   r   r   test.supportr   test.support.import_helperr   r   r   r*   r   requires_working_threadingobjectr	   r   r   TestCaser   r   r   r   mainr   r   r   <module>r      s    
     ) 4     ,  + +4 8	6 	'v, v,rh'' $8,,m $ zHMMO r   