o
    Ú­jÑ  ã                   @   sè  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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 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/m0Z0 ddl1m2Z2 ddl1m3Z3 dd l1m4Z4 dd!l1m5Z5 dd"l6m7Z7 dd#l8m9Z9 dd$l8m:Z: dd%l;m<Z< dd&l;m=Z= dd'l>m?Z? dd(l>m@Z@ dd)l>mAZA e�r#dd*lBmCZC dd+lDmEZE d,ZFd-ZGd.ZHG d/d0„ d0ejIƒZJG d1d2„ d2eƒZKd3e7d4dfd5d6„ZLd7e3d4dfd8d9„ZMd7e3d4eNfd:d;„ZOe5d<d=�d>e?d4eeNeNeNf fd?d@„ƒZPejQG dAdB„ dBƒƒZRe0G dCdD„ dDƒƒZSdEe*d7e3dFe?fdGdH„ZTdIeNdJeNdKeUd4eeN fdLdM„ZVd7e3dFe?dEe*dNeeNeWf d4eNf
dOdP„ZXdQedRee@ d4eeeUeNeeU eNf  fdSdT„ZYdUdUdVdWdXœZZdVZ[dYeUdZeNd4eeUeNf fd[d\„Z\d4eeN fd]d^„Z]d_e^d4eNfd`da„Z_d>eAd4eNfdbdc„Z`dS )dzsTerminal reporting of the full testing process.

This is a good source for looking at the various reporting hooks.
é    N)ÚCounter)Úpartial)ÚPath)ÚAny)ÚCallable)Úcast)ÚClassVar)ÚDict)Ú	Generator)ÚList)ÚMapping)Ú
NamedTuple)ÚOptional)ÚSequence)ÚSet)ÚTextIO)ÚTuple)ÚTYPE_CHECKING)ÚUnion)Únodes)Útiming)ÚExceptionInfo)ÚExceptionRepr)ÚTerminalWriter)Úwcswidth)Úrunning_on_ci)Úfinal)Ú_PluggyPlugin)ÚConfig)ÚExitCode)Úhookimpl)ÚParser)ÚItem)ÚNode)Úabsolutepath)Úbestrelpath)Ú
BaseReport)ÚCollectReport)Ú
TestReport)ÚLiteral)ÚSessiong      à?)ÚfailedÚpassedÚskippedÚ
deselectedÚxfailedÚxpassedÚwarningsÚerrorÚfEc                       s‚   e Zd ZdZ			ddee dedededee d	df‡ fd
d„Z		dde
jde
jdeeee df dee d	df
dd„Z‡  ZS )ÚMoreQuietActionz§A modified copy of the argparse count action which counts down and updates
    the legacy quiet attribute at the same time.

    Used to unify verbosity handling.
    NFÚoption_stringsÚdestÚdefaultÚrequiredÚhelpÚreturnc                    s   t ƒ j||d|||d� d S )Nr   )r5   r6   Únargsr7   r8   r9   )ÚsuperÚ__init__)Úselfr5   r6   r7   r8   r9   ©Ú	__class__© úM/var/www/html/CropPilot/venv/lib/python3.10/site-packages/_pytest/terminal.pyr=   V   s   
úzMoreQuietAction.__init__ÚparserÚ	namespaceÚvaluesÚoption_stringc                 C   s6   t || jdƒd }t|| j|ƒ t |ddƒd |_d S )Nr   é   Úquiet)Úgetattrr6   ÚsetattrrH   )r>   rC   rD   rE   rF   Ú	new_countrA   rA   rB   Ú__call__g   s   zMoreQuietAction.__call__)NFN©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚobjectÚboolr   r=   ÚargparseÚArgumentParserÚ	Namespacer   rL   Ú__classcell__rA   rA   r?   rB   r4   O   s<    
úþýüûúùûþýüûúr4   c                   @   sB   e Zd ZU dZeed< eed< eeeeeee	f f f ed< dS )ÚTestShortLogReportuG  Used to store the test status result category, shortletter and verbose word.
    For example ``"rerun", "R", ("RERUN", {"yellow": True})``.

    :ivar category:
        The class of result, for example ``â€œpassedâ€�``, ``â€œskippedâ€�``, ``â€œerrorâ€�``, or the empty string.

    :ivar letter:
        The short letter shown as testing progresses, for example ``"."``, ``"s"``, ``"E"``, or the empty string.

    :ivar word:
        Verbose word is shown as testing progresses in verbose mode, for example ``"PASSED"``, ``"SKIPPED"``,
        ``"ERROR"``, or the empty string.
    ÚcategoryÚletterÚwordN)
rN   rO   rP   rQ   rR   Ú__annotations__r   r   r   rT   rA   rA   rA   rB   rY   t   s
   
 $rY   rC   r:   c              	   C   s\  | j dddd�}|jddddd	d
d� |jdddddd� |jdddddd� |jddtdd	dd� |jdd	tddd� |jdddtddd� |jd d!dd"dd#d$� |jd%d&dd'dd(d)� |jd*d+d'd,d-� |jd.d/dd0d1g d2¢d3d4� |jd5dd6g d7¢d8d9d:� |jd;d<ddd=d>� |jd?d@dd@d1g dA¢dBd4� |jdCdDdDdEgdFdG� | jdHdIdJdK� d S )LNzterminal reportingÚ	ReportingÚgeneral)Úafterz-vz	--verboseÚcountr   ÚverbosezIncrease verbosity)Úactionr7   r6   r9   z--no-headerÚ
store_trueFÚ	no_headerzDisable headerz--no-summaryÚ
no_summaryzDisable summaryz-qz--quietzDecrease verbosityz--verbosityzSet verbosity. Default: 0.)r6   Útyper7   r9   z-rÚstoreÚreportcharsÚcharsa  Show extra test summary info as specified by chars: (f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed, (p)assed, (P)assed with output, (a)ll except passed (p/P), or (A)ll. (w)arnings are enabled by default (see --disable-warnings), 'N' can be used to reset the list. (default: 'fE').)rc   r6   r7   Úmetavarr9   z--disable-warningsz--disable-pytest-warningsÚdisable_warningszDisable warnings summary)r7   r6   rc   r9   z-lz--showlocalsÚ
showlocalsz/Show locals in tracebacks (disabled by default))rc   r6   r7   r9   z--no-showlocalsÚstore_falsezFHide locals in tracebacks (negate --showlocals passed through addopts))rc   r6   r9   z--tbÚstyleÚtbstyleÚauto)rq   ÚlongÚshortÚnoÚlineÚnativez5Traceback print mode (auto/long/short/line/native/no))rk   rc   r6   r7   Úchoicesr9   z--show-captureÚshowcapture)rt   ÚstdoutÚstderrÚlogÚallr|   zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)rc   r6   rw   r7   r9   z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))rc   r7   r9   z--colorÚcolor)Úyesrt   rq   z#Color terminal output (yes/no/auto)z--code-highlightr~   rt   zSWhether code should be highlighted (only if --color is also enabled). Default: yes.)r7   rw   r9   Úconsole_output_stylez®Console output: "classic", or with additional progress information ("progress" (percentage) | "count" | "progress-even-when-capture-no" (forces progress even when capture=no)Úprogress)r9   r7   )ÚgetgroupÚ
_addoptionr4   ÚintÚ_REPORTCHARS_DEFAULTÚaddini)rC   ÚgrouprA   rA   rB   Úpytest_addoptionˆ   sà   úûûúûúúúüù	ú	ûù	ü
ûr‡   Úconfigc                    sN   t | tjƒ‰ | j ˆ d¡ | jjs| jjr%‡ fdd„}| jj	 
d|¡ d S d S )NÚterminalreporterc                    s"   d  tt|ƒ¡}ˆ  d| ¡ d S )Nú z[traceconfig] )ÚjoinÚmaprR   Ú
write_line)ÚtagsÚargsÚmsg©ÚreporterrA   rB   Úmywriter	  s   z"pytest_configure.<locals>.mywriterzpytest:config)ÚTerminalReporterÚsysry   ÚpluginmanagerÚregisterÚoptionÚdebugÚtraceconfigÚtraceÚrootÚsetprocessor)rˆ   r“   rA   r‘   rB   Úpytest_configure  s   úrž   c                 C   s¤   | j j}ddh}d}|D ]'}||v r| ¡ }|dkrd}q|dkr$d}q|dkr+d}q||vr3||7 }q| j jsBd	|vrBd	| }|S | j jrPd	|v rP| d	d¡}|S )
NÚFÚSÚ ÚaÚsxXEfÚAÚPpsxXEfÚNÚw)r˜   ri   Úlowerrl   Úreplace)rˆ   ri   Úold_aliasesÚ
reportoptsÚcharrA   rA   rB   Úgetreportopt  s*   €ýr­   T©ÚtrylastÚreportc                 C   sH   d}| j rd}n| jrd}| j}| jdv r|dkrd}d}||| ¡ fS )NrŸ   Ú.Ús)ÚcollectÚsetupÚteardownr+   r2   ÚE)r,   r-   ÚoutcomeÚwhenÚupper)r°   r[   r·   rA   rA   rB   Úpytest_report_teststatus)  s   rº   c                   @   sd   e Zd ZU dZeed< dZee ed< dZee	ee
f  ed< dZeed< ded	ee fd
d„ZdS )ÚWarningReportao  Simple structure to hold warnings information captured by ``pytest_warning_recorded``.

    :ivar str message:
        User friendly message about the warning.
    :ivar str|None nodeid:
        nodeid that generated the warning (see ``get_location``).
    :ivar tuple fslocation:
        File system location of the source of the warning (see ``get_location``).
    ÚmessageNÚnodeidÚ
fslocationTÚcount_towards_summaryrˆ   r:   c                 C   s@   | j r| j S | jr| j\}}t|jjt|ƒƒ}|› d|› �S dS )zSReturn the more user-friendly information about the location of a warning, or None.ú:N)r½   r¾   r%   Úinvocation_paramsÚdirr$   )r>   rˆ   ÚfilenameÚlinenumÚrelpathrA   rA   rB   Úget_locationK  s   
zWarningReport.get_location)rN   rO   rP   rQ   rR   r]   r½   r   r¾   r   rƒ   r¿   r   r   rÆ   rA   rA   rA   rB   r»   9  s   
 
r»   c                   @   st  e Zd Zdºdedee ddfdd„Zd»dd	„Zede	fd
d„ƒZ
edefdd„ƒZedefdd„ƒZedefdd„ƒZedefdd„ƒZejdee ddfdd„ƒZedefdd„ƒZdedefdd„Zdededdfdd„Zd¼d ed!eddfd"d#„Zd½d$d%„Zd&d'd(d)œd*ed+ed,e	d-ededdfd.d/„Zd&d0œd*ed+ededdfd1d2„Zd½d3d4„Zd5eeef deddfd6d7„Zd5ededdfd8d9„Z		d¾d:ed;ee d<ee	 deddf
d=d>„Zd¿d;ed:ed@eddfdAdB„ZdCed@eddfdDdE„Z dFedGe!e" ddfdHdI„Z#dJe$defdKdL„Z%dMe&j'deddfdNdO„Z(dPe)ddfdQdR„Z*dGe!e+ ddfdSdT„Z,dedUe-eee	 ef ddfdVdW„Z.dXe/ddfdYdZ„Z0edefd[d\„ƒZ1deddfd]d^„Z2defd_d`„Z3d½dadb„Z4ede	fdcdd„ƒZ5d½dedf„Z6dXe7ddfdgdh„Z8dÀdieddfdjdk„Z9e:dldm�dÁdpdq„ƒZ;dre!eee!e f  ddfdsdt„Z<dede=e fdudv„Z>dÁdwdx„Z?dGe!e+ ddfdydz„Z@e:dld{�dndod|ee	eAf fd}d~„ƒZBe:dld{�deCd fd€d�„ƒZDd‚eEeF ddfdƒd„„ZGd½d…d†„ZHd½d‡dˆ„ZIded‰edŠee	 d‹edef
dŒd�„ZJdŽd�„ ZKd�d‘„ ZLd’efd“d”„ZMd½d•d–„ZNd½d—d˜„ZOdede=e/ fd™dš„ZPdeddfd›dœ„ZQd�e/ddfdždŸ„ZRd½d d¡„ZSd½d¢d£„ZTd�eUddfd¤d¥„ZVd½d¦d§„ZWd½d¨d©„ZXde-ee=e f fdªd«„ZYd¬edefd­d®„ZZd½d¯d°„Z[de-e=e-ee\eef f  ef fd±d²„Z]d³ede=e" fd´dµ„Z^de-e=e-ee\eef f  ef fd¶d·„Z_de-e=e-ee\eef f  ef fd¸d¹„Z`dS )Âr”   Nrˆ   Úfiler:   c                 C   s°   dd l }|| _d| _d | _d | _i | _d | _d | _|jj	| _
|d u r%tj}|j ||¡| _| jj| _d | _t|ƒ| _| jj| _| ¡ | _tƒ | _|  ¡ | _d | _d | _d | _d S ©Nr   )Ú_pytest.configrˆ   Ú_numcollectedÚ_sessionÚ_showfspathÚstatsÚ_main_colorÚ_known_typesrÁ   rÂ   Ú	startpathr•   ry   Úcreate_terminal_writerÚ_twÚ	fullwidthÚ_screen_widthÚcurrentfspathr­   ri   Ú	hasmarkupÚisattyÚsetÚ_progress_nodeids_reportedÚ_determine_show_progress_infoÚ_show_progress_infoÚ_collect_report_last_writeÚ_already_displayed_warningsÚ_keyboardinterrupt_memo)r>   rˆ   rÇ   Ú_pytestrA   rA   rB   r=   X  s,   






zTerminalReporter.__init__ú#Literal['progress', 'count', False]c                 C   sh   | j  dd¡dkr| j  d¡dkrdS | j  dd¡rdS | j  d¡}|dks*|dkr,dS |dkr2dS dS )	zRReturn whether we should display progress information based on the current config.Úcapturert   r   zprogress-even-when-capture-noFÚ	setupshowr€   ra   )rˆ   Ú	getoptionÚgetini)r>   ÚcfgrA   rA   rB   rÚ   r  s   
ÿz.TerminalReporter._determine_show_progress_infoc                 C   s   | j jj}|S rM   )rˆ   r˜   rb   )r>   Ú	verbosityrA   rA   rB   ræ   ‡  s   
zTerminalReporter.verbosityc                 C   s
   | j dkS rÈ   ©ræ   ©r>   rA   rA   rB   Ú
showheaderŒ  ó   
zTerminalReporter.showheaderc                 C   ó   t | jjjƒS rM   )rT   rˆ   r˜   re   rè   rA   rA   rB   re   �  ó   zTerminalReporter.no_headerc                 C   rë   rM   )rT   rˆ   r˜   rf   rè   rA   rA   rB   rf   ”  rì   zTerminalReporter.no_summaryc                 C   s   | j d u r
| jdkS | j S rÈ   )rÌ   ræ   rè   rA   rA   rB   Ú
showfspath˜  s   

zTerminalReporter.showfspathÚvaluec                 C   s
   || _ d S rM   )rÌ   )r>   rî   rA   rA   rB   rí   ž  rê   c                 C   s
   | j dkS rÈ   rç   rè   rA   rA   rB   Úshowlongtestinfo¢  rê   z!TerminalReporter.showlongtestinfor¬   c                 C   s   dddœ  ||¡}|| jv S )NÚxr²   )r/   r-   )Úgetri   )r>   r¬   rA   rA   rB   Úhasopt¦  s   
zTerminalReporter.hasoptr½   Úmarkupc                 K   sŠ   | j j| d¡d  }| jd u s|| jkr7| jd ur!| jr!|  ¡  || _t| j|ƒ}| j 	¡  | j 
|d ¡ | jj
|fddi|¤Ž d S )Nú::r   rŠ   ÚflushT)rˆ   ÚrootpathÚsplitrÕ   rÛ   Ú)_write_progress_information_filling_spacer%   rÐ   rÒ   ru   Úwrite)r>   r½   Úresró   ÚfspathÚ	relfspathrA   rA   rB   Úwrite_fspath_resultª  s   
z$TerminalReporter.write_fspath_resultr¡   ÚprefixÚextrac                 K   sL   | j |kr| j ¡  || _ | j |¡ |r$| jj|fi |¤Ž d| _ d S d S )Néþÿÿÿ)rÕ   rÒ   ru   rù   )r>   rþ   rÿ   ÚkwargsrA   rA   rB   Úwrite_ensure_prefixµ  s   


þz$TerminalReporter.write_ensure_prefixc                 C   s   | j r| j ¡  d | _ d S d S rM   )rÕ   rÒ   ru   rè   rA   rA   rB   Úensure_newline¾  s   

þzTerminalReporter.ensure_newlineFé   Ú
)rõ   ÚmarginÚline_sepÚcontentrõ   r  r  c                K   sV   | j j}| tjd| | | j| ddd�¡}||d… }| j j|fd|i|¤Ž dS )z+Wrap message with margin for progress info.rŠ   TF)ÚwidthÚdrop_whitespaceÚreplace_whitespaceNrõ   )rÒ   Úwidth_of_current_liner‹   ÚtextwrapÚwraprÔ   rù   )r>   r  rõ   r  r  ró   r  ÚwrappedrA   rA   rB   Ú
wrap_writeÃ  s   

üÿzTerminalReporter.wrap_write)rõ   c                K   s   | j j|fd|i|¤Ž d S )Nrõ   )rÒ   rù   )r>   r  rõ   ró   rA   rA   rB   rù   Ù  s   zTerminalReporter.writec                 C   s   | j  ¡  d S rM   )rÒ   rõ   rè   rA   rA   rB   rõ   Ü  s   zTerminalReporter.flushru   c                 K   s6   t |tƒst|dd�}|  ¡  | jj|fi |¤Ž d S )Nr©   )Úerrors)Ú
isinstancerR   r  rÒ   ru   )r>   ru   ró   rA   rA   rB   r�   ß  s   
zTerminalReporter.write_linec                 K   sZ   |  dd¡}|r| jjt|ƒ d }d| }nd}t|ƒ}| jjd| | fi |¤Ž dS )a-  Rewinds the terminal cursor to the beginning and writes the given line.

        :param erase:
            If True, will also add spaces until the full terminal width to ensure
            previous lines are properly erased.

        The rest of the keyword arguments are markup instructions.
        ÚeraseFrG   rŠ   r¡   úN)ÚpoprÒ   rÓ   ÚlenrR   rù   )r>   ru   ró   r  Ú
fill_countÚfillrA   rA   rB   Úrewriteå  s   	
 zTerminalReporter.rewriteÚsepÚtitlerÓ   c                 K   s$   |   ¡  | jj|||fi |¤Ž d S rM   )r  rÒ   r  )r>   r  r  rÓ   ró   rA   rA   rB   Ú	write_sep÷  s   zTerminalReporter.write_sepú=Úkwc                 K   s   | j j||fi |¤Ž d S rM   )rÒ   r  )r>   r  r  r  rA   rA   rB   Úsection  s   zTerminalReporter.sectionr�   c                 K   s   | j j|fi |¤Ž d S rM   )rÒ   ru   )r>   r�   r  rA   rA   rB   ru     ó   zTerminalReporter.linerZ   Úitemsc                 C   s2   || j v}| j  |g ¡ |¡ |r|  ¡  d S d S rM   )rÍ   Ú
setdefaultÚextendÚ_set_main_color)r>   rZ   r!  Úset_main_colorrA   rA   rB   Ú
_add_stats  s
   
ÿzTerminalReporter._add_statsÚexcreprc                 C   s&   t |ƒ d¡D ]	}|  d| ¡ qdS )Nr  zINTERNALERROR> T)rR   r÷   r�   )r>   r'  ru   rA   rA   rB   Úpytest_internalerror  s   z%TerminalReporter.pytest_internalerrorÚwarning_messagec                 C   s@   ddl m} |j|jf}||ƒ}t|||d�}|  d|g¡ d S )Nr   )Úwarning_record_to_str)r¾   r¼   r½   r1   )Ú_pytest.warningsr*  rÃ   Úlinenor»   r&  )r>   r)  r½   r*  r¾   r¼   Úwarning_reportrA   rA   rB   Úpytest_warning_recorded  s   ÿz(TerminalReporter.pytest_warning_recordedÚpluginc                 C   s&   | j jjrd|› �}|  |¡ d S d S )NzPLUGIN registered: )rˆ   r˜   rš   r�   )r>   r/  r�   rA   rA   rB   Úpytest_plugin_registered!  s   

ûz)TerminalReporter.pytest_plugin_registeredc                 C   s   |   d|¡ d S )Nr.   )r&  )r>   r!  rA   rA   rB   Úpytest_deselected)  s   z"TerminalReporter.pytest_deselectedÚlocationc                 C   sR   | j r| j|g|¢R Ž }|  |d¡ |  ¡  d S | jr'|  |d¡ |  ¡  d S d S )Nr¡   )rï   Ú_locationliner  rõ   rí   rý   )r>   r½   r2  ru   rA   rA   rB   Úpytest_runtest_logstart,  s   þz(TerminalReporter.pytest_runtest_logstartr°   c                 C   s0  d| _ |}t| jjj|| jd�Ž }|j|j|j}}}t|t	ƒs$d }n|\}}|  
||g¡ |s5|s5d S t|dƒ}|d u rit|dƒ}	|jrM|	sMddi}n|jrW|	rWddi}n|jr_ddi}n
|jrgddi}ni }| jdkry| jj|fi |¤Ž n™| j |j¡ | j|jg|j¢R Ž }
|sØ| j|
|fi |¤Ž |jsŸt|dƒrÐt|ƒ}| jjjd	k r¿| jj| jj td
ƒ d }td||ƒ}nd|› d�}|rÐ|d urÐ|  |¡ | j r×|  !¡  n:|  "¡  | j d|j#j$j% ¡ | j r÷| jj|  &¡ d dd� n| j d¡ | jj|fi |¤Ž | j d|
 ¡ d| _'|  (¡  d S )NT)r°   rˆ   ÚnodeÚwasxfailÚgreenÚyellowÚredr   é   ú [100%]rG   z ({})z (ú)z[%s]rŠ   )Úcyanr   ))Ú
_tests_ranrY   rˆ   Úhookrº   rZ   r[   r\   r  Útupler&  Úhasattrr,   r+   r-   ræ   rÒ   rù   rÙ   Úaddr½   r3  r2  r  Ú_get_raw_skip_reasonr˜   rb   rÓ   r  r  Ú_format_trimmedr  rÛ   rø   r  r5  ÚgatewayÚidÚ!_get_progress_information_messagerÕ   rõ   )r>   r°   Úreprú   rZ   r[   r\   ró   Úrunning_xdistÚ	was_xfailru   ÚreasonÚavailable_widthÚformatted_reasonrA   rA   rB   Úpytest_runtest_logreport9  sv   ÿ









ÿþÿÿ
€ÿz)TerminalReporter.pytest_runtest_logreportc                 C   s    | j d usJ ‚t| jƒ| j jkS rM   )rË   r  rÙ   Útestscollectedrè   rA   rA   rB   Ú_is_last_item}  s   zTerminalReporter._is_last_itemc           	      C   sÆ   | j sJ ‚| jdkr]| jr_| jdkr"| j j}td|› d|› d�ƒ}ntdƒ}| j |¡ | jr5|  ¡  d S |  	¡ \}}| j
}|| d | jk}|ra|  ¡ }| jj|d fi |d	i¤Ž d S d S d S d S )
Nr   ra   ú [ú/ú]r;  rG   r  T)rË   ræ   rÛ   rO  r  rÙ   rB  rP  rø   Ú_get_main_colorÚ_width_of_current_linerÔ   rG  rÒ   rù   )	r>   r½   Ú	num_testsÚprogress_lengthÚ
main_colorÚ_r§   Ú	past_edger�   rA   rA   rB   Úpytest_runtest_logfinish‚  s"   

 ïz)TerminalReporter.pytest_runtest_logfinishc                 C   sˆ   | j sJ ‚| j j}| jdkr4|r+| j}dtt|ƒƒ› d�}d|› d�}| t|ƒ|¡S d|› d|› d�S |rBd	 t| jƒd
 | ¡S dS )Nra   z{:zd}rQ  z/{}]z [ z / z ]z	 [{:3d}%]éd   r;  )rË   rO  rÛ   rÙ   r  rR   Úformat)r>   Ú	collectedr€   Úcounter_formatÚformat_stringrA   rA   rB   rG  —  s   

ÿz2TerminalReporter._get_progress_information_messagec                 C   sN   |   ¡ \}}|  ¡ }| j}| jj| d }| j| |¡fddi|di¤Ž d S )NrG   rõ   T)rT  rG  rU  rÒ   rÓ   rù   Úrjust)r>   r}   rY  r�   r§   r  rA   rA   rB   rø   ¨  s
   $z:TerminalReporter._write_progress_information_filling_spacec                 C   s   | j jS )z%Return the width of the current line.)rÒ   r  rè   rA   rA   rB   rU  ¯  s   z'TerminalReporter._width_of_current_linec                 C   s\   | j r| jjjdkr| jdddd� t ¡ | _d S d S | jjjdkr,| jdddd� d S d S )Nr   zcollecting ... T)rõ   ÚboldrG   )r×   rˆ   r˜   rb   rù   r   ÚtimerÜ   rè   rA   rA   rB   Úpytest_collection´  s   þÿz"TerminalReporter.pytest_collectionc                 C   sb   |j r|  d|g¡ n
|jr|  d|g¡ dd„ |jD ƒ}|  jt|ƒ7  _| jr/|  ¡  d S d S )Nr2   r-   c                 S   s   g | ]	}t |tƒr|‘qS rA   )r  r"   ©Ú.0rð   rA   rA   rB   Ú
<listcomp>Á  ó    z9TerminalReporter.pytest_collectreport.<locals>.<listcomp>)r+   r&  r-   ÚresultrÊ   r  r×   Úreport_collect)r>   r°   r!  rA   rA   rB   Úpytest_collectreport¼  s   ÿz%TerminalReporter.pytest_collectreportr   c                 C   s@  | j jjdk r	d S |s t ¡ }| jd ur| j|t krd S || _t| j 	dg ¡ƒ}t| j 	dg ¡ƒ}t| j 	dg ¡ƒ}| j
| }|rDdnd}|t| j
ƒd | j
dkrTd	nd
 7 }|rh|d||dkrcd
nd	f 7 }|rp|d| 7 }|rx|d| 7 }| j
|krƒ|d| 7 }| jr™| j|ddd� |r—|  d¡ d S d S |  |¡ d S )Nr   r2   r-   r.   z
collected zcollecting z itemrG   r¡   r²   z / %d error%sz / %d deselectedz / %d skippedz / %d selectedT)rb  r  r  )rˆ   r˜   rb   r   rc  rÜ   ÚREPORT_COLLECTING_RESOLUTIONr  rÍ   rñ   rÊ   rR   r×   r  rù   r�   )r>   r   Útr  r-   r.   Úselectedru   rA   rA   rB   rj  Æ  s<   

ÿ
ÿzTerminalReporter.report_collectTr®   Úsessionr*   c                 C   s
  || _ t ¡ | _| jsd S | jdddd� t ¡ }| jsƒdt	j› d|› �}t
t	dd ƒ}|rFd tt|d d	… ƒ¡}|d
|› d|d	 › d�7 }|d tjjtj¡7 }| jdksc| jjjsct
| jjdd ƒrl|dtt	jƒ 7 }|  |¡ | jjj| j| jd�}|  |¡ d S d S )Nr  ztest session startsT©rb  z	platform z -- Python Úpypy_version_infor±   é   z[pypy-ú-rS  z, pytest-{}, pluggy-{}r   Úpastebinz -- )rˆ   Ú
start_path)rË   r   rc  Ú_sessionstarttimeré   r  ÚplatformÚpython_versionre   r•   rI   r‹   rŒ   rR   r]  rß   Ú_versionÚversionÚpluggyÚ__version__ræ   rˆ   r˜   r™   Ú
executabler�   r?  Úpytest_report_headerrÐ   Ú_write_report_lines_from_hooks)r>   ro  Úverinfor�   rq  ÚlinesrA   rA   rB   Úpytest_sessionstartë  s6   

ÿ
ÿþ
ÿíz$TerminalReporter.pytest_sessionstartr�  c                 C   s<   t |ƒD ]}t|tƒr|  |¡ q|D ]}|  |¡ qqd S rM   )Úreversedr  rR   r�   )r>   r�  Úline_or_linesru   rA   rA   rB   r    s   
ÿüz/TerminalReporter._write_report_lines_from_hooksc                 C   s„   d|j › �g}|jr| dt|j |jƒ ¡ |jtjjkr-| d¡}| d 	d 
|¡¡¡ |j ¡ }|r@| dd 
t|ƒ¡ ¡ |S )Nz	rootdir: zconfigfile: Ú	testpathsztestpaths: {}ú, zplugins: %s)rö   ÚinipathÚappendr%   Úargs_sourcer   Ú
ArgsSourceÚ	TESTPATHSrä   r]  r‹   r–   Úlist_plugin_distinfoÚ_plugin_nameversions)r>   rˆ   ri  r…  Ú
plugininforA   rA   rB   r~    s   

z%TerminalReporter.pytest_report_headerc                 C   s¦   |   d¡ | jjj| j| j|jd�}|  |¡ | j d¡rM|jr3| jjj	dkr-| j
 d¡ |  |j¡ | j d¡}|rO| j
 dd¡ |D ]}| | j
¡ qDd S d S d S )	NT)rˆ   ru  r!  Úcollectonlyéÿÿÿÿr¡   r+   ú!zcollection failures)rj  rˆ   r?  Úpytest_report_collectionfinishrÐ   r!  r  rã   r˜   rb   rÒ   ru   Ú_printcollecteditemsrÍ   rñ   r  Ú
toterminal)r>   ro  r�  r+   rH  rA   rA   rB   Úpytest_collection_finish!  s(   
ý
öz)TerminalReporter.pytest_collection_finishc              	   C   s^  | j jjdk r<| j jjdk r.tdd„ |D ƒƒ}t| ¡ ƒD ]\}}| j d||f ¡ qd S |D ]	}| j |j¡ q0d S g }d}|D ]j}| 	¡ dd … }|r_||d t
|ƒ… krYn| ¡  |sN|t
|ƒd … D ]D}	| |	¡ t
|ƒd d }| j |› |	› �¡ | j jjdkr«t|	d	d ƒ}
|
r”t |
¡nd }|r«| ¡ D ]}| j d
 |d |¡¡ qœqgqBd S )Nr   r�  c                 s   s"   � | ]}|j  d d¡d V  qdS ©rô   rG   r   N)r½   r÷   )rf  ÚitemrA   rA   rB   Ú	<genexpr>:  s   €  z8TerminalReporter._printcollecteditems.<locals>.<genexpr>z%s: %dr¡   rG   ú  Úobjz{}{})rˆ   r˜   rb   r   Úsortedr!  rÒ   ru   r½   Ú	listchainr  r  rˆ  rI   ÚinspectÚgetdocÚ
splitlinesr]  )r>   r!  ÚcountsÚnamera   r—  ÚstackÚindentÚneeded_collectorsÚcolrš  Údocru   rA   rA   rB   r“  7  s>   þý
€÷úz%TerminalReporter._printcollecteditems)ÚhookwrapperÚ
exitstatusc                 c   s¶   � d V }|  ¡  | j d¡ tjtjtjtjtjf}||v r,| j	s,| j
jj| || j
d� |jr:| jdt|jƒdd� |tjkrG|  ¡  d | _n|jrU| jdt|jƒdd� |  ¡  d S )Nr¡   )r‰   r¨  rˆ   r‘  T)r9  )Ú
get_resultrÒ   ru   r   ÚOKÚTESTS_FAILEDÚINTERRUPTEDÚUSAGE_ERRORÚNO_TESTS_COLLECTEDrf   rˆ   r?  Úpytest_terminal_summaryÚ
shouldfailr  rR   Ú_report_keyboardinterruptrÞ   Ú
shouldstopÚsummary_stats)r>   ro  r¨  r·   Úsummary_exit_codesrA   rA   rB   Úpytest_sessionfinishT  s,   €ûÿ
z%TerminalReporter.pytest_sessionfinish)NNNc                 c   s<   � |   ¡  |  ¡  |  ¡  |  ¡  d V  |  ¡  |  ¡  d S rM   )Úsummary_errorsÚsummary_failuresÚsummary_warningsÚsummary_passesÚshort_test_summaryrè   rA   rA   rB   r¯  o  s   €z(TerminalReporter.pytest_terminal_summaryÚexcinfoc                 C   s   |j dd�| _d S )NT)Úfuncargs)ÚgetreprrÞ   )r>   r»  rA   rA   rB   Úpytest_keyboard_interruptz  s   z*TerminalReporter.pytest_keyboard_interruptc                 C   s   | j d ur|  ¡  d S d S rM   )rÞ   r±  rè   rA   rA   rB   Úpytest_unconfigure}  s   
ÿz#TerminalReporter.pytest_unconfigurec                 C   s|   | j }|d us	J ‚|jd usJ ‚|jj}|  d|¡ d|v r<| jjjr+| | j¡ d S |j | j¡ | jj	ddd� d S d S )Nr‘  ÚKeyboardInterruptz@(to show a full traceback on KeyboardInterrupt use --full-trace)T)r8  )
rÞ   Ú	reprcrashr¼   r  rˆ   r˜   Ú	fulltracer”  rÒ   ru   )r>   r'  r�   rA   rA   rB   r±  �  s   

þûz*TerminalReporter._report_keyboardinterruptrû   r,  Údomainc                    sv   dt dt f‡ ‡fdd„}|r5||ƒ}ˆjdkr1| d¡d | dtj¡kr1|d	tˆjt|ƒƒ 7 }|d S d
}|d S )Nr½   r:   c                    s\   ˆj  | ¡}ˆ r,| ˆ ¡r,|d tˆ ƒ … }ˆ  d¡}|d  dd¡|d< |d |¡7 }|S )Nú[r   r±   rô   )rˆ   Úcwd_relative_nodeidÚendswithr  r÷   r©   r‹   )r½   ru   rE   ©rÃ  r>   rA   rB   Úmkrel”  s   
z-TerminalReporter._locationline.<locals>.mkrelr:  rô   r   ú\z <- z
[location]rŠ   )	rR   ræ   r÷   r©   r   ÚSEPr%   rÐ   r   )r>   r½   rû   r,  rÃ  rÈ  rú   rA   rÇ  rB   r3  ‘  s   
ÿÿzTerminalReporter._locationlinec                 C   s   |j }|r|S dS )Nztest session)Ú	head_line)r>   rH  rË  rA   rA   rB   Ú_getfailureheadline¨  s   z$TerminalReporter._getfailureheadlinec                 C   sN   zt |jjƒW S  ty&   zt |jƒd d… W  Y S  ty%   Y Y dS w w )Né2   r¡   )rR   ÚlongreprrÁ  ÚAttributeError)r>   rH  rA   rA   rB   Ú_getcrashline®  s   ÿýzTerminalReporter._getcrashliner¡  c                 C   s   dd„ | j  |d¡D ƒS )Nc                 S   s   g | ]	}t |d ƒs|‘qS )Ú	_pdbshown)rA  re  rA   rA   rB   rg  »  rh  z/TerminalReporter.getreports.<locals>.<listcomp>rA   ©rÍ   rñ   )r>   r¡  rA   rA   rB   Ú
getreportsº  r   zTerminalReporter.getreportsc                    s.  ˆ   d¡r•ˆ j d¡}|sd S ˆ jd u}|r|ˆ jd … }n|}t|ƒˆ _|s)d S i }|D ]}| |jg ¡ |¡ q-dtt	 dt
f‡ fdd„}|rKdnd}ˆ jd	|d
dd� | ¡ D ]2\}}	||	ƒ}
|
r}ˆ j |
¡ | ¡ }d dd„ |D ƒ¡}| ¡ }n| ¡ }ˆ j |¡ ˆ j ¡  qZˆ j d¡ d S d S )Nr§   r1   Úreportsr:   c                    sn   g }| D ]}|  ˆ j¡}|r| |¡ qt|ƒdk r"d tt|ƒ¡S tdd„ |D ƒƒ}d dd„ | ¡ D ƒ¡S )Né
   r  c                 s   s$   � | ]}t |ƒ d d¡d V  qdS r–  )rR   r÷   )rf  ÚlocrA   rA   rB   r˜  Ú  s   € 
ÿzWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>c                 s   s.   � | ]\}}d   |||dkrdnd¡V  qdS )z{}: {} warning{}rG   r²   r¡   N)r]  )rf  ÚkÚvrA   rA   rB   r˜  Ý  s
   € ÿ
ÿ)	rÆ   rˆ   rˆ  r  r‹   rŒ   rR   r   r!  )rÔ  Ú	locationsr§   r2  Úcounts_by_filenamerè   rA   rB   Úcollapsed_location_reportÐ  s   
€ÿ
þzDTerminalReporter.summary_warnings.<locals>.collapsed_location_reportzwarnings summary (final)zwarnings summaryr  TF)r8  rb  r  c                 s   s   � | ]}d | V  qdS )r™  NrA   re  rA   rA   rB   r˜  é  s   € z4TerminalReporter.summary_warnings.<locals>.<genexpr>zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)rò   rÍ   rñ   rÝ   r  r"  r¼   rˆ  r   r»   rR   r  r!  rÒ   ru   rŸ  r‹   Úrstrip)r>   Úall_warningsr   Úwarning_reportsÚreports_grouped_by_messageÚwrrÛ  r  r¼   Úmessage_reportsÚmaybe_locationr�  ÚindentedrA   rè   rB   r¸  ½  s>   



ÿÏz!TerminalReporter.summary_warningsc                 C   s„   | j jjdkr<|  d¡r>|  d¡}|sd S |  dd¡ |D ]"}|jr5|  |¡}| jd|ddd� |  |¡ |  	|j
¡ qd S d S d S )	Nrt   ÚPr,   r  ÚPASSESrY  T)r7  rb  )rˆ   r˜   rp   rò   rÓ  r  ÚsectionsrÌ  Ú_outrep_summaryÚ_handle_teardown_sectionsr½   ©r>   rÔ  rH  r�   rA   rA   rB   r¹  ó  s   



õzTerminalReporter.summary_passesc                    s   |   d¡}‡ fdd„|D ƒS )Nr¡   c                    s$   g | ]}|j d kr|jˆ kr|‘qS )rµ   )r¸   r½   )rf  r°   ©r½   rA   rB   rg    s
    þz:TerminalReporter._get_teardown_reports.<locals>.<listcomp>)rÓ  )r>   r½   rÔ  rA   rê  rB   Ú_get_teardown_reports  s   

þz&TerminalReporter._get_teardown_reportsc                 C   s   |   |¡D ]}|  |¡ qd S rM   )rë  Úprint_teardown_sections)r>   r½   r°   rA   rA   rB   rè  	  s   ÿz*TerminalReporter._handle_teardown_sectionsrH  c                 C   sz   | j jj}|dkrd S |jD ],\}}|dkr||vrqd|v r:| j d|¡ |dd … dkr4|d d… }| j |¡ qd S )Nrt   r|   rµ   rs  r�  r  )rˆ   r˜   rx   ræ  rÒ   r  ru   ©r>   rH  rx   Úsecnamer  rA   rA   rB   rì    s   
€ùz(TerminalReporter.print_teardown_sectionsc                 C   s    | j jjdkrL|  d¡}|sd S |  dd¡ | j jjdkr.|D ]}|  |¡}|  |¡ qd S |D ]}|  |¡}| jd|ddd� |  |¡ |  	|j
¡ q0d S d S )	Nrt   r+   r  ÚFAILURESru   rY  T©r9  rb  )rˆ   r˜   rp   rÓ  r  rÐ  r�   rÌ  rç  rè  r½   )r>   rÔ  rH  ru   r�   rA   rA   rB   r·    s"   

þ

ò
z!TerminalReporter.summary_failuresc                 C   s�   | j jjdkrD|  d¡}|sd S |  dd¡ | jd D ]*}|  |¡}|jdkr,d| }n	d|j› d|› �}| jd	|d
d
d� |  |¡ qd S d S )Nrt   r2   r  ÚERRORSr³   zERROR collecting z	ERROR at z of rY  Trð  )	rˆ   r˜   rp   rÓ  r  rÍ   rÌ  r¸   rç  ré  rA   rA   rB   r¶  +  s   



ôzTerminalReporter.summary_errorsc                 C   s~   |  | j¡ | jjj}|dkrd S |jD ](\}}|dkr!||vr!q| j d|¡ |dd … dkr6|d d… }| j |¡ qd S )Nrt   r|   rs  r�  r  )r”  rÒ   rˆ   r˜   rx   ræ  r  ru   rí  rA   rA   rB   rç  :  s   
úz TerminalReporter._outrep_summaryc                 C   sP  | j dk rd S t ¡ | j }|  ¡ \}}g }| j dk}|r!| jj}|D ]\}}| jj|fi |¤Ž}	|r=|t|	ƒt|ƒ 7 }| 	|	¡ q#d 
|¡}
|di}dt|ƒ› �}| jj|fi |¤Ž}|ri|t|ƒt|ƒ 7 }|
|7 }
|r�| jjdi |¤Ž}| d¡rƒ|d d… }|t|ƒ7 }|
|7 }
|r�| jd	|
fd
|i|¤Ž d S | j|
fi |¤Ž d S )Nr�  r   r†  Tz in r¡   z[0méüÿÿÿr  rÓ   ©r¡   )ræ   r   rc  rv  Úbuild_summary_stats_linerÒ   rÓ   ró   r  rˆ  r‹   Úformat_session_durationrÆ  r  r�   )r>   Úsession_durationÚpartsrX  Ú
line_partsÚdisplay_seprÓ   Útextró   Úwith_markupr�   Úmain_markupÚdurationÚduration_with_markupÚmarkup_for_end_seprA   rA   rB   r³  G  s:   



zTerminalReporter.summary_statsc           
   	      sø   ˆ j sd S dtt dtdd f‡ fdd„}dtt dd f‡ fdd„}dtt dd f‡ fdd	„}dtt dd f‡ fd
d„}||t|dd�|t|dd�t|dd�dœ}g }ˆ j D ]}| |¡}|rb||ƒ qU|rxˆ jddddd� |D ]	}	ˆ  |	¡ qpd S d S )Nr�  Ústatr:   c                   sT   ˆ j  |g ¡}|sd S ˆ j}|D ]}t |t¡}t||ˆ j|diƒ}|  |¡ qd S )NT)rÍ   rñ   rˆ   Ú_color_for_typeÚ_color_for_type_defaultÚ _get_line_with_reprcrash_messagerÒ   rˆ  )r�  r   r+   rˆ   rH  r}   ru   rè   rA   rB   Úshow_simplep  s   ÿûz8TerminalReporter.short_test_summary.<locals>.show_simplec                    s†   ˆ j  dg ¡}|D ]7}| ˆ j¡}ˆ jj|fi td di¤Ž}tˆ jˆ j|ƒ}|› d|› �}|j}|r;|dt	|ƒ 7 }|  
|¡ q	d S )Nr/   r1   TrŠ   ú - )rÍ   rñ   Ú_get_verbose_wordrˆ   rÒ   ró   r  Ú_get_node_id_with_markupr6  rR   rˆ  )r�  r/   rH  Úverbose_wordÚmarkup_wordr½   ru   rK  rè   rA   rB   Úshow_xfailed|  s   ÿ
ÿõz9TerminalReporter.short_test_summary.<locals>.show_xfailedc                    st   ˆ j  dg ¡}|D ].}| ˆ j¡}ˆ jj|fi td di¤Ž}tˆ jˆ j|ƒ}|j}|  	|› d|› d|› �¡ q	d S )Nr0   r1   TrŠ   )
rÍ   rñ   r  rˆ   rÒ   ró   r  r  r6  rˆ  )r�  r0   rH  r  r	  r½   rK  rè   rA   rB   Úshow_xpassed‹  s   ÿ
ÿùz9TerminalReporter.short_test_summary.<locals>.show_xpassedc           
   	      sÂ   ˆ j  dg ¡}|rtˆ j|ƒng }|sd S |d  ˆ j¡}ˆ jj|fi td di¤Ž}d}|D ]/\}}}}	|	 	|¡rB|	t
|ƒd … }	|d urS|  d|||||	f ¡ q/|  d||||	f ¡ q/d S )Nr-   r   r1   Tú	Skipped: z%s [%d] %s:%d: %sz%s [%d] %s: %s)rÍ   rñ   Ú_folded_skipsrÐ   r  rˆ   rÒ   ró   r  Ú
startswithr  rˆ  )
r�  r-   Úfskipsr  r	  rþ   Únumrû   r,  rK  rè   rA   rB   Úshow_skipped–  s(   ÿ
ÿ
ÿøz9TerminalReporter.short_test_summary.<locals>.show_skippedr+   )r   r,   r2   )rð   ÚXÚfr²   Úpr¶   r  zshort test summary infoT)r=  rb  )ri   r   rR   r   rñ   r  r�   )
r>   r  r
  r  r  ÚREPORTCHAR_ACTIONSr�  r¬   rc   ru   rA   rè   rB   rº  l  s2   


ú	

€ýz#TerminalReporter.short_test_summaryc                 C   sB   | j d u s| jd u s| jr|  ¡  | j sJ ‚| jsJ ‚| j | jfS rM   )rÎ   rÏ   rP  r$  rè   rA   rA   rB   rT  ¾  s
   

z TerminalReporter._get_main_colorÚunknown_type_seenc                 C   sX   | j }d|v sd|v rd}|S d|v sd|v s|rd}|S d|v s$| js(d}|S d}|S )	Nr+   r2   r9  r1   r0   r8  r,   r7  )rÍ   rP  )r>   r  rÍ   rX  rA   rA   rB   Ú_determine_main_colorÅ  s   úüÿz&TerminalReporter._determine_main_colorc                 C   sT   g }| j  ¡ D ]}|r|tvr||vr| |¡ qttƒ| | _|  t|ƒ¡| _d S rM   )	rÍ   ÚkeysÚKNOWN_TYPESrˆ  ÚlistrÏ   r  rT   rÎ   )r>   Úunknown_typesÚ
found_typerA   rA   rB   r$  Ñ  s   
€z TerminalReporter._set_main_colorc                 C   s   | j  d¡r
|  ¡ S |  ¡ S )a™  
        Build the parts used in the last summary stats line.

        The summary stats line is the line shown at the end, "=== 12 passed, 2 errors in Xs===".

        This function builds a list of the "parts" that make up for the text in that line, in
        the example above it would be:

            [
                ("12 passed", {"green": True}),
                ("2 errors", {"red": True}
            ]

        That last dict for each line is a "markup dictionary", used by TerminalWriter to
        color output.

        The final color of the line is also determined by this function, and is the second
        element of the returned tuple.
        r�  )rˆ   rã   Ú&_build_collect_only_summary_stats_lineÚ _build_normal_summary_stats_linerè   rA   rA   rB   rô  Ú  s   z)TerminalReporter.build_summary_stats_lineÚkeyc                 C   s   | j  |g ¡}dd„ |D ƒS )zRGet test/collection reports for the given status key, such as `passed` or `error`.c                 S   s   g | ]
}t |d dƒr|‘qS )r¿   T)rI   re  rA   rA   rB   rg  ö  s    z<TerminalReporter._get_reports_to_display.<locals>.<listcomp>rÒ  )r>   r  rÔ  rA   rA   rB   Ú_get_reports_to_displayó  s   z(TerminalReporter._get_reports_to_displayc           	      C   s~   |   ¡ \}}g }|D ]'}|  |¡}|r1t|ƒ}t |t¡}|dd||ki}| dt||ƒ |f¡ q
|s;dtdifg}||fS )NTrb  ú%d %szno tests ran)rT  r   r  r  rñ   r  rˆ  Ú	pluralize)	r>   rX  Úknown_typesr÷  r  rÔ  ra   r}   ró   rA   rA   rB   r  ø  s   
€z1TerminalReporter._build_normal_summary_stats_linec                 C   sê   t |  d¡ƒ}t |  d¡ƒ}| jdkrdddifg}d}n@|dkr3d}dt| jd	ƒ }||difg}n*| j|k}|rCd}d
|› d�}nd}| j| }|› d| j› d|› d�}||difg}|rqtd }|dt|dƒ |difg7 }||fS )Nr.   r2   r   zno tests collectedr8  Tr7  z%d %s collectedÚtestzno tests collected (z deselected)rR  z tests collected (r!  )r  r   rÊ   r"  r  )r>   r.   r  r÷  rX  Úcollected_outputÚall_tests_were_deselectedrn  rA   rA   rB   r    s*   


z7TerminalReporter._build_collect_only_summary_stats_linerM   )r:   rà   ró  )r:   N)NN)r  )F)ro  r*   r:   N)arN   rO   rP   r   r   r   r=   rÚ   Úpropertyrƒ   ræ   rT   ré   re   rf   rí   Úsetterrï   rR   rò   rý   r  r  r  rù   rõ   r   Úbytesr�   r  r  r  ru   r   r   r&  r   r(  r1   ÚWarningMessager.  r   r0  r"   r1  r   r4  r(   rN  rP  r[  rG  rø   rU  rd  r'   rk  rj  r    r‚  r  r   r~  r•  r“  r   rµ  r
   r¯  r   ÚBaseExceptionr¾  r¿  r±  r3  rÌ  rÐ  rÓ  r¸  r¹  rë  rè  rì  r·  r¶  r&   rç  r³  rº  rT  r  r$  r	   rô  r   r  r  rA   rA   rA   rB   r”   V  s   

		úþüûúù
ø 
üþýüû
ú
þý
üÿÿ
þD


%ÿ
þ

ÿ
ÿ


ÿÿÿÿ
þ

6



%R
*	
þþr”   ÚtwrH  c                 C   sB   |  |j¡}| d¡^}}|r| jd |¡dd�}|d | S |S )Nrô   Trp  )rÅ  r½   r÷   ró   r‹   )r,  rˆ   rH  r½   Úpathr÷  Úparts_markuprA   rA   rB   r  ,  s   r  r]  r�   rL  c                 C   sª   |  d¡}|dkr|d|… }d}t|  d¡ƒ}|t|ƒ |kr"dS |t|ƒ |krP|t|ƒ8 }|d|… }|t|ƒ |krL|dd… }|t|ƒ |ks>||7 }|  |¡S )z€Format msg into format, ellipsizing it if doesn't fit in available_width.

    Returns None if even the ellipsis can't fit.
    r  r�  Nz...r¡   )Úfindr   r]  r  )r]  r�   rL  ÚiÚellipsisÚformat_widthrA   rA   rB   rD  6  s   
ÿ
rD  Úword_markupc                 C   sž   |  | ¡}|j|fi |¤Ž}t|| |ƒ}|› d|› �}t|ƒ}z|jjj}	W n
 ty0   Y |S w tƒ s@|j	| }
t
d|	|
ƒ}	nd|	› �}	|	durM||	7 }|S )z?Get summary line for a report, trying to add reprcrash message.rŠ   z - {}r  N)r  ró   r  r   rÎ  rÁ  r¼   rÏ  r   rÓ   rD  )rˆ   rH  r,  r3  r  r\   r5  ru   Ú
line_widthr�   rL  rA   rA   rB   r  O  s$   

õ

r  rÐ   r-   c                 C   sê   i }|D ]X}|j d usJ ‚t|j tƒsJ ||j fƒ‚t|j ƒdks(J ||j fƒ‚|j \}}}t| t|ƒƒ}t|di ƒ}|jdkrNd|v rNd|vrN|d |f}n|||f}| |g ¡ 	|¡ qg }	| 
¡ D ]\}}
|	 	t|
ƒg|¢R ¡ qc|	S )Nrr  Úkeywordsr´   ÚskipÚ
pytestmark)rÎ  r  r@  r  r%   r   rI   r¸   r"  rˆ  r!  )rÐ   r-   ÚdÚeventrû   r,  rK  r5  r  rE   ÚeventsrA   rA   rB   r  k  s$   

r  r9  r8  r7  )r+   r2   r1   r,   ra   Únounc                 C   s6   |dvr| |fS |  dd¡}| | dkr|d fS |fS )N)r2   r1   r$  r1   ÚwarningrG   r²   )r©   )ra   r;  rA   rA   rB   r"  “  s   r"  c                 C   sJ   g }| D ]\}}dj |d�}| d¡r|dd … }||vr"| |¡ q|S )Nz"{dist.project_name}-{dist.version})Údistzpytest-é   )r]  r  rˆ  )rŽ  rE   r/  r=  r¡  rA   rA   rB   r�     s   

€r�  Úsecondsc                 C   s6   | dk r
| d›d�S t jt| ƒd�}| d›d|› d�S )zQFormat the given seconds in a human readable manner to show in the final summary.é<   z.2fr²   )r?  zs (r<  )ÚdatetimeÚ	timedeltarƒ   )r?  ÚdtrA   rA   rB   rõ  ®  s   rõ  c                 C   sˆ   t | dƒrtt| jƒ}| d¡r|tdƒd… }|S | jsJ ‚t| jt	ƒs'J ‚| j\}}}| d¡r<|tdƒd… }|S |dkrBd}|S )zqGet the reason string of a skip/xfail/xpass test report.

    The string is just the part given by the user.
    r6  zreason: Nr  ÚSkippedr¡   )
rA  r   rR   r6  r  r  r-   r  rÎ  r@  )r°   rK  rY  rA   rA   rB   rC  ·  s   



þrC  )arQ   rU   ÚdataclassesrA  r�  rw  r•   r  r1   Úcollectionsr   Ú	functoolsr   Úpathlibr   Útypingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r{  Ú_pytest._versionrß   r   r   Ú_pytest._coder   Ú_pytest._code.coder   Ú_pytest._ior   Ú_pytest._io.wcwidthr   Ú_pytest.assertion.utilr   Ú_pytest.compatr   rÉ   r   r   r   r    Ú_pytest.config.argparsingr!   Ú_pytest.nodesr"   r#   Ú_pytest.pathlibr$   r%   Ú_pytest.reportsr&   r'   r(   Útyping_extensionsr)   Ú_pytest.mainr*   rl  r  r„   ÚActionr4   rY   r‡   rž   rR   r­   rº   Ú	dataclassr»   r”   r  rƒ   rD  rT   r  r  r  r  r"  r�  Úfloatrõ  rC  rA   rA   rA   rB   Ú<module>   sÐ    %|       \
ÿÿÿ
ÿ
þÿþ
ý ü	