
    ziIM                       d Z ddlmZ ddl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
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 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% 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+ ej,        dk     rdd l-m.Z. erdd!l/m0Z0 dd"l1m2Z2 d[d'Z3d\d*Z4d]d-Z5d]d.Z6d^d4Z7	 d_d`d8Z8dad9Z9dad:Z:dad;Z;dbd<Z<dcd?Z=dddCZ>	 dedfdFZ?dgdJZ@dhdMZA edNd5O          ZBeejC         G dP dQeeB                                           ZDdidSZEdjdWZF G dX dY          ZGdjdZZHdS )kz3Basic collect and runtest protocol implementations.    )annotationsN)Callable)cast)final)Generic)Literal)TYPE_CHECKING)TypeVar   )Config)
BaseReport)CollectErrorRepr)CollectReport)
TestReport)timing)ExceptionChainRepr)ExceptionInfo)TerminalRepr)Parser)check_ispytest)	Collector)	Directory)Item)Node)Exit)OutcomeException)Skipped)TEST_OUTCOME)      )BaseExceptionGroup)Session)TerminalReporterparserr   returnNonec                    |                      ddd          }|                    ddt          d dd	           |                    d
dt          d dd	           d S )Nzterminal reporting	Reportinggeneral)afterz--durationsstoreNz1Show N slowest setup/test durations (N=0 for all))actiontypedefaultmetavarhelpz--durations-minzcMinimal duration in seconds for inclusion in slowest list. Default: 0.005 (or 0.0 if -vv is given).)getgroup	addoptionintfloat)r$   groups     Q/root/projects/openclaw-proxy/venv/lib/python3.11/site-packages/_pytest/runner.pypytest_addoptionr8   3   s    OO0+YOOOE	OO@     
OO3          terminalreporterr#   c                B   | j         j        j        }| j         j        j        }| j                                         }|d S |
|dk     rdnd}| }g }|j                                        D ],}|D ]'}t          |d          r|                    |           (-|sd S |	                    d d           |s|
                    dd	           n$|
                    dd
| d           |d |         }t          |          D ]\  }}|j        |k     rb|                    d           dt          |          |z
   d|dd}	| j         j        j        |	dz  }	|	dz  }	|                    |	            d S |                    |j        dd|j        dd|j                    d S )N   g{Gzt?g        durationc                    | j         S N)r=   )xs    r7   <lambda>z)pytest_terminal_summary.<locals>.<lambda>X   s    QZ r9   T)keyreverse=zslowest durationszslowest z
 durations (z durations < gz	s hidden.z"  Use -vv to show these durations.)z02.2fzs z<8 )configoption	durationsdurations_minget_verbositystatsvalueshasattrappendsort	write_sep	enumerater=   
write_linelenwhennodeid)
r:   rL   rM   verbosetrdlistreplistrepimessages
             r7   pytest_terminal_summaryra   H   s	    '.8I$+2@M%3355G!(1#	BE8??$$ " " 	" 	"CsJ'' "S!!!	"  	JJ''J666 "
S-....
S:Y:::;;;jyj!E"" 	K 	K3<-''MM"Q#e**q.QQ}QQQQG&-;C??sNGMM'"""EE
IIIsxIIISZIIJJJJ	K 	Kr9   sessionr"   c                ,    t                      | _        d S r?   )
SetupState_setupstaterb   s    r7   pytest_sessionstartrg   k   s    $,,Gr9   c                :    | j                             d            d S r?   )re   teardown_exactrf   s    r7   pytest_sessionfinishrj   o   s    &&t,,,,,r9   itemr   nextitemItem | Noneboolc                    | j         }|                    | j        | j                   t	          | |           |                    | j        | j                   dS )N)rY   locationrl   T)ihookpytest_runtest_logstartrY   rp   runtestprotocolpytest_runtest_logfinish)rk   rl   rr   s      r7   pytest_runtest_protocolrv   s   s[    JE	!!t}!MMMD8,,,,	""$+"NNN4r9   Tloglist[TestReport]c                   t          | d          }|r| j        s|                                  t          | d|          }|g}|j        ri| j                            dd          rt          |            | j                            dd          s$|                    t          | d|                     | j	        j
        s| j	        j        rd }|                    t          | d||                     |rd| _        d | _        |S )	N_requestsetup	setupshowF	setuponlycallteardownrq   )rQ   rz   _initrequestcall_and_reportpassedrJ   	getoptionshow_test_itemrR   rb   
shouldfail
shouldstopfuncargs)rk   rw   rl   
hasrequestr^   reportss         r7   rt   rt   {   s    z**J $-  	
$
-
-CeG
z ?;  e44 	!4   {$$[%88 	?NN?4==>>> | $,"9 NN?4S8LLLMMM  Nr9   c                   | j                                         }|                                 |                    d           |                    | j                   t          t          | dg                     }|r;|                    d                    d                    |                               |	                                 dS )zAShow test function, parameters and the fixtures of the test item.z        fixturenamesz (fixtures used: {})z, N)
rJ   get_terminal_writerlinewriterY   sortedgetattrformatjoinflush)rk   twused_fixturess      r7   r   r      s    		(	(	*	*BGGIIIHHWHHT[74<<==M J
'..tyy/G/GHHIIIHHJJJJJr9   c                d    t          | d           | j        j                            |            d S )Nr{   )_update_current_test_varrb   re   r{   )rk   s    r7   pytest_runtest_setupr      s1    T7+++L""4(((((r9   c                   t          | d           	 t          `t          `t          `t          j        dk    rt          `n# t          $ r Y nw xY w	 |                                  d S # t          $ rf}t          |          t          _        |t          _        t          j        dk    r|t          _        |j        J |j        j        t          _         d }~ww xY w)Nr~   )r      r   )r   sys	last_type
last_valuelast_tracebackversion_infolast_excAttributeErrorruntest	Exceptionr.   __traceback__tb_next)rk   es     r7   pytest_runtest_callr      s    T6***MNz))    	 	 	Qz))CL***_4	s(   ,? 
AAA& &
C0A!CCc                    t          | d           | j        j                            |           t          | d            d S )Nr   )r   rb   re   ri   )rk   rl   s     r7   pytest_runtest_teardownr      sA    T:...L++H555T4(((((r9   rX   +Literal['setup', 'call', 'teardown'] | Nonec                    d}|r4| j          d| d}|                    dd          }|t          j        |<   dS t          j                            |           dS )zUpdate :envvar:`PYTEST_CURRENT_TEST` to reflect the current item and stage.

    If ``when`` is None, delete ``PYTEST_CURRENT_TEST`` from the environment.
    PYTEST_CURRENT_TESTz (rH    z(null)N)rY   replaceosenvironpop)rk   rX   var_namevalues       r7   r   r      sh     %H !;))$)))fh//$
8

x     r9   reportr   tuple[str, str, str] | Nonec                @    | j         dv r| j        rdS | j        rdS dS d S )N)r{   r   )errorEERROR)skippedsSKIPPED)rE   rE   rE   )rX   failedr   r   s    r7   pytest_report_teststatusr      s:    {+++= 	((^ 	,,:4r9   $Literal['setup', 'call', 'teardown']r   c                     j         }|dk    r|j        n)|dk    r|j        n|dk    r|j        nJ d|             t                               fd|t           j                            }|                     |          }|r|	                    |	           t          ||          r|                     ||
           |S )Nr{   r~   r   FzUnhandled runtest hook case: c                      dd iS )Nrk    r   )rk   kwdsruntest_hooks   r7   rA   z!call_and_report.<locals>.<lambda>   s    //$/$// r9   )rX   reraiserk   r~   r   noder~   r   )rr   r   r   r   CallInfo	from_callget_reraise_exceptionsrJ   pytest_runtest_makereportpytest_runtest_logreportcheck_interactive_exceptionpytest_exception_interact)rk   rX   rw   r   rr   r~   r   r   s   `  `   @r7   r   r      s    JEw,1,F	0			4<<d<<<<<//////&t{33   D
 88d8NNF
 6&&f&555"400 M''TV'LLLMr9   rJ   r   tuple[type[BaseException], ...]c                X    t           f}|                     dd          s|t          fz  }|S )z@Return exception types that should not be suppressed in general.usepdbF)r   r   KeyboardInterrupt)rJ   r   s     r7   r   r     s4    04wGHe,, (%''Nr9   r~   CallInfo[object]c                    | j         dS t          |d          rdS t          | j         j        t          t
          j        z            rdS dS )zVCheck whether the call raised an exception that should be reported as
    interactive.NFwasxfailT)excinforQ   
isinstancer   r   bdbBdbQuit)r~   r   s     r7   r   r   	  sP     |uvz"" u$,$g&;<< u4r9   TResult)	covariantc                      e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<   ddddZed d            Ze	 d!d"d            Z	d#dZ
dS )$r   z/Result/Exception info of a function invocation.TResult | None_result#ExceptionInfo[BaseException] | Noner   r5   startstopr=   /Literal['collect', 'setup', 'call', 'teardown']rX   F)	_ispytestresultr   rn   r%   r&   c               x    t          |           || _        || _        || _        || _        || _        || _        d S r?   )r   r   r   r   r   r=   rX   )selfr   r   r   r   r=   rX   r   s           r7   __init__zCallInfo.__init__,  s@     	y!!!
	 			r9   r   c                h    | j         t          | d          t          t          | j                  S )zlThe return value of the call, if it didn't raise.

        Can only be accessed if excinfo is None.
        Nz has no valid result)r   r   r   r   r   r   s    r7   r   zCallInfo.result?  s7     <# D!@!@!@AAA GT\***r9   NfuncCallable[[], TResult]r   <type[BaseException] | tuple[type[BaseException], ...] | NoneCallInfo[TResult]c           	     <   d}t          j                    }	  |            }n=# t          $ r0 t          j                    }|t          |j        |          r d}Y nw xY w|                                } | |j        j	        |j
        j	        |j        |||d          S )a  Call func, wrapping the result in a CallInfo.

        :param func:
            The function to call. Called without arguments.
        :type func: Callable[[], _pytest.runner.TResult]
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        NT)r   r   r=   rX   r   r   r   )r   InstantBaseExceptionr   from_currentr   r   elapsedr   timer   seconds)clsr   rX   r   r   instantr   r=   s           r7   r   zCallInfo.from_callL  s    $ .""	%)TVVFF 	 	 	#022G"z'-'I'I"FFF		
 ??$$s.%#%
 
 
 	
s   
" 7AAstrc                \    | j         d| j        d| j        dS d| j        d| j         dS )Nz<CallInfo when=z	 result: >z	 excinfo=)r   rX   r   r   s    r7   __repr__zCallInfo.__repr__r  sD    <LTYLL4<LLLLHHHt|HHHHr9   )r   r   r   r   r   r5   r   r5   r=   r5   rX   r   r   rn   r%   r&   )r%   r   r?   )r   r   rX   r   r   r   r%   r   )r%   r   )__name__
__module____qualname____doc____annotations__r   propertyr   classmethodr   r   r   r9   r7   r   r     s          :90000LLLKKKOOO9999       & 
+ 
+ 
+ X
+ 
 QU	#
 #
 #
 #
 [#
JI I I I I Ir9   r   CallInfo[None]c                ,    t          j        | |          S r?   )r   from_item_and_callr   s     r7   r   r   x  s    (t444r9   	collectorr   r   c                D    d fd}t                               |dt          t          f          }d }|j        sd}n4t
          g}t          j                            d          }||	                    |j
                   t          |j        j        t          |                    rvd}                     |j        d	          }t          |t                    sJ t!          |                      |j        }|sJ t%          |j                  |j        |j        f}nTd
}                     |j                  }	t/          |	d          s&t          |	t$                    sJ t1          |	          }	|	}|j        s|j        nd }
t5           j        |||
          }||_        |S )Nr%   list[Item | Collector]c                 4   t           t                    rb j        j                             j         j                            d           j        j         j                            d                     t           
                                          S )N
importmodeconsider_namespace_packages)rootpathr  )r   r   rJ   pluginmanager_loadconftestmodulespathr   r  getinilistcollectr  s   r7   r  z+pytest_make_collect_report.<locals>.collect}  s     i++ 	*?? **<88")2,5,<,C,C1- -	 @    I%%''(((r9   r  )r   r   unittestr   r   r   
toterminal)r%   r	  )r   r   r   
SystemExitr   r   r   modulesgetrR   SkipTestr   r   tuple_repr_failure_pyr   repr	reprcrashr   r  linenor`   repr_failurerQ   r   r   r   rY   r~   )r  r  r~   longreproutcomeskip_exceptionsr  r_r	errorinfor   r^   s   `           r7   pytest_make_collect_reportr'  |  s   ) ) ) ) ) )& %6
$C   D BFH< !:B");??:..""8#4555dl(%*@*@AA 	!G++DL&AABb"455??tBxx???AHHHAFQXqy9HHG!..t|<<I9l33 8!)S11111,Y77	 H $6T[[$F
	('8V
D
DCCHJr9   c                  2    e Zd ZdZddZddZddZddZdS )rd   aE  Shared state for setting up/tearing down test items or collectors
    in a session.

    Suppose we have a collection tree as follows:

    <Session session>
        <Module mod1>
            <Function item1>
        <Module mod2>
            <Function item2>

    The SetupState maintains a stack. The stack starts out empty:

        []

    During the setup phase of item1, setup(item1) is called. What it does
    is:

        push session to stack, run session.setup()
        push mod1 to stack, run mod1.setup()
        push item1 to stack, run item1.setup()

    The stack is:

        [session, mod1, item1]

    While the stack is in this shape, it is allowed to add finalizers to
    each of session, mod1, item1 using addfinalizer().

    During the teardown phase of item1, teardown_exact(item2) is called,
    where item2 is the next item to item1. What it does is:

        pop item1 from stack, run its teardowns
        pop mod1 from stack, run its teardowns

    mod1 was popped because it ended its purpose with item1. The stack is:

        [session]

    During the setup phase of item2, setup(item2) is called. What it does
    is:

        push mod2 to stack, run mod2.setup()
        push item2 to stack, run item2.setup()

    Stack:

        [session, mod2, item2]

    During the teardown phase of item2, teardown_exact(None) is called,
    because item2 is the last item. What it does is:

        pop item2 from stack, run its teardowns
        pop mod2 from stack, run its teardowns
        pop session from stack, run its teardowns

    Stack:

        []

    The end!
    r%   r&   c                    i | _         d S r?   )stackr   s    r7   r   zSetupState.__init__  s      	


r9   rk   r   c                   |                                 }| j                                        D ]9\  }\  }}||v s
J d            |r!|d                             |d                   :|t	          | j                  d         D ]k}|| j        vsJ |j        gdf| j        |<   	 |                                 5# t          $ r*}| j        |         d         ||j        ff| j        |<    d}~ww xY wdS )z4Setup objects along the collector chain to the item.z(previous item was not torn down properlyr   r   N)		listchainr*  itemswith_tracebackrW   r   r{   r   r   )r   rk   needed_collectorscol
finalizersexcs         r7   r{   zSetupState.setup  s-    NN,, '+j&6&6&8&8 	4 	4"C"*c++++-W+++ 4!f++CF3334 %S__%6%67 	 	Cdj(((( #~t4DJsO		   #':c?1#5S=N7O"P
3	 	s   $B99
C-%C((C-	finalizerCallable[[], object]r   r   c                    |rt          |t                    rJ t          |          sJ || j        v sJ || j        f            | j        |         d                             |           dS )zgAttach a finalizer to the given node.

        The node must be currently active in the stack.
        r   N)r   r  callabler*  rR   )r   r3  r   s      r7   addfinalizerzSetupState.addfinalizer  s{    
 3JtU33333	"""""tz!!!D$*#5!!!
4""9-----r9   rl   rm   c           	        |r|                                 pg }g }| j        rt          | j                                                  |dt	          | j                           k    rn| j                                        \  }\  }}g }|rN|                                }	  |             n,# t          $ r}	|                    |	           Y d}	~	nd}	~	ww xY w|Nt	          |          dk    r|	                    |           n3|r1d|}
|                    t          |
|ddd                              | j        t	          |          dk    r|d         |rt          d|ddd                   |	| j        rJ dS dS )zTeardown the current stack up until reaching nodes that nextitem
        also descends from.

        When nextitem is None (meaning we're at the last item), the entire
        stack is torn down.
        Nr   zerrors while tearing down r   zerrors during test teardown)r,  r*  r  keysrW   popitemr   r   rR   extendr!   )r   rl   r/  
exceptionsr   r1  _these_exceptionsfinr   msgs              r7   ri   zSetupState.teardown_exact  s    &>(*<*<*>*>E2*,
j 	SDJOO%%&&*;<Mc$*oo<M*NNN$(J$6$6$8$8!D/:q! / nn&&/CEEEE# / / /$++A......../	  / #$$))!!"23333! S;4;;!!"4S:J44R4:P"Q"QRRR! j 	S$ z??aQ- 	V$%BJttQStDTUUUz!!! !!s    
B+ +
C5CCN)r%   r&   rk   r   r%   r&   )r3  r4  r   r   r%   r&   )rl   rm   r%   r&   )r   r   r   r   r   r{   r7  ri   r   r9   r7   rd   rd     so        = =~
 
 
 
   *. . . . "  "  "  "  "  "r9   rd   c                    | j         }|                    |            |                    |           }|j                            dd           }|r(t          ||          r|                    | ||           |S )Nr  r~   r   )rr   pytest_collectstartr'  __dict__r   r   r   )r  rr   r^   r~   s       r7   collect_one_noderF  =  s    OE		22299I9NNC<FD))D O+D#66 O''YT#'NNNJr9   )r$   r   r%   r&   )r:   r#   r%   r&   )rb   r"   r%   r&   )rk   r   rl   rm   r%   rn   )TN)rk   r   rw   rn   rl   rm   r%   rx   rB  )rk   r   rl   rm   r%   r&   )rk   r   rX   r   r%   r&   )r   r   r%   r   )T)rk   r   rX   r   rw   rn   r%   r   )rJ   r   r%   r   )r~   r   r   r   r%   rn   )rk   r   r~   r  r%   r   )r  r   r%   r   )Ir   
__future__r   r   collections.abcr   dataclassesr   r   typestypingr   r   r   r   r	   r
   rJ   r   r   r   r   r   r   _pytestr   _pytest._code.coder   r   r   _pytest.config.argparsingr   _pytest.deprecatedr   _pytest.nodesr   r   r   r   _pytest.outcomesr   r   r   r   r   exceptiongroupr!   _pytest.mainr"   _pytest.terminalr#   r8   ra   rg   rj   rv   rt   r   r   r   r   r   r   r   r   r   r   	dataclassr   r   r'  rd   rF  r   r9   r7   <module>rV     s   9 9 " " " " " " 



 $ $ $ $ $ $     				 



                                                        % % % % % % " " " " " "             1 1 1 1 1 1 , , , , , , + + + + + + , , , , , , - - - - - - # # # # # # # # # # # #             ! ! ! ! ! ! - - - - - - $ $ $ $ $ $ ) ) ) ) ) ) g111111 2$$$$$$111111   * K  K  K  KF' ' ' '- - - -    ;?    8	 	 	 	) ) ) )
   0) ) ) )! ! ! !"	 	 	 	" IM    4       ')t
,
,
, XI XI XI XI XIww XI XI  XIv5 5 5 50 0 0 0fK" K" K" K" K" K" K" K"\     r9   