B
    `=                 @   s2  d 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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rddl(m)Z) dd l*m+Z+ dd!l,m-Z- edd"d#d$Z.d%dd&d'd(Z/d)dd*d+d,Z0d)dd*d-d.Z1e"e
e" e2d/d0d1Z3d`e"e2e
e" e	e d3d4d5Z4e"dd6d7d8Z5e"dd6d9d:Z6e"dd6d;d<Z7e"e
e" dd/d=d>Z8e"e
d? dd@dAdBZ9ee
ee:e:e:f  dCdDdEZ;dae"d?e2edFdGdHZ<dIee2dJdKdLZ=e"d?dMd@dNdOZ>edPd2dQZ?eej@dRdSG dTdU dUee? ZAe"eAd edVdWdXZBe!edYdZd[ZCG d\d] d]ZDe!edYd^d_ZEdS )bz3Basic collect and runtest protocol implementations.    N)Callable)cast)Dict)Generic)List)Optional)Tuple)Type)TYPE_CHECKING)TypeVar)Union   )
BaseReport)CollectErrorRepr)CollectReport)
TestReport)timing)ExceptionChainRepr)ExceptionInfo)TerminalRepr)final)Parser)	Collector)Item)Node)Exit)Skipped)TEST_OUTCOME)Literal)Session)TerminalReporter)parserreturnc             C   s@   | j dddd}|jddtd ddd	 |jd
dtdddd	 d S )Nzterminal reportingZ	reportingZgeneral)afterz--durationsstoreNz2show N slowest setup/test durations (N=0 for all).)actiontypedefaultmetavarhelpz--durations-ming{Gzt?zHMinimal duration in seconds for inclusion in slowest list. Default 0.005)ZgetgroupZ	addoptionintfloat)r!   group r.   V/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/_pytest/runner.pypytest_addoption.   s    r0   r    )terminalreporterr"   c       	      C   s(  | j jj}| j jj}| j d}|d kr,d S | }g }x4|j D ]&}x |D ]}t|drJ|| qJW q@W |srd S |j	dd dd |s|
dd n|
dd	|  |d | }xpt|D ]d\}}|d
k r|j|k r|d |dt|| |f  P ||jdd|jdd|j  qW d S )Nverbosedurationc             S   s   | j S )N)r3   )xr.   r.   r/   <lambda>P       z)pytest_terminal_summary.<locals>.<lambda>T)keyreverse=zslowest durationszslowest %s durations    z>(%s durations < %gs hidden.  Use -vv to show these durations.)z02.2fzs z<8 )configoption	durationsdurations_mingetvaluestatsvalueshasattrappendsortZ	write_sep	enumerater3   Z
write_linelenwhennodeid)	r1   r?   r@   r2   trZdlistZreplistrepir.   r.   r/   pytest_terminal_summaryB   s4    




rN   r   )sessionr"   c             C   s   t  | _d S )N)
SetupState_setupstate)rO   r.   r.   r/   pytest_sessionstartb   s    rR   c             C   s   | j   d S )N)rQ   teardown_all)rO   r.   r.   r/   pytest_sessionfinishf   s    rT   )itemnextitemr"   c             C   s:   | j }|j| j| jd t| |d |j| j| jd dS )N)rJ   location)rV   T)ihookZpytest_runtest_logstartrJ   rW   runtestprotocolZpytest_runtest_logfinish)rU   rV   rX   r.   r.   r/   pytest_runtest_protocolj   s
    rZ   T)rU   logrV   r"   c             C   s   t | d}|r| js|   t| d|}|g}|jrj| jddrJt|  | jddsj|t| d| |t| d||d |rd| _d | _	|S )	N_requestsetupZ	setupshowFZ	setuponlycallteardown)rV   )
rD   r\   Z_initrequestcall_and_reportpassedr=   	getoptionshow_test_itemrE   Zfuncargs)rU   r[   rV   Z
hasrequestrL   reportsr.   r.   r/   rY   r   s    

rY   )rU   r"   c             C   s^   | j  }|  |d || j tt| dg }|rR|dd| |	  dS )zAShow test function, parameters and the fixtures of the test item.z        Zfixturenamesz (fixtures used: {})z, N)
r=   Zget_terminal_writerlinewriterJ   sortedgetattrformatjoinflush)rU   ZtwZused_fixturesr.   r.   r/   rc      s    

rc   c             C   s   t | d | jj|  d S )Nr]   )_update_current_test_varrO   rQ   prepare)rU   r.   r.   r/   pytest_runtest_setup   s    
rn   c          
   C   s   t | d yt`t`t`W n tk
r.   Y nX y|   W nN tk
r } z0t|t_|t_|j	d k	slt
|j	jt_|W d d }~X Y nX d S )Nr^   )rl   sys	last_type
last_valuelast_tracebackAttributeErrorZruntest	Exceptionr'   __traceback__AssertionErrortb_next)rU   er.   r.   r/   pytest_runtest_call   s    


ry   c             C   s(   t | d | jj| | t | d  d S )Nr_   )rl   rO   rQ   teardown_exact)rU   rV   r.   r.   r/   pytest_runtest_teardown   s    
r{   z$Literal['setup', 'call', 'teardown'])rU   rI   r"   c             C   sB   d}|r2| j  d| d}|dd}|tj|< n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.
    ZPYTEST_CURRENT_TESTz () z(null)N)rJ   replaceosenvironpop)rU   rI   var_namevaluer.   r.   r/   rl      s    rl   )reportr"   c             C   s&   | j dkr"| jrdS | jrdS dS d S )N)r]   r_   )errorEERROR)skippedsZSKIPPED)r;   r;   r;   )rI   failedr   )r   r.   r.   r/   pytest_report_teststatus   s    
r   )rU   rI   r[   r"   c             K   sP   t | |f|}| j}|j| |d}|r2|j|d t||rL|j| ||d |S )N)rU   r^   )r   )noder^   r   )call_runtest_hookrX   pytest_runtest_makereportZpytest_runtest_logreportcheck_interactive_exceptionpytest_exception_interact)rU   rI   r[   kwdsr^   hookr   r.   r.   r/   r`      s    
r`   zCallInfo[object])r^   r   r"   c             C   s8   | j dkrdS t|drdS t| j jttjfr4dS dS )zVCheck whether the call raised an exception that should be reported as
    interactive.NFZwasxfailT)excinforD   
isinstancer   r   bdbZBdbQuit)r^   r   r.   r.   r/   r      s    

r   zCallInfo[None]c                s   |dkrj j n6|dkr$j j n$|dkr6j j ndsHtd| tf}jddsf|tf7 }t	j
 fdd||d	S )
Nr]   r^   r_   FzUnhandled runtest hook case: Zusepdbc                  s    f diS )NrU   r.   r.   )rX   rU   r   r.   r/   r5      r6   z#call_runtest_hook.<locals>.<lambda>)rI   reraise)rX   rn   ry   r{   rv   r   r=   rb   KeyboardInterruptCallInfo	from_call)rU   rI   r   r   r.   )rX   rU   r   r/   r      s    



r   TResult)	covariantF)reprc            
   @   s   e Zd ZdZejddZejeee	  dZ
ejedZejedZejedZejddZeedddZedd	deeee	 eee	 d
f f  ddddZedddZdS )r   av  Result/Exception info a function invocation.

    :param T result:
        The return value of the call, if it didn't raise. Can only be
        accessed if excinfo is None.
    :param Optional[ExceptionInfo] excinfo:
        The captured exception of the call, if it raised.
    :param float start:
        The system time when the call started, in seconds since the epoch.
    :param float stop:
        The system time when the call ended, in seconds since the epoch.
    :param float duration:
        The call duration, in seconds.
    :param str when:
        The context of invocation: "setup", "call", "teardown", ...
    zOptional[TResult])r'   z/Literal['collect', 'setup', 'call', 'teardown'])r"   c             C   s$   | j d k	rt| dtt| jS )Nz has no valid result)r   rs   r   r   _result)selfr.   r.   r/   result!  s    
zCallInfo.resultNzCallable[[], TResult].zCallInfo[TResult])funcrI   r   r"   c             C   s   d }t  }t  }y
| }W n6 tk
rT   t }|d k	rLt|j|rL d }Y nX t  }|| }	t  }
| ||
|	|||dS )N)startstopr3   rI   r   r   )r   timeperf_counterBaseExceptionr   Zfrom_currentr   r   )clsr   rI   r   r   r   Zprecise_startr   Zprecise_stopr3   r   r.   r.   r/   r   *  s(    	

zCallInfo.from_callc             C   s6   | j d kr d| jd| jdS d| jd| j dS )Nz<CallInfo when=z	 result: >z	 excinfo=)r   rI   r   )r   r.   r.   r/   __repr__J  s    
zCallInfo.__repr__)N)__name__
__module____qualname____doc__attribr   r   r   r   r   r,   r   r   r3   rI   propertyr   r   classmethodr   r	   r   r   strr   r.   r.   r.   r/   r     s   $r   )rU   r^   r"   c             C   s   t | |S )N)r   Zfrom_item_and_call)rU   r^   r.   r.   r/   r   P  s    r   )	collectorr"   c                s  t  fddd}d }|js$d}ntg}tjd}|d k	rJ||j t	|jj
t|rd} |jd}t	|tstt||j}|stt|j|j|jf}n4d} |j}t|d	st	|tstt|}|}|js|jnd }	t j|||	}
||
_|
S )
Nc                  s   t   S )N)listcollectr.   )r   r.   r/   r5   U  r6   z,pytest_make_collect_report.<locals>.<lambda>r   ra   unittestr   re   r   Z
toterminal)r   r   r   r   ro   modulesgetrE   ZSkipTestr   r   tupleZ_repr_failure_pyr   rv   r   Z	reprcrashr   pathlinenomessageZrepr_failurerD   r   r   r   rJ   r^   )r   r^   ZlongreproutcomeZskip_exceptionsr   Zr_rZ	errorinfor   rL   r.   )r   r/   pytest_make_collect_reportT  s2    
r   c               @   s   e Zd ZdZdd Zeg ef ddddZdd	 Zdd
ddZ	dd
ddZ
dd
ddZdd
ddZdd
ddZdd
ddZdS )rP   zBShared state for setting up/tearing down test items or collectors.c             C   s   g | _ i | _d S )N)stack_finalizers)r   r.   r.   r/   __init__v  s    zSetupState.__init__N)	finalizerr"   c             C   s6   |rt |trtt|st| j|g | dS )z(Attach a finalizer to the given colitem.N)r   r   rv   callabler   
setdefaultrE   )r   r   colitemr.   r.   r/   addfinalizerz  s    zSetupState.addfinalizerc             C   s   | j  }| | d S )N)r   r   _teardown_with_finalization)r   r   r.   r.   r/   _pop_and_teardown  s    
zSetupState._pop_and_teardown)r"   c          
   C   sj   | j |d }d }xJ|r\| }y
|  W q tk
rX } z|d krH|}W d d }~X Y qX qW |rf|d S )N)r   r   r   )r   r   Z
finalizersexcZfinrx   r.   r.   r/   _callfinalizers  s    
zSetupState._callfinalizersc             C   s4   |  | |  x| jD ]}|| jkstqW d S )N)r   r_   r   r   rv   )r   r   r.   r.   r/   r     s    
z&SetupState._teardown_with_finalizationc             C   s@   x| j r|   qW xt| jD ]}| | q W | jr<td S )N)r   r   r   r   r   rv   )r   r7   r.   r.   r/   rS     s
    zSetupState.teardown_allc             C   s   |r|  pg }| | d S )N)	listchain_teardown_towards)r   rU   rV   needed_collectorsr.   r.   r/   rz     s    zSetupState.teardown_exactc          
   C   sr   d }x`| j rd| j |d t| j  kr&P y|   W q tk
r` } z|d krP|}W d d }~X Y qX qW |rn|d S )N)r   rH   r   r   )r   r   r   rx   r.   r.   r/   r     s    zSetupState._teardown_towardsc             C   s   x"| j D ]}t|dr|j}|qW | }x`|t| j d D ]J}| j | y|  W q@ tk
r } z||_|W dd}~X Y q@X q@W dS )z;Setup objects along the collector chain to the test-method._prepare_excN)r   rD   r   r   rH   rE   r]   r   )r   r   colr   r   rx   r.   r.   r/   rm     s    
zSetupState.prepare)r   r   r   r   r   r   objectr   r   r   r   rS   rz   r   rm   r.   r.   r.   r/   rP   s  s   rP   c             C   sN   | j }|j| d |j| d}|jdd }|rJt||rJ|j| ||d |S )N)r   r^   )r   r^   r   )rX   Zpytest_collectstartr   __dict__r   r   r   )r   rX   rL   r^   r.   r.   r/   collect_one_node  s    r   )TN)T)Fr   r   r   ro   typingr   r   r   r   r   r   r   r	   r
   r   r   r   rd   r   r   r   r   Z_pytestr   Z_pytest._code.coder   r   r   Z_pytest.compatr   Z_pytest.config.argparsingr   Z_pytest.nodesr   r   r   Z_pytest.outcomesr   r   r   Ztyping_extensionsr   Z_pytest.mainr   Z_pytest.terminalr    r0   rN   rR   rT   boolrZ   rY   rc   rn   ry   r{   rl   r   r   r`   r   r   r   r   r   r   r   rP   r   r.   r.   r.   r/   <module>   s|    	HT