
    <|hfK                        d Z ddlZddlZddlZddlZddl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mZ ddlmZ d	Z eej&                  j)                  d
d            Z G d dej,                        Zi ddddddddddddddddddddddddd dd!d"d#dd$dd%d&d'dd(dd)Zg d*Zddd+d,d-d.d.d/d0d1d2d2d2d3Zd4 Zd5 ZdSd6Zd7 Zd8 Zd9 Zd: Z d; Z!d< Z"h d=Z#h d>Z$dTd?Z%dUd@Z& G dA dBe'      Z(dC Z) ejT                         Z+dD Z,dE Z- G dF dGe.      Z/dH Z0dVdIZ1dJ Z2dK Z3dL Z4 G dM dNe'      Z5 G dO dPe5ejl                        Z7 G dQ dRejp                        Z9y)Wz
.. caution::

    This module imports `subprocess` and `threading`; this can
    break monkey-patched unittests. Specifically,
    ``test_threading.ThreadTests.test_import_from_another_thread``.
    N)sleep   )six)validate_bool)perf_counter)get_originalFGEVENTTEST_QUIET0c                        e Zd ZdZdZd Zd Zy)Popenz
    Depending on when we're imported and if the process has been monkey-patched,
    this could use cooperative or native Popen.
    Nc                     | S N selfs    R/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/testing/util.py	__enter__zPopen.__enter__&   s        c                     t        |        y r   )kill)r   argss     r   __exit__zPopen.__exit__)   s	    T
r   )__name__
__module____qualname____doc__timerr   r   r   r   r   r   r      s     Er   r   normaldefaultzactual-outputredzcharacter-diffsmagentadebugcyanz
diff-chunkerror	brightredzerror-number	exceptionzexpected-outputgreenzfailed-examplefilename	lightblueinfolinenolightrednumberz	ok-numberskippedbrightyellowbrightmagenta	lightcyan)	slow-testsuboptimal-behaviourtestnamewarning))darkz0;)light1;)brightr8   )boldr8             !   "   #   $   %   )r   r   blackr    r'   brownyellowbluer!   r#   greygraywhitec                     d}t         D ](  \  }}| j                  |      s| t        |      d  } |} n t        |    }d||dS )N z[m)	_prefixes
startswithlen_colorcodes)colorprefix_codeprefixcode
color_codes        r   _color_coderV   ^   sW    K! F##f+,'EK	
 U#J&
33r   c                 &    t        t        |          S r   )rV   _colorscheme)whats    r   _colorrZ   h   s    |D)**r   c                 6    t        |       |z   t        |      z   S r   )rZ   )rY   messager   s      r   	_colorizer]   k   s    $<'!F6N22r   c                     |j                  dd      }|r| |z  }n| }t        ||      }t        5  t        j                  j                  |dz          ddd       y# 1 sw Y   yxY w)zV
    Log a *message*

    :keyword str color: One of the values from _colorscheme
    rQ   r   
N)popr]   output_locksysstderrwrite)r\   r   kwargsrQ   strings        r   logrg   n   s_     JJw)E4uf%F	 (

$'( ( (s   #AA$c                 T    t         s"|j                  dd       t        | g|i | yy)z<
    Log the *message* only if we're not in quiet mode.
    rQ   r"   N)QUIET
setdefaultrg   )r\   r   re   s      r   r"   r"      s.     '7+G%d%f% r   c                 L   t        t        d      sy 	 t        j                  | d      S # t        $ r?}|j                  dk7  r&t        d| t        |      j                  |       Y d }~y Y d }~y d }~wt        $ r+}t        d| t        |      j                  |       Y d }~y d }~ww xY w)Nkillpg	      zkillpg(%r, 9) failed: %s: %s)	hasattrosrl   OSErrorerrnorg   typer   	Exception)pidexs     r   rl   rl      s    2x Hyya   L88q=.T"X5F5FKK  H*Cb1B1BBGGHs    ) 	B#0A,,B#8!BB#c                     d| z  }t        d| z  t        j                        j                         d   }|r"|j	                         |dfvrt        d|       y y y )Nz"ERROR: The process "%s" not found.ztaskkill /F /PID %s /T)rc   r   rK   z%r)r   
subprocessPIPEcommunicatestriprg   )ru   
ignore_msgerrs      r   kill_processtreer~      sV    5;J
(3.z
G
S
S
UVW
XC
syy{:r"22D# 3sr   c                    t        | d      r	 | j                          y 	 t	        j                  | j
                  d       y # t        $ r.}|j                  dk(  rY d }~y |j                  dk(  rY d }~y  d }~ww xY w# t        $ r Y y w xY w)Nr   rn      rm   )ro   r   rq   rr   rp   ru   EnvironmentError)popenrv   s     r   _killr      su    uf	JJL	GGEIIq!  	xx1}xx2~	   		s4   A  A; 	A8
A3A32A33A8;	BBc                 J   | j                   !| j                   j                          d | _         | j                         y d| _        	 t	        | dd       rt        | j                         n4t        j                  j                  d      rt        | j                         	 t        |        	 | j                          y # t        $ r t        j                          Y =w xY w# t        $ r t        j                          Y Tw xY w# t        $ r t        j                          Y y w xY w)NTsetpgrp_enabledwin)r   cancelpoll
was_killedgetattrrl   ru   rb   platformrN   r~   rt   	traceback	print_excr   wait)r   s    r   r   r      s    {{zz|E5+T2599\\$$U+UYY'e

      s7   AB< C +D <CCC?>C?D"!D">   GEVENT_DEBUGr	   GEVENTSETUP_EMBEDGEVENTSETUP_EV_VERIFY>   GEVENT_RESOLVERthreadGEVENTTEST_USE_RESOURCESallGEVENT_RESOLVER_NAMESERVERSz8.8.8.8c                    g }|xs t         j                  j                         }|j                  |xs i        t	        |j                               D ]A  \  }}|j                  d      s|t        v r!||ft        v r,|j                  |d|       C t        | t        j                        r|j                  |        n|j                  |        dj                  |      S )NGEVENT= )rp   environcopyupdatesorteditemsrN   IGNORED_GEVENT_ENV_KEYSIGNORED_GEVENT_ENV_ITEMSappend
isinstancer   string_typesextendjoin)commandenvsetenvresultkeyvalues         r   getnamer      s    F"**
"
"
$CJJv|SYY[) .
U~~h'))<33e,-. '3++,gg88Fr   c                 x   |j                  dd       }d }t        j                  j                  d      st	        t        dd       }|j                  dd       }|j                  dd       xs i }t        | ||      }|d|d<   |rA|r|j                         nt        j                  j                         }|j                  |       |st        d|       t        | f||d	|}||_
        |d u|_        d
|_        |? t        dd      |t        |f      }	|	|_        d|	_        |	j#                          |	|_        |S )NtimeoutDO_NOT_SETPGRPsetpgrpr   r   )r   r   1z+ %s)
preexec_fnr   F	threadingTimer)r   T)r`   rp   r   getr   r   r   r   rg   r   namer   r   r   r   r   daemonstart)
r   quietre   r   r   r   r   r   r   ts
             r   r   r      s$   jjD)GJ::>>*+RD1

**UD
!CZZ$'-2F7F3D#& chhjRZZ__%6

6FD'DjcDVDEEJ&d2EE.Lg.wE9M		Lr   c                   H    e Zd ZdZ	 	 	 	 	 ddZed        Zd ZeZd Z	d Z
y)		RunResultz
    The results of running an external command.

    If the command was successful, this has a boolean
    value of True; otherwise, a boolean value of false.

    The integer value of this object is the command's exit code.
    Nc
                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        y r   )	r   
run_kwargsrT   outputr$   r   	run_countskipped_countrun_duration)
r   r   r   rT   r   r$   r   r   r   r   s
             r   __init__zRunResult.__init__  sE     $	
	"*(r   c                 6    | j                   j                         S r   )r   
splitlinesr   s    r   output_lineszRunResult.output_lines$  s    {{%%''r   c                 .    t        | j                         S r   )boolrT   r   s    r   __bool__zRunResult.__bool__(  s    		?""r   c                     | j                   S r   )rT   r   s    r   __int__zRunResult.__int__-  s    yyr   c                     d| j                   d| j                  d| j                  d| j                  d| j                  dS )NzRunResult of: z
Code: z	
kwargs: z
Output:
----
z----
Error:
----
z----
)r   rT   r   r   r$   r   s    r   __repr__zRunResult.__repr__0  s1     LLIIOOKKJJ#
 	
r   )NNNr   r   r   )r   r   r   r   r   propertyr   r   __nonzero__r   r   r   r   r   r   r     sG     ,-)( ( (# K
r   r   c                    d| v r~| j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  d	d      } d| v S )
NWarningzWarning -- reap_childrenNADAzWarning -- threading_cleanupz/DeprecationWarning: Using or importing the ABCsz UserWarning: libuv only supportsz&ImportWarning: Not importing directoryz*DeprecationWarning: 'U' mode is deprecatedz#DeprecationWarning: dns.hash module)replace)outs    r   _should_show_warning_outputr   F  s    C kk4f=kk8&A kkKVTkk<fEkkBFKkkFOkk?Hr   c                    d}d}d}d}|rt        j                  d|      }|r_||j                         |j                          }|j	                  d|      }t        ||j                  d      |j                  d             }t        j                  d|      }|rWt        d||j                         |j                                }t        ||j                  d      |j                  d             }|| |fz  }| d	kD  rt        d
|      }|||fS )Nz[took %.1fs%s]rK   r   zRan (\d+) tests intookr   z \(skipped=(\d+)\)$r.   
   r2   )researchr   endr   intr]   )r   r   statusr.   r   r   rL   r   s           r   _find_test_statusr   _  s    FGIM
II+S11557+F^^FF3FC
155845III,c2	3qwwy+ABGAGGAJquuQx 89MtWo%Fby;/9m++r   c                 *   |j                  dt              }|j                  dt              }| }|j                  dd      }|j                  dd      }|r5d|vrd|vsJ |       t        j                  |d<   t        j
                  |d<   t        | fd|i|}|j                  }	 t               }	|j                         \  }
}t               |	z
  }|j                  s|j                         d	}n|j                         }t        |       |j                  J t        |      xr ||v}|
r4|
j                         }
t!        |
t"              r|
n|
j%                  d
d      }
|
rF|s|st'        |
      r7d|
j)                  dd      z   }
|
j+                         }
|
dz  }
t-        d||
       t/        ||
      \  }}}|rt-        d||||rdnd       n|st-        d||       t1        | |||v rdn||
|||||	      S # t        |       |j                  J w xY w)zv
    Execute *command*, returning a `RunResult`.

    This blocks until *command* finishes or until it times out.
    buffer_outputr   nestedFallowed_return_codesr   stdoutrc   TIMEOUTzutf-8ignorez  r_   z
  z| %s
%sz! %s [code %s] %sr$   r3   )rQ   z- %s %sr   )r   r$   r   r   r   r   )r`   BUFFER_OUTPUTri   rx   STDOUTry   r   r   r   rz   r   r   r   r   r   r{   r   strdecoder   r   rstriprg   r   r   )r   re   r   r   verboser   r   r   r   
time_startr   r}   durationr   failedr   r   r   s                     r   runr   u  s    JJ>MJJw&EiGZZ%(F!::&<bAv%(&*@H&H@%,,x%??x'11&1E::D
#!^
$$&S>J.uzz|3FZZ\FU{{"""
 &\@f,@@F
iikS)cszz'8/L
'%@%ES[[v..jjltJc"'83'G$FI}vv#')?	AItV$ ++## 1 	U{{"""s   &AG7 7Hc                       e Zd ZdZy)NoSetupPyFoundzRaised by find_setup_py_aboveN)r   r   r   r   r   r   r   r   r     s    #r   r   c                    t         j                  j                  t         j                  j                  |             }t         j                  j	                  t         j                  j                  |d            sr|t         j                  j                  |      }}||k(  rt        d|       t         j                  j	                  t         j                  j                  |d            sr|S )zAReturn the directory containing setup.py somewhere above *a_file*zsetup.pyz!could not find my setup.py above )rp   pathdirnameabspathexistsr   r   )a_filerootprevs      r   find_setup_py_abover     s    77??277??623DggnnRWW\\$
;<277??40d4< &!RSS	 ggnnRWW\\$
;<
 Kr   c                 v   | 	 t        |       S |1	 t        t        j                  |j                     j
                        S |'	 t        t        j                  |   j
                        S |rt        d      S t        dt                     # t        $ r Y w xY w# t        $ r Y fw xY w# t        $ r Y Lw xY w)Nz./dnezAfter checking )r   r   rb   modulesr   __file__locals)r   a_module_namea_class	climb_cwds       r   search_for_setup_pyr    s    	&v.. 	&s{{73E3E'F'O'OPP  	&s{{='A'J'JKK "7++
:
;;%  		  		  		s4   
B /B %B, 	BB	B)(B),	B87B8c                      dt         j                  d d z  } dt         j                  d d z  }t        t         d      r
| dz  } |dz  }| |fS )N%s.%s   %s.%s.%srn   pypy_version_infopypy)rb   version_inforo   )	directoryfull_directorys     r   _version_dir_componentsr    sZ    #**2A..I#"2"22A"66Ns'(V	& n$$r   c                     t        t              } t        j                  j	                  | dd      }t               \  }}dt        j                  dd z  }dt        j                  dd z  }t        t        d	      r
|d
z  }|d
z  }t        j                  j	                  ||      }t        j                  j	                  ||      }||fS )z
    Return a sequence of directories that could contain
    stdlib tests for the running version of Python.

    The most specific tests are at the end of the sequence.

    No checks are performed on existence of the directories.
    )r   src	greentestr  Nr	  r
  rn   r  r  )	r  r  rp   r   r   r  rb   r  ro   )setup_pyr  r  r  s       r   find_stdlib_testsr    s     #(3HXuk:I !8 9I~#**2A..I#"2"22A"66Ns'(V	& Y	2IWW\\)^<Nn$$r   c                  P   dt         j                  vryt         j                  d   } | j                  t         j                  j                        D cg c]!  }t         j                  j                  |      # } }t         j                  j                  j                  |       S c c}w )z
    Return the PYTHONPATH environment variable (if set) with each
    entry being an absolute path. If not set, returns None.
    
PYTHONPATHN)rp   r   splitr   pathsepr   r   )r   ps     r   absolute_pythonpathr    sq    
 2::%::l#D(,

277??(CD1BGGOOADDD77??%% Es   &B#c                   \    e Zd ZdZg ZdZdZdZdZd Z	e
d        Ze
d        Zd Zd	 Zd
 Zy)ExampleMixinz
    Something that uses the ``examples/`` directory
    from the root of the gevent distribution.

    The `cwd` property is set to the root of the gevent distribution.
    rn   g      ?Nc                 6    t        t        t        |             S )z(Return the directory containing setup.py)r   r  )r  r  rs   r   s    r   find_setup_pyzExampleMixin.find_setup_py  s    "J
 	
r   c                     	 | j                         }t        j
                  j                  |d      S # t        $ r}t        j                  d|      d }~ww xY w)N"Unable to locate file/dir to run: examples)r  r   unittestSkipTestrp   r   r   )r   r   es      r   cwdzExampleMixin.cwd  sU    	S%%'D ww||D*--  	S##a$QRR	Ss   2 	AAAc                 &    t               }|rd|iS dS )a"  
        Returns a dictionary of environment variables to set for the
        child in addition to (or replacing) the ones already in the
        environment.

        Since the child is run in `cwd`, relative paths in ``PYTHONPATH``
        need to be converted to absolute paths.
        r  N)r  )r   abs_pythonpaths     r   r   zExampleMixin.setenv&  s     -.1?n-ITIr   c                    t        | dd       rt        d| | j                        t        | dd       rt        d| | j                        	 | j                  }| j
                  }| j                  xs i }| j                  }|rd|v r|d   j                  |       n||d<    |t        j                  ddd|g| j                  z   fd	|i|S # t        $ r}t        j                  d|      d }~ww xY w)
Nr   zInvalid testserverr!  r   z-Wr   z-ur&  )r   AssertionErrorr   r*  exampler&  r   r#  r$  start_kwargsr   r   rb   
executableexample_args)r   methr*  
server_dirr%  re   r   s          r   _startzExampleMixin._start3  s    4& tyyAA44( t{{CC	S\\FJ ""(b6!x ''/#)x ^^T8T6:T=N=NN

 
 	
  	S##a$QRR	Ss   
C	 		C/C**C/c                 .    | j                  t              S N)r0  )r2  r   r   s    r   start_examplezExampleMixin.start_exampleM  s    {{{&&r   c                 .    | j                  t              S r4  )r2  r   r   s    r   run_examplezExampleMixin.run_exampleP  s    {{{$$r   )r   r   r   r   r/  before_delayafter_delayr,  r-  r  r   r&  r   r2  r5  r7  r   r   r   r  r    s`     LLKGL
 . . 
J 
J
4'%r   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)
TestServerNc                 2     ddl m} | fd       } |       S )Nr   )contextmanagerc               3      K   j                         5 } | _        j                          d  j                          d d d        y # 1 sw Y   y xY wwr   )r5  r   beforeafter)r   r   s    r   running_serverz1TestServer.running_server.<locals>.running_server[  sE     ##% "


	  s   A,A	 	A	AA)
contextlibr=  )r   r=  rA  s   `  r   rA  zTestServer.running_serverX  s#    -		 
	 r   c                 n    | j                         5  | j                          d d d        y # 1 sw Y   y xY wr   )rA  _run_all_testsr   s    r   testzTestServer.testd  s/      " 	"!	" 	" 	"s   +4c                     | j                   t        | j                          | j                  | j                  j	                         | j
                  d| j                  j	                                y Nz died with code )r8  r   assertIsNoner   r   r,  r   s    r   r?  zTestServer.beforeh  sP    ($##$$**//+"llDJJOO,=	r   c                     | j                   t        | j                          | j                  | j                  j	                         | j
                  d| j                  j	                                y rG  )r9  r   rH  r   r   r,  r   s    r   r@  zTestServer.afterp  sP    '$""#$**//+"llDJJOO,=	r   c                     d}t        t        |             D ]5  }|j                  d      st        | |      }t	        |      s- |        d}7 |sJ y )NF_testT)r   dirrN   r   callable)r   ranmethodfunctions       r   rD  zTestServer._run_all_testsx  sT    SY' 	F  )"40H%JC	 
sr   )	r   r   r   r   rA  rE  r?  r@  rD  r   r   r   r;  r;  T  s     E
 "r   r;  c                       e Zd Zd Zd Zy)alarmc                 ~    t         j                  j                  |        d| _        || _        | j                          y )NT)r   Threadr   r   r   r   )r   r   s     r   r   zalarm.__init__  s-    !!$'

r   c                     t        | j                         t        j                  j	                  d       t        j                  d       y )Nz	Timeout.
   )r   r   rb   rc   rd   rp   _exitr   s    r   r   z	alarm.run  s+    dll

&
r   N)r   r   r   r   r   r   r   r   rR  rR    s    r   rR  )r   )NN)F)NNNT):r   r   rb   rp   r   r#  r   rx   timer   rK   r   gevent._configr   gevent._compatr   gevent.monkeyr   r   r   r   ri   r   rX   rM   rP   rV   rZ   r]   rg   r"   rl   r~   r   r   r   r   r   r   objectr   r   Lockra   r   r   rt   r   r   r  r  r  r  r  TestCaser;  rT  rR  r   r   r   <module>r_     sL   
 
 	       ( ' &  	bjjnn%7=>J $hy U	
 y V ) [ K  w f  H j  g!" #$ ~%& !%-2	 2R4+3("&	H"0  .:=
 =
@. inn,,;|$Y $<0%%4
&J%6 J%Z,"",^I r   