
    iH              
          d dl mZmZmZ 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mZ d dlmZ d dlmZ d d	lmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ  G d de          Z G d de          Z  G d de          Z! G d dej"                  Z#d Z$e%fdZ& G d de'          Z(d Z) G d de          Z* G d  d!e*ee e!ee("          Z
dS )#    )absolute_importprint_functiondivisionN)contextmanager)TestCasewraps)LazyOnClass)perf_counter)get_clock_info)get_hub_if_exists   )sysinfo)params)	leakcheck)errorhandler)flaky)get_switch_expectedc                       e Zd Z ej                    d	d            Zej        rd Znd Ze	d
d            Z
ej        s	ej        sdndfdZdS )TimeAssertMixinNc                     	 |                      |||||           d S # t          $ r t          j                     Y d S w xY w)N)placesmsgdelta)assertAlmostEqualAssertionErrorr   reraiseFlakyTestTimeout)selffirstsecondr   r   r   s         B/usr/local/lib/python3.11/dist-packages/gevent/testing/testcase.pyassertTimeoutAlmostEqualz(TimeAssertMixin.assertTimeoutAlmostEqual+   s`    	,""5&SPU"VVVVV 	, 	, 	,)++++++	,s    ??c                     d S N r   
time_takenmin_timemax_times       r!   assertTimeWithinRangez%TimeAssertMixin.assertTimeWithinRange5   s    F    c                 ^    |                      ||           |                     ||           d S r$   )assertLessEqualassertGreaterEqualr&   s       r!   r*   z%TimeAssertMixin.assertTimeWithinRange8   s4      X666##J99999r+   c              #     K   |#t           j        st           j        r|dz  }n|dz  }||n||z
  }||z   }t                      }||fV  t                      |z
  }	 |                     ||cxk    o|k    nc d|d|d|d|d|dt          d	                     d S # t          $ r t          j                     Y d S w xY w)
Ng      @g       @z
Expected: z; elapsed: z; min: z; max: z; fuzzy z; clock_info: r   )	r   EXPECT_POOR_TIMER_RESOLUTIONLIBUVr   
assertTruer   r   r   reraiseFlakyTestRaceCondition)r   expectedfuzzyr(   r)   startelapseds          r!   runs_in_given_timez"TimeAssertMixin.runs_in_given_time<   s$     =3 'w} ' 3 3'388E9Ie#""""..5(	2OOG////x////HHgggxxx555.Q_B`B`B`    
  	2 	2 	2/111111	2s   AB! !CCg{Gz?g      ?c                 .    |                      d|          S )Ng        )r8   )r   r5   s     r!   runs_in_no_timezTimeAssertMixin.runs_in_no_timeR   s     &&sE222r+   NNN)NN)__name__
__module____qualname__r   reraises_flaky_timeoutr"   r   r0   r*   r   r8   r1   r:   r%   r+   r!   r   r   *   s        !U!##, , , $#, + :	 	 	 		: 	: 	: 2 2 2 ^2.  'CbGMb44_b3 3 3 3 3 3r+   r   c                   .    e Zd ZdZd Zd Zd ZeZd ZdS )GreenletAssertMixinz Assertions related to greenlets.c                     |                      |j        |           |                      |                                |           |                     ||           d S r$   )r2   deadreadyassertFalser   gs     r!   assert_greenlet_readyz)GreenletAssertMixin.assert_greenlet_ready[   sP    """		1%%%Ar+   c                     |                      |j        |           |                      |                                |           d S r$   )rE   rC   rD   rF   s     r!   assert_greenlet_not_readyz-GreenletAssertMixin.assert_greenlet_not_ready`   s>    ###A&&&&&r+   c                 r    |                      |j        |           |                     |j        |           d S r$   )r2   startedrE   rC   rF   s     r!   assert_greenlet_spawnedz+GreenletAssertMixin.assert_greenlet_spawnedd   s6    	1%%%#####r+   c                 r    |                      |j        |           |                     |j        |           d S r$   )rE   rL   r2   rC   rF   s     r!   assert_greenlet_finishedz,GreenletAssertMixin.assert_greenlet_finishedk   s6    A&&&"""""r+   N)	r<   r=   r>   __doc__rH   rJ   rM   assert_greenlet_startedrO   r%   r+   r!   rA   rA   X   s^        **  
' ' '$ $ $
 6# # # # #r+   rA   c                   J    e Zd ZdZed             ZddZddZd Zd	 Z	d
 Z
dS )StringAssertMixinz*
    Assertions dealing with strings.
    c                 @    dd l }|                    d|j                  S )Nr   z-?0x[0123456789abcdef]+L?)recompileI)r   rU   s     r!   
HEX_NUM_REzStringAssertMixin.HEX_NUM_REu   s"    			zz5rt<<<r+   Xc                 8    | j                             ||          S r$   )rX   sub)r   sreplaces      r!   normalize_addrz StringAssertMixin.normalize_addrz   s    ""7A...r+   Nmodulec                 Z    |t          |           j        }|                    ||          S r$   )typer=   r]   )r   r\   r_   r]   s       r!   normalize_modulez"StringAssertMixin.normalize_module~   s)    >$ZZ*Fyy)))r+   c                 R    |                      |                     |                    S r$   )rb   r^   r   r\   s     r!   	normalizezStringAssertMixin.normalize   s$    $$T%8%8%;%;<<<r+   c                     t          |          }|                     |          }|                     |                    |          ||f           d S r$   )strre   r2   endswithr   ovalr\   ns        r!   assert_nstr_endswithz&StringAssertMixin.assert_nstr_endswith   sF    FFNN1

3!Q00000r+   c                     t          |          }|                     |          }|                     |                    |          ||f           d S r$   )rg   re   r2   
startswithri   s        r!   assert_nstr_startswithz(StringAssertMixin.assert_nstr_startswith   sH    FFNN1S))Aq622222r+   )rY   )Nr_   )r<   r=   r>   rP   r
   rX   r^   rb   re   rm   rp   r%   r+   r!   rS   rS   p   s          = = [=/ / / /* * * *= = =1 1 1
3 3 3 3 3r+   rS   c                   &    e Zd ZdZddZd Zd ZdS )TestTimeout 	Not Givenc                 R    t           j                            | ||dd           d S )Nz5: test timed out (set class __timeout__ to increase)
F)ref)geventTimeout__init__)r   timeoutmethods      r!   ry   zTestTimeout.__init__   s>    JP&&R	 	  	
 	
 	
 	
 	
r+   c                 ^   ddl m} t          j                    j        }d}t          |d          rd |                                D             } |            }dd                    |          dd                    |          | _        t          j	        
                    | ||           d S )	Nr   )format_run_infozN/Adebugc                 ,    g | ]}t          |          S r%   )rg   ).0r\   s     r!   
<listcomp>z.TestTimeout._on_expiration.<locals>.<listcomp>   s    777Q#a&&777r+   zLoop Debug:

z
Run Info:
)gevent.utilr}   rw   get_hubloophasattrr~   join_expire_inforx   _on_expiration)r   prev_greenletexr}   r   
debug_inforun_infos          r!   r   zTestTimeout._on_expiration   s    //////~$
4!! 	877$**,,777J"?$$IIj!!!!499X#6#6#6
 	%%dM2>>>>>r+   c                 X    t           j                            |           }|| j        z  }|S r$   )rw   rx   __str__r   rd   s     r!   r   zTestTimeout.__str__   s)    N""4((	Tr+   N)rt   )r<   r=   r>   r   ry   r   r   r%   r+   r!   rr   rr      sK        L
 
 
 

? 
? 
?    r+   rr   c                 H      S t                     fd            }|S )Nc                 p    t                    5   | g|R i |cd d d            S # 1 swxY w Y   d S r$   )rr   )r   argskwargsr{   rz   s      r!   timeout_wrapperz&_wrap_timeout.<locals>.timeout_wrapper   s    &)) 	1 	16$000000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   +//r   )rz   r{   r   s   `` r!   _wrap_timeoutr      sD    
6]]1 1 1 1 1 ]1 r+   c           	          t                      }|                     ||          }||ur|S |D ]}t          |||          }||ur|c S |t          u rt          d|d| d|d          |S )Nz
Attribute z not found
r   )objectgetgetattrAttributeError)	classDictbasesattrdefaultNONEvaluebases          r!   _get_class_attrr      s    88DMM$%%ED  dD))LLL .  n444TYTYTYZ[[[Nr+   c                       e Zd Zd ZdS )TestCaseMetaClassc                    |                     dd          }|dk    r*t          |d         dd           }t          j        r||dz  }t	          ||dd          }t	          ||dd          }t	          ||dd          }t          |                                          D ]\  }}	|                    d	          rt          |	          r|	                    |           t          ||	          }	t          |	d|          }|rt          j        |	          }	|rt          j        |	          }	|r t          j        rt          j        |	          }	|	||<   t                               | |||          S )
N__timeout__r   r      check_totalrefcountTerror_fataluses_handle_errortest)r   r   r   RUN_LEAKCHECKSr   listitemsro   callablepopr   r   wrap_error_fatalwrap_restore_handle_errorr   wrap_refcountra   __new__)
mcs	classnamer   r   rz   r   r   r   keyr   s
             r!   r   zTestCaseMetaClass.__new__   s   
 --v66feAht<<G% '*=1-i@UW[\\%itLL+Iu>QSWXX y0011 	' 	'JC~~f%% '(5// 'c""" &gu55%e]KHH A(9%@@E$ J(B5IIE& ;7+A ;%3E::E!&	#||CE9===r+   N)r<   r=   r>   r   r%   r+   r!   r   r      s#        > > > > >r+   r   c                      d S r$   r%   r%   r+   r!   _noopr      s    
Fr+   c                   .     e Zd Z fdZd Z fdZ xZS )SubscriberCleanupMixinc                     t          t          |                                            ddlm} |j        d d          | _        d S Nr   )events)superr   setUprw   r   subscribers(_SubscriberCleanupMixin__old_subscribersr   r   	__class__s     r!   r   zSubscriberCleanupMixin.setUp   sL    $d++11333!!!!!!!'!3AAA!6r+   c                 F    ddl m} |j                            |           d S r   )rw   r   r   append)r   r[   r   s      r!   addSubscriberz$SubscriberCleanupMixin.addSubscriber   s1    !!!!!!!!#&&&&&r+   c                     ddl m} | j        |j        d d <   t	          t
          |                                            d S r   )rw   r   r   r   r   r   tearDownr   s     r!   r   zSubscriberCleanupMixin.tearDown   sL    !!!!!! $ 6111$d++4466666r+   )r<   r=   r>   r   r   r   __classcell__r   s   @r!   r   r      s`        7 7 7 7 7
' ' '7 7 7 7 7 7 7 7 7r+   r   c                       e Zd Zej        sej        nej        ZdZ	dZ
dZdZdZ fdZ fdZd Z fdZd Zd	 Zed
             Zed             Zed             Zed             ZdZeZd Zd Zd Zd ZddZddZ d Z!d Z"d Z# xZ$S )r   r   Tr%   c                     | j         dk    rt          | j                  | _          t          t          |           j        |i |S )Nr   )switch_expectedr   fullnamer   r   run)r   r   r   r   s      r!   r   zTestCase.run  sE    9,,#6t}#E#ED (uXt$$($9&999r+   c                     t          t          |                                            t                      }|r |j        r|j                                         g | _        |                     | j                   d S r$   )	r   r   r   r   r   
update_nowclose_on_teardown
addCleanup_tearDownCloseOnTearDown)r   hubr   s     r!   r   zTestCase.setUp"  st    h##%%%  !! 	"38 	"H!!!!#566666r+   c                      |             d S r$   r%   )r   r{   s     r!   _callTestMethodzTestCase._callTestMethod0  s      	r+   c                     t          | dd          r| j        d d = d S t          | dt                    } |             | j        | _        t          t          |                                            d S )NskipTearDownFcleanup)r   r   r   _none_errorr   r   r   )r   r   r   s     r!   r   zTestCase.tearDownB  sr    4// 	&qqq)F$	511			jh&&(((((r+   c                     | j         rO| j                                         }t          |d|          }	  |             n# t          $ r Y nw xY w| j         Md S d S )Nclose)r   r   r   	Exception)r   xr   s      r!   r   z!TestCase._tearDownCloseOnTearDownL  s    $ 	&**,,AAw**E    $ 	 	 	 	 	s   
> 
A
Ac                 :    | j                             |           |S )zU
        *resource* either has a ``close`` method, or is a
        callable.
        )r   r   )r   resources     r!   _close_on_teardownzTestCase._close_on_teardownU  s     
 	%%h///r+   c                 D    t          | dd          pt          | d          S )N_testMethodNamers   _TestCase__testMethodName)r   r   s    r!   testnamezTestCase.testname]  s%    t.33awtE`7a7aar+   c                 0    | j         j        dz   | j        z   S )N.)r   r<   r   r   s    r!   testcasenamezTestCase.testcasenamea  s    ~&,t}<<r+   c                     t           j                            t          j        | j        j                 j                                      dd          d         S )Nr   r   r   )	ospathbasenamesysmodulesr   r=   __file__rsplitr   s    r!   
modulenamezTestCase.modulenamee  s?    wDN,E F OPPWWX[]^__`abbr+   c                     t           j                            t           j                            | j                            d         dz   | j        z   S )Nr   r   )r   r   splitextr   r   r   r   s    r!   r   zTestCase.fullnamei  s<    w 0 0 A ABB1EKdN___r+   r;   c                     |                      | j        | j                   | j        t	          j                    _        d S r$   )assertEqualr   r   _store_errorrw   r   handle_errorr   s    r!   expect_one_errorzTestCase.expect_one_errorq  s5    dj111(,(9%%%r+   c                     ~| j         | j        k    r.t          j                    j                            ||           d S |||f| _         d S r$   )r   r   rw   r   parentthrow)r   wheretr   tbs        r!   r   zTestCase._store_erroru  sM    ;$*$$N#))!U33333 !U+DKKKr+   c                     | j         S r$   )r   r   s    r!   
peek_errorzTestCase.peek_error|  s
    {r+   c                 L    	 | j         | j        | _         S # | j        | _         w xY wr$   )r   r   r   s    r!   	get_errorzTestCase.get_error  s,    	%;*DKK$*DK$$$$s    #Nc                    ||                                  }|\  }}}|N|                     |t                     |                     |d|           t	          ||          s
J |            |Ot          |t                    r$|                     t          |          |           n|                     ||           ||                     ||           |S )NzError must not be none )	r  assertIsInstancera   assertIsNotNone
issubclass
isinstancerg   r   assertIs)r   kindr   error
where_typeecontextekindevalues           r!   assert_errorzTestCase.assert_error  s    =NN$$E"'%!!$---  /4u68 8 8 eT**11E111%%% -  Ve4444fe,,,!!!(J777r+   c                 J   dd l }dd l}ddlm} t	          t          d|z             |          }t	          |d|          }d}	|sd}	t	          |d          }|D ]}
|
|v rt	          ||
          }|                    |          s|	s0 |||
          }	 |                                5  |j        } ||          } ||          }d d d            n# 1 swxY w Y   n# t          $ r |	r Y w xY w| 
                    |j        |j        |
           | 
                    |j        |j        |
           | 
                    |j        |j        |
           t          |d          rz|
|j        |j        f}	 | 
                    |j        |j        |           @# t           $ r: |                     |j        |           | 
                    d	|j                   Y w xY w| 
                    |j        |j        |
           | 
                    |j        |j        |
           d S )
Nr   )get_originalzgevent.
__target__TF__implements__keywordsr   )inspectwarningsgevent.monkeyr  r   
__import__
isfunctioncatch_warningsgetfullargspec	TypeErrorr   r   varargsdefaultsr   r  r   assertIsNone
kwonlyargskwonlydefaults)r   mod_name
func_namesexcluder  r  r  gevent_modulemodule_namefuncs_given	func_namegevent_funcfuncr  
gevent_sigsigr   s                    r!   !assertMonkeyPatchedFuncSignaturesz*TestCase.assertMonkeyPatchedFuncSignatures  s   
 	......
9x+? @ @(KKm\8DD 	BK 0@AAJ# )	[ )	[IG##!-;;K%%k22 ; <Y77D,,.. / /%,%;N!/!<!<J(...C/ / / / / / / / / / / / / / /       SXz	BBBS[**<iHHHS\:+>	JJJsJ'' [ #,
0CDD$$S\:3FLLLL% D D D %%clC888$$Xz/BCCCCCD   1F	RRR  !3Z5NPYZZZZS)	[ )	[sI   C)CCC	CC	CC/.C/5!FA GGc                 |    	 |                      ||           d S # t          $ r t          j                     Y d S w xY wr$   )r   r   r   r3   )r   abs      r!   assertEqualFlakyRaceConditionz&TestCase.assertEqualFlakyRaceCondition  sV    	2Q""""" 	2 	2 	2/111111	2s    ;;c                 \    |                      |                    |          ||f           d S r$   )r2   ro   )r   it
has_prefixs      r!   assertStartsWithzTestCase.assertStartsWith  s-    j11B
3CDDDDDr+   c                 `    ddl m} |                     |                                           d S )Nr   )monkey)rw   r;  rE   is_anything_patched)r   r;  s     r!   assertNotMonkeyPatchedzTestCase.assertNotMonkeyPatched  s:    !!!!!!335566666r+   )NNNN)r%   r%   )%r<   r=   r>   r   RUNNING_ON_CIr   LOCAL_TIMEOUT
CI_TIMEOUTr   r   r   r   r   _TestCase__old_subscribersr   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r  r  r  r1  r5  r9  r=  r   r   s   @r!   r   r     s        /6.CZ&&&IZKO K: : : : :
7 7 7 7 7  $) ) ) ) )     b b Xb = = X= c c Xc ` ` X` EF: : :, , ,  % % %   &:[ :[ :[ :[z2 2 2E E E7 7 7 7 7 7 7r+   r   )	metaclass)+
__future__r   r   r   r   os.pathr   
contextlibr   unittestr   BaseTestCase	functoolsr	   rw   gevent._utilr
   gevent._compatr   r   gevent._hub_localr   rs   r   r   r   r   r   patched_tests_setupr   r   r   rA   rS   rx   rr   r   r   r   ra   r   r   r   r%   r+   r!   <module>rN     s  ( A @ @ @ @ @ @ @ @ @ 



  % % % % % % - - - - - -        $ $ $ $ $ $ ' ' ' ' ' ' ) ) ) ) ) ) / / / / / /                               4 4 4 4 4 4+3 +3 +3 +3 +3f +3 +3 +3\# # # # #& # # #03 3 3 3 3 3 3 3F    &.   8	 	 	 5C    %> %> %> %> %> %> %> %>N  7 7 7 7 7V 7 7 7"]7 ]7 ]7 ]7 ]7 	1D<#]7 ]7 ]7 ]7 ]7 ]7r+   