o
    
vi                     @  s  d 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Zddl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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+Zddl,m-Z- ddl.m/Z/ ddl.m0Z0 ddl.m1Z1 ddl.m2Z2 ddl3m4Z4 ddl5m6Z6 dd l5m7Z7 dd!l8m9Z9 dd"l8m:Z: dd#l;m<Z< dd$l;m=Z= dd%l;m>Z> erdd&l?m@Z@ d'ZAd(ZBd)ZCG d*d+ d+ejDZEG d,d- d-eZFdtd2d3ZGdud6d7ZHdvd9d:ZIe2d;d<dwd@dAZJejKG dBdC dCZLeG dDdE dEZMdxdIdJZNdydPdQZOdzdTdUZPd{d[d\ZQd]d]d^d_d_d]d`ZRd^ZSd|dddeZTd}dgdhZUd~dkdlZVd~dmdnZWddpdqZXG drds dsZYdS )zsTerminal reporting of the full testing process.

This is a good source for looking at the various reporting hooks.
    )annotationsN)Counter)Callable)	Generator)Mapping)Sequence)partial)Path)Any)ClassVar)final)Literal)
NamedTuple)TextIO)TYPE_CHECKING)compat)nodes)timing)ExceptionInfo)ExceptionRepr)TerminalWriter)wcswidth)running_on_ci)_PluggyPlugin)Config)ExitCode)hookimpl)Parser)Item)Node)absolutepath)bestrelpath)
BaseReport)CollectReport)
TestReport)Sessiong      ?)failedpassedskipped
deselectedxfailedxpassedwarningserrorsubtests passedsubtests failedzsubtests skippedfEc                      s8   e Zd ZdZ			dd fddZ	ddddZ  ZS )MoreQuietActionzA 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Sequence[str]deststrdefaultobjectrequiredboolhelp
str | NonereturnNonec                   s   t  j||d|||d d S )Nr   )r2   r4   nargsr6   r8   r:   )super__init__)selfr2   r4   r6   r8   r:   	__class__ O/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/_pytest/terminal.pyr@   W   s   
zMoreQuietAction.__init__parserargparse.ArgumentParser	namespaceargparse.Namespacevaluesstr | Sequence[object] | Noneoption_stringc                 C  s6   t || jdd }t|| j| t |ddd |_d S )Nr      quiet)getattrr4   setattrrN   )rA   rF   rH   rJ   rL   	new_countrD   rD   rE   __call__h   s   zMoreQuietAction.__call__)NFN)r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   N)
rF   rG   rH   rI   rJ   rK   rL   r;   r<   r=   )__name__
__module____qualname____doc__r@   rR   __classcell__rD   rD   rB   rE   r1   P   s    
r1   c                   @  s*   e Zd ZU dZded< ded< d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.
    r5   categoryletterz$str | tuple[str, Mapping[str, bool]]wordN)rT   rU   rV   rW   __annotations__rD   rD   rD   rE   rY   u   s
   
 rY   rF   r   r<   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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d0dd1d |jd2dd0d3d4 |jd5d6d$d7d8g d9d:d; |jd<dd=dd>d |jd?d$d@g dAdBdCdD |jdEdFdddGdH |jdIdJd$dJd8g dKdLd; |jdMdNdNdOgdPdQ | jdRdSdTdU tj| tj	dVdW d S )XNzterminal reporting	Reportinggeneral)afterz-vz	--verbosecountr   verbosezIncrease verbosity)actionr6   r4   r:   z--no-header
store_trueF	no_headerzDisable headerz--no-summary
no_summaryzDisable summaryz--no-fold-skippedstore_falsefold_skippedTz+Do not fold skipped tests in short summary.)rc   r4   r6   r:   z--force-short-summaryforce_short_summaryz=Force condensed summary output regardless of verbosity level.z-qz--quietzDecrease verbosityz--verbosityzSet verbosity. Default: 0.)r4   typer6   r:   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   r4   r6   metavarr:   z--disable-warningsz--disable-pytest-warningsdisable_warningszDisable warnings summary)r6   r4   rc   r:   z-lz--showlocals
showlocalsz/Show locals in tracebacks (disabled by default)z--no-showlocalszFHide locals in tracebacks (negate --showlocals passed through addopts))rc   r4   r:   z--tbstyletbstyleauto)rs   longshortnolinenativez5Traceback print mode (auto/long/short/line/native/no))rn   rc   r4   r6   choicesr:   z
--xfail-tbxfail_tbz1Show tracebacks for xfail (as long as --tb != no)z--show-captureshowcapture)rv   stdoutstderrlogallr   zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)rc   r4   ry   r6   r:   z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))rc   r6   r:   z--colorcolor)yesrv   rs   z#Color terminal output (yes/no/auto)z--code-highlightr   rv   zSWhether code should be highlighted (only if --color is also enabled). Default: yes.)r6   ry   r:   console_output_stylezConsole output: "classic", or with additional progress information ("progress" (percentage) | "count" | "progress-even-when-capture-no" (forces progress even when capture=no)progress)r:   r6   zSpecify a verbosity level for test case execution, overriding the main level. Higher levels will provide more detailed information about each test case executed.)r:   )
getgroup
_addoption	addoptionr1   int_REPORTCHARS_DEFAULTaddinir   _add_verbosity_iniVERBOSITY_TEST_CASES)rF   grouprD   rD   rE   pytest_addoption   s  			
r   configr   c                   sd   t | tj | j d | jjs| jjr# fdd}| jj	
d| tjdkr0| jd d S d S )Nterminalreporterc                   s"   d tt|} d|  d S )N z[traceconfig] )joinmapr5   
write_line)tagsargsmsgreporterrD   rE   mywriter'  s   z"pytest_configure.<locals>.mywriterzpytest:configwin32terminalprogress)TerminalReportersysr|   pluginmanagerregisteroptiondebugtraceconfigtracerootsetprocessorplatformimport_plugin)r   r   rD   r   rE   pytest_configure"  s   
r   r5   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   rl   lowerro   replace)r   rl   old_aliases
reportoptscharrD   rD   rE   getreportopt3  s*   r   Ttrylastreportr"   tuple[str, str, str]c                 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&   r-   E)r'   r(   outcomewhenupper)r   r[   r   rD   rD   rE   pytest_report_teststatusL  s   r   c                   @  sH   e Zd ZU dZded< dZded< dZded< d	Zd
ed< d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``).
    r5   messageNr;   nodeidztuple[str, int] | None
fslocationTr   count_towards_summaryr   r   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    )rA   r   filenamelinenumrelpathrD   rD   rE   get_locationn  s   
zWarningReport.get_location)r   r   r<   r;   )	rT   rU   rV   rW   r]   r   r   r   r   rD   rD   rD   rE   r   \  s   
 
r   c                   @  s  e Zd Zdddd	ZdddZedddZedddZedddZedddZ	edddZ
e
jdddZ
edddZedddZdd"d#Zdd'd(Zddd,d-Zdd.d/Zd0d1d2d3dd8d9Zd0d:dd;d<Zd0d:dd=d>Zdd?d@ZddCdDZddEdFZ		dddLdMZdddPdQZddSdTZddXdYZd d\d]Zdd`daZddddeZddgdhZddkdlZ ddodpZ!eddqdrZ"e#dsdtddvdwZ$ddxdyZ%ddzd{Z&dd|d}Z'edd~dZ(dddZ)dddZ*d	d
ddZ+e#dsddddZ,dddZ-dddZ.dddZ/dddZ0e#dsdtdddZ1e#dsdtdddZ2dddZ3dddZ4dddZ5dddZ6dd Z7dd Z8dddZ9dddZ:dddZ;dddZ<dddZ=dddZ>dddZ?dddńZ@dddǄZAdddɄZBddʜddd̈́ZCdddτZDddd҄ZEdddԄZFdddքZGdddلZHddd܄ZIdddބZJdddZKdddZLdddZMdddZNdS (  r   Nr   r   fileTextIO | Noner<   r=   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| _| jj| _t| | _t | _t | _|  | _t ! | _"d | _#d | _$d S Nr   )%_pytest.configr   _numcollected_session_showfspathstats_main_color_known_typesr   r   	startpathr   r|   create_terminal_writer_tw	fullwidth_screen_widthcurrentfspathr   rl   r   rh   foldskipped	hasmarkupr   CallableBoolisattyset_progress_nodeids_reported_timing_nodeids_reported_determine_show_progress_info_show_progress_infor   Instant_collect_report_last_write_already_displayed_warnings_keyboardinterrupt_memo)rA   r   r   _pytestrD   rD   rE   r@   {  s0   







zTerminalReporter.__init__,Literal['progress', 'count', 'times', False]c                 C  sl   | j dddkr| j ddkrdS | j ddrdS | j d}|dv r(dS |d	kr.d	S |d
kr4d
S dS )zRReturn whether we should display progress information based on the current config.capturerv   r   progress-even-when-capture-noF	setupshow>   r   r   r   ra   times)r   	getoptiongetini)rA   cfgrD   rD   rE   r     s   
z.TerminalReporter._determine_show_progress_infor   c                 C  s   | j jj}|S rS   )r   r   rb   )rA   	verbosityrD   rD   rE   r     s   
zTerminalReporter.verbosityr9   c                 C  s
   | j dkS r   )r   rA   rD   rD   rE   
showheader     
zTerminalReporter.showheaderc                 C     t | jjjS rS   )r9   r   r   re   r   rD   rD   rE   re        zTerminalReporter.no_headerc                 C  r   rS   )r9   r   r   rf   r   rD   rD   rE   rf     r   zTerminalReporter.no_summaryc                 C  s"   | j d u r| jtjdkS | j S r   )r   r   get_verbosityr   r   r   rD   rD   rE   
showfspath  s   
zTerminalReporter.showfspathvaluebool | Nonec                 C  s
   || _ d S rS   )r   )rA   r   rD   rD   rE   r     r   c                 C  s   | j tjdkS r   )r   r   r   r   r   rD   rD   rE   showlongtestinfo  s   z!TerminalReporter.showlongtestinfoc                 C  s
   t | jS )zUThe amount of items reported in the progress so far.

        :meta private:
        )lenr   r   rD   rD   rE   reported_progress  s   
z"TerminalReporter.reported_progressr   r5   c                 C  s   ddd ||}|| jv S )Nxr   )r*   r(   )getrl   )rA   r   rD   rD   rE   hasopt  s   
zTerminalReporter.hasoptr   res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   rw   write)rA   r   r  r	  fspath	relfspathrD   rD   rE   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   rw   r  )rA   r  r  kwargsrD   rD   rE   write_ensure_prefix  s   


z$TerminalReporter.write_ensure_prefixc                 C  s   | j r| j  d | _ d S d S rS   )r   r   rw   r   rD   rD   rE   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  )rA   r  r  r  r  r	  r!  wrappedrD   rD   rE   
wrap_write  s   

zTerminalReporter.wrap_writer  c                K  s   | j j|fd|i| d S )Nr  )r   r  )rA   r  r  r	  rD   rD   rE   r    s   zTerminalReporter.writec                C  s   | j j||d d S )Nr&  )r   	write_raw)rA   r  r  rD   rD   rE   r'    s   zTerminalReporter.write_rawc                 C  s   | j   d S rS   )r   r  r   rD   rD   rE   r    s   zTerminalReporter.flushrw   str | bytesc                 K  s6   t |tst|dd}|   | jj|fi | d S )Nr   )errors)
isinstancer5   r  r   rw   )rA   rw   r	  rD   rD   rE   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.
        eraseFrM   r   r   N)popr   r   r  r5   r  )rA   rw   r	  r+  
fill_countfillrD   rD   rE   rewrite  s   	
 zTerminalReporter.rewriteseptitler;   r   
int | Nonec                 K  s$   |    | jj|||fi | d S rS   )r  r   r1  )rA   r1  r2  r   r	  rD   rD   rE   	write_sep-  s   zTerminalReporter.write_sep=kwc                 K  s   | j j||fi | d S rS   )r   r1  )rA   r2  r1  r6  rD   rD   rE   section7  s   zTerminalReporter.sectionr   c                 K  s   | j j|fi | d S rS   )r   rw   )rA   r   r6  rD   rD   rE   rw   :     zTerminalReporter.linerZ   itemsSequence[Any]c                 C  s2   || j v}| j |g | |r|   d S d S rS   )r   
setdefaultextend_set_main_color)rA   rZ   r9  set_main_colorrD   rD   rE   
_add_stats=  s
   
zTerminalReporter._add_statsexcreprr   c                 C  s&   t |dD ]	}| d|  qdS )Nr  zINTERNALERROR> T)r5   r  r   )rA   r@  rw   rD   rD   rE   pytest_internalerrorC  s   z%TerminalReporter.pytest_internalerrorwarning_messagewarnings.WarningMessagec                 C  s@   ddl m} |j|jf}||}t|||d}| d|g d S )Nr   )warning_record_to_str)r   r   r   r,   )_pytest.warningsrD  r   linenor   r?  )rA   rB  r   rD  r   r   warning_reportrD   rD   rE   pytest_warning_recordedH  s   z(TerminalReporter.pytest_warning_recordedpluginr   c                 C  s&   | j jjrd| }| | d S d S )NzPLUGIN registered: )r   r   r   r   )rA   rI  r   rD   rD   rE   pytest_plugin_registeredW  s   

z)TerminalReporter.pytest_plugin_registeredSequence[Item]c                 C  s   |  d| d S )Nr)   )r?  )rA   r9  rD   rD   rE   pytest_deselected_  s   z"TerminalReporter.pytest_deselectedlocationtuple[str, int | None, str]c                 C  sZ   |\}}}| j r| ||||}| |d |   d S | jr+| |d |   d S d S )Nr   )r  _locationliner  r  r   r  )rA   r   rM  r  rF  domainrw   rD   rD   rE   pytest_runtest_logstartb  s   
z(TerminalReporter.pytest_runtest_logstartr   r$   c                 C  sV  d| _ |}t| jjj|| jd }|j|j|j}}}t|t	s$d }n|\}}| 
||g |s5|s5d S |d u rdt|d}|jrH|sHddi}n|jrR|rRddi}n|jrZddi}n
|jrbddi}ni }| j|j | jtjdkr| jj|fi | | jr| js|   n| j|jg|jR  }	t|d}
|
s| j|	|fi | |jst|drt|}| jt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' d | jr
| jj| ( d dd n| jd | jj|fi | | jd|	  d| _)| *  d S )NT)r   r   wasxfailgreenyellowredr   node    [100%]rM   z ({})z ()[]r   )cyanr  )+
_tests_ranrY   r   hookr   rZ   r[   r\   r*  tupler?  hasattrr'   r&   r(   r   addr   r   r   r   r   r  r   _is_last_item(_write_progress_information_if_past_edgerO  rM  r  _get_raw_skip_reasonr   r!  r  _format_trimmedr%  r  r  rV  gatewayid!_get_progress_information_messager   r  )rA   r   repr  rZ   r[   r\   r	  	was_xfailrw   running_xdistreasonavailable_widthformatted_reasonrD   rD   rE   pytest_runtest_logreportp  s|   









z)TerminalReporter.pytest_runtest_logreportc                 C  s   | j d usJ | j| j jkS rS   )r   r  testscollectedr   rD   rD   rE   rb       zTerminalReporter._is_last_itemT)wrapperGenerator[None, object, object]c                 c  s2    d V }| j tjdkr| jr| jr|   |S r   )r   r   r   r   r   r  r  )rA   resultrD   rD   rE   pytest_runtestloop  s   z#TerminalReporter.pytest_runtestloopc           
        sn  j sJ j j}jdkr2|r)j}dtt| d}d| d}|||S d| d| dS jd	kr|s;d
S dd d d d d d
 }|d jd  fdd|D }t	 fddj j
D }t	 fdd|D }||k}	js|	rjdd |D  tt	dd |D S d
S |rdjd | ddS dS )Nra   z{:zd} [z/{}]z [  / z ]r   r   r'   r+   r&   r*   r(   r-   r   c                   s   g | ]
}|j  jvr|qS rD   )r   r   .0rr   rD   rE   
<listcomp>  s    zFTerminalReporter._get_progress_information_message.<locals>.<listcomp>c                 3  s    | ]
}|j d   kV  qdS )r   N)rM  )rz  icurrent_locationrD   rE   	<genexpr>  s    
zETerminalReporter._get_progress_information_message.<locals>.<genexpr>c                 3  s(    | ]}|j d   kr|jdkV  qdS )r   r   N)rM  r   ry  r~  rD   rE   r    s    c                 s  s    | ]}|j V  qd S rS   r   ry  rD   rD   rE   r    s    c                 s  s     | ]}t |tr|jV  qd S rS   )r*  r$   durationry  rD   rD   rE   r    s    d   3dz%]rX  )r   rp  r   r  r  r5   format_get_reports_to_displayrM  sumr9  r  r   updateformat_node_duration)
rA   	collectedr   counter_formatformat_stringall_reportsnot_reportedtests_in_moduletests_completedlast_in_modulerD   )r  rA   rE   rh    s\   


	

z2TerminalReporter._get_progress_information_messagec                 C  s   | j }| jdkr| jsJ | jj}td| d| d}n| jdkr'td}ntd}|| d | jk}|rP|  \}}|  }| jj	|d	 fi |d
i d S d S )Nra   rv  /r[  r   z 99h 59mrX  rM   r  T)
_width_of_current_liner   r   rp  r  r   _get_main_colorrh  r   r  )rA   r   	num_testsprogress_length	past_edge
main_color_r   rD   rD   rE   rc    s   



 z9TerminalReporter._write_progress_information_if_past_edgec                 C  sN   |   \}}|  }| j}| jj| d }| j||fddi|di d S )NrM   r  T)r  rh  r  r   r   r  rjust)rA   r   r  r   r   r/  rD   rD   rE   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   rD   rD   rE   r    s   z'TerminalReporter._width_of_current_linec                 C  sT   |   r| jjjdkr| jdddd d S d S | jjjdkr(| jdddd d S d S )Nr   zcollecting ... T)r  boldrM   )r   r   r   rb   r  r   rD   rD   rE   pytest_collection  s   z"TerminalReporter.pytest_collectionr#   c                 C  sd   |j r| d|g n
|jr| d|g dd |jD }|  jt|7  _|  r0|   d S d S )Nr-   r(   c                 S  s   g | ]	}t |tr|qS rD   )r*  r   rz  r  rD   rD   rE   r|  $      z9TerminalReporter.pytest_collectreport.<locals>.<listcomp>)r&   r?  r(   rt  r   r  r   report_collect)rA   r   r9  rD   rD   rE   pytest_collectreport  s   z%TerminalReporter.pytest_collectreportr   c                 C  sF  | j jjdk r	d S |s| j jtk rd S t | _t	| j
dg }t	| j
dg }t	| j
dg }| j| }|r>dnd}|t| jd | jdkrNd	nd
 7 }|rd|d| d|dkr_d
nd	 7 }|rn|d| d7 }|rx|d| d7 }| j|kr|d| d7 }|  r| j|ddd |r| d d S d S | | d S )Nr   r-   r(   r)   z
collected zcollecting z itemrM   r   r   rw  z errorz deselectedz skippedz	 selectedT)r  r+  r  )r   r   rb   r   elapsedsecondsREPORT_COLLECTING_RESOLUTIONr   r   r  r   r  r   r5   r   r0  r  r   )rA   r   r)  r(   r)   selectedrw   rD   rD   rE   r  )  s<   


 
zTerminalReporter.report_collectr   sessionr%   c                 C  s  || _ t | _| jsd S | jdddd t }| jsdt	j d| }t
t	dd }|rFdtt|d d	 }|d
| d|d	  d7 }|dtjj dtj 7 }| jdkse| jjjset
| jjdd rn|dtt	j 7 }| | | jjj| j| jd}| | d S d S )Nr5  ztest session startsTr  z	platform z -- Python pypy_version_infor      z[pypy--r[  z	, pytest-z	, pluggy-r   pastebinz -- )r   
start_path)r   r   r   _session_startr   r4  r   python_versionre   r   rO   r   r   r5   r   _versionversionpluggy__version__r   r   r   r   
executabler   r^  pytest_report_headerr   _write_report_lines_from_hooks)rA   r  verinfor   r  linesrD   rD   rE   pytest_sessionstartM  s2   


z$TerminalReporter.pytest_sessionstartr  Sequence[str | Sequence[str]]c                 C  s<   t |D ]}t|tr| | q|D ]}| | qqd S rS   )reversedr*  r5   r   )rA   r  line_or_linesrw   rD   rD   rE   r  h  s   
z/TerminalReporter._write_report_lines_from_hooks	list[str]c                 C  s   d|j  g}|jr'd}|jrdd|j d}|dt|j |j |  |jtjj	kr>|
d}|dd| |j }|rR|d	dt| |S )
Nz	rootdir: r   z% (WARNING: ignoring pytest config in , z!)zconfigfile: 	testpathsztestpaths: {}zplugins: {})r  inipath_ignored_config_filesr   appendr!   args_sourcer   
ArgsSource	TESTPATHSr   r  r   list_plugin_distinfo_plugin_nameversions)rA   r   rt  warningr  
plugininforD   rD   rE   r  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   r  r9  collectonlyrx  r   r&   !zcollection failures)r  r   r^  pytest_report_collectionfinishr   r9  r  r   r   rb   r   rw   _printcollecteditemsr   r  r1  
toterminal)rA   r  r  r&   ri  rD   rD   rE   pytest_collection_finish  s(   

z)TerminalReporter.pytest_collection_finishc              	   C  s\  | j tj}|dk r>|dk r0tdd |D }t| D ]\}}| j| d|  qd S |D ]	}| j|j	 q2d S g }d}|D ]g}|
 dd  }	|ra||	d t| kr[n|  |sP|	t|d  D ]A}
||
 t|d d }| j| |
  |dkrt|
d	d }|rt|nd }|r| D ]}| jd
|d | qqiqDd S )Nr   rx  c                 s  s"    | ]}|j d dd V  qdS r
  rM   r   N)r   r  )rz  itemrD   rD   rE   r    s     z8TerminalReporter._printcollecteditems.<locals>.<genexpr>: r   rM     objz{}{})r   r   r   r   r   sortedr9  r   rw   r   	listchainr  r-  r  rO   inspectgetdoc
splitlinesr  )rA   r9  test_cases_verbositycountsnamera   r  stackindentneeded_collectorscolr  docrw   rD   rD   rE   r    s@   
z%TerminalReporter._printcollecteditems
exitstatusint | ExitCodeGenerator[None]c                 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r6| jdt|jdd |tjkrC|   d | _n|jrQ| jdt|jdd |   |S )Nr   )r   r  r   r  T)rU  )r   rw   r   OKTESTS_FAILEDINTERRUPTEDUSAGE_ERRORNO_TESTS_COLLECTEDrf   r   r^  pytest_terminal_summary
shouldfailr4  r5   _report_keyboardinterruptr   
shouldstopsummary_stats)rA   r  r  rt  summary_exit_codesrD   rD   rE   pytest_sessionfinish  s,   
z%TerminalReporter.pytest_sessionfinishc                 c  s^    |    |   |   |   |   |   zd V W |   |   S |   |   w rS   )summary_errorssummary_failuressummary_xfailuressummary_warningssummary_passessummary_xpassesshort_test_summaryr   rD   rD   rE   r    s   

z(TerminalReporter.pytest_terminal_summaryexcinfoExceptionInfo[BaseException]c                 C  s   |j dd| _d S )NT)funcargs)getreprr   )rA   r  rD   rD   rE   pytest_keyboard_interrupt     z*TerminalReporter.pytest_keyboard_interruptc                 C  s   | j d ur|   d S d S rS   )r   r  r   rD   rD   rE   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)rT  )
r   	reprcrashr   r4  r   r   	fulltracer  r   rw   )rA   r@  r   rD   rD   rE   r    s   

z*TerminalReporter._report_keyboardinterruptr  rF  rP  c                   sn   d fdd}|r1||}j dkr-|dd |d	tjkr-|d
tjt| 7 }|d S d}|d S )Nr   r5   r<   c                   s\   j | } r,| r,|d t   } d}|d dd|d< |d|7 }|S )NrZ  r   r   r
  )r   cwd_relative_nodeidendswithr  r  r   r   )r   rw   rJ   rP  rA   rD   rE   mkrel   s   
z-TerminalReporter._locationline.<locals>.mkrelrW  r
  r   \z <- z
[location]r   )r   r5   r<   r5   )r   r  r   r   SEPr!   r   r	   )rA   r   r  rF  rP  r  r  rD   r  rE   rO    s   
zTerminalReporter._locationlinec                 C  s   |j }|r|S dS )Nztest session)	head_line)rA   ri  r  rD   rD   rE   _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 )N2   r   )r5   longreprr  AttributeError)rA   ri  rD   rD   rE   _getcrashline  s   zTerminalReporter._getcrashliner  c                 C  s   dd | j |dD S )Nc                 S  s   g | ]	}t |d s|qS )	_pdbshown)r`  r  rD   rD   rE   r|  '  r  z/TerminalReporter.getreports.<locals>.<listcomp>rD   r   r  )rA   r  rD   rD   rE   
getreports&  r8  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 fdd}|rEd	nd
} jd|ddd |	 D ]2\}}	||	}
|
rw j
|
 | }ddd |D }| }n| } j
|  j
  qT j
d d S d S )Nr   r,   reportslist[WarningReport]r<   r5   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  )r5   r  )rz  locrD   rD   rE   r  F  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{}rM   r   r   N)r  )rz  kvrD   rD   rE   r  I  s
    
)	r   r   r  r  r   r   r5   r   r9  )r  	locationsr   rM  counts_by_filenamer   rD   rE   collapsed_location_report<  s   

zDTerminalReporter.summary_warnings.<locals>.collapsed_location_reportzwarnings summary (final)zwarnings summaryr5  TF)rT  r  r  c                 s  s    | ]}d | V  qdS )r  NrD   r  rD   rD   rE   r  U  s    z4TerminalReporter.summary_warnings.<locals>.<genexpr>zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)r  r  r<   r5   )r  r   r  r   r  r;  r   r  r4  r9  r   rw   r  r   rstrip)rA   all_warningsr   warning_reportsreports_grouped_by_messagewrr  r2  r   message_reportsmaybe_locationr  indentedrD   r   rE   r  )  s>   



z!TerminalReporter.summary_warningsc                 C     |  ddd d S )Nr'   PASSESPsummary_passes_combinedr   rD   rD   rE   r  _  r  zTerminalReporter.summary_passesc                 C  r   )Nr+   XPASSESXr#  r   rD   rD   rE   r  b  r  z TerminalReporter.summary_xpasseswhich_reports	sep_title
needed_optc                 C  s   | j jjdkr<| |r>| |}|sd S | d| |D ]"}|jr5| |}| jd|ddd | | | 	|j
 qd S d S d S )Nrv   r5  r  T)rS  r  )r   r   rr   r  r  r4  sectionsr  _outrep_summary_handle_teardown_sectionsr   )rA   r'  r(  r)  r  ri  r   rD   rD   rE   r$  e  s   



z(TerminalReporter.summary_passes_combinedlist[TestReport]c                   s   |  d} fdd|D S )Nr   c                   s$   g | ]}|j d kr|j kr|qS )r   )r   r   )rz  r   r  rD   rE   r|  w  s
    z:TerminalReporter._get_teardown_reports.<locals>.<listcomp>)r  )rA   r   r  rD   r  rE   _get_teardown_reportsu  s   

z&TerminalReporter._get_teardown_reportsc                 C  s   |  |D ]}| | qd S rS   )r.  print_teardown_sections)rA   r   r   rD   rD   rE   r,  }  s   z*TerminalReporter._handle_teardown_sectionsri  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 )Nrv   r   r   r  rx  r  )r   r   r{   r*  r   r1  rw   rA   ri  r{   secnamer  rD   rD   rE   r/    s   
z(TerminalReporter.print_teardown_sectionsc                 C  s   | j jj}| jdd|d d S )Nr&   FAILURESrq   )r   r   rr   summary_failures_combined)rA   rq   rD   rD   rE   r    s   
z!TerminalReporter.summary_failuresc                 C  s0   | j jj}|r| j jjnd}| jdd|d d S )Nrv   r*   	XFAILURESr3  )r   r   rz   rr   r4  )rA   show_tbrq   rD   rD   rE   r    s   
z"TerminalReporter.summary_xfailures)r)  rq   c          	      C  s   |dkrR|r|  |rT| |}|sd S | d| |dkr4|D ]}| |}| | | | q d S |D ]}| |}| jd|ddd | | | |j q6d S d S d S )Nrv   r5  rw   r  TrU  r  )	r  r  r4  r  r+  r   r  r,  r   )	rA   r'  r(  rq   r)  r  ri  rw   r   rD   rD   rE   r4    s(   




z*TerminalReporter.summary_failures_combinedc                 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 )Nrv   r-   r5  ERRORSr   zERROR collecting z	ERROR at z of r  Tr7  )	r   r   rr   r  r4  r   r  r   r+  )rA   r  ri  r   rD   rD   rE   r    s   



zTerminalReporter.summary_errorsr"   c                 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 )Nrv   r   r  rx  r  )r  r   r   r   r{   r*  r1  rw   r0  rD   rD   rE   r+    s   
z TerminalReporter._outrep_summaryc                 C  sN  | j dk rd S | 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j|fi |}|rh|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 )Nrx  r   r  Tz in r   z[0mr5  r   r   )r   r  r  build_summary_stats_liner   r   r	  r  r  r   format_session_durationr  r  r4  r   )rA   session_durationpartsr  
line_partsdisplay_sepr   textr	  with_markupr   main_markupr  duration_with_markupmarkup_for_end_seprD   rD   rE   r    s:   




zTerminalReporter.summary_statsc           
   	     s    j sd S d fdd}d fd	d
}d fdd}d fddd fddd fdd}||t|dd|t|ddt|ddd}g } j D ]}||}|rX|| qK|rn jddddd |D ]	}	 |	 qfd S d S )Nr  r  statr5   r<   r=   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  rF  r&   r   ri  r   rw   r   rD   rE   show_simple  s   z8TerminalReporter.short_test_summary.<locals>.show_simplec           	            j dg }|D ]:}| jtd di\}} jj|fi |}t j j|}| d| }|j}|r>|dt	| 7 }| 
| q	d S )Nr*   r,   Tr    - r   r  _get_verbose_word_with_markupr   rG  r   r	  _get_node_id_with_markuprR  r5   r  )	r  r*   ri  verbose_wordverbose_markupmarkup_wordr   rw   rl  r   rD   rE   show_xfailed  s   z9TerminalReporter.short_test_summary.<locals>.show_xfailedc           	        rK  )Nr+   r,   Tr   rL  rM  )	r  r+   ri  rP  rQ  rR  r   rw   rl  r   rD   rE   show_xpassed  s   z9TerminalReporter.short_test_summary.<locals>.show_xpassedc                   s    j dg }|rt j|ng }|sd S |d  jtd di\}} jj|fi |}d}|D ];\}}}	}
|
	|rE|
t
|d  }
|	d ur]| | d| d| d|	 d	|
 	 q2| | d| d| d	|
  q2d S )
Nr(   r   r,   T	Skipped: rv  z] r   r  )r   r  _folded_skipsr   rN  r   rG  r   r	  
startswithr  r  )r  r(   fskipsrP  rQ  rR  r  numr  rF  rl  r   rD   rE   show_skipped_folded  s    
("z@TerminalReporter.short_test_summary.<locals>.show_skipped_foldedc           	        s    j dg }|D ]^}|jd usJ t|jtsJ ||jft|jdks-J ||jf| jtd di\}} j	j
|fi |}t j	 j|}| d| }|jd }|rb|dt| 7 }| | q	d S )Nr(   r  r,   Tr   rW  rL  )r   r  r	  r*  r_  r  rN  r   rG  r   r	  rO  r5   r  )	r  r(   ri  rP  rQ  rR  r   rw   rl  r   rD   rE   show_skipped_unfolded1  s    
zBTerminalReporter.short_test_summary.<locals>.show_skipped_unfoldedc                   s    j r	|  d S |  d S rS   )r   )r  rA   rZ  r[  rD   rE   show_skippedD  s   z9TerminalReporter.short_test_summary.<locals>.show_skippedr&   )rF  r'   r-   )r  r&  fr   pr   r5  zshort test summary infoT)r\  r  )r  r  rF  r5   r<   r=   )r  r  r<   r=   )rl   r   r  r4  r   )
rA   rJ  rS  rT  r]  REPORTCHAR_ACTIONSr  r   rc   rw   rD   r\  rE   r    s6   


	

z#TerminalReporter.short_test_summarytuple[str, list[str]]c                 C  sB   | j d u s| jd u s| jr|   | j sJ | jsJ | j | jfS rS   )r   r   rb  r=  r   rD   rD   rE   r  ^  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&   r-   rU  r,   r+   rT  r'   rS  )r   rb  )rA   rb  r   r  rD   rD   rE   _determine_main_colore  s   z&TerminalReporter._determine_main_colorc                 C  sP   g }| j D ]}|r|tvr||vr|| qtt| | _| t|| _d S rS   )r   KNOWN_TYPESr  listr   rc  r9   r   )rA   unknown_types
found_typerD   rD   rE   r=  q  s   

z TerminalReporter._set_main_color-tuple[list[tuple[str, dict[str, bool]]], str]c                 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   rD   rD   rE   r;  z  s   z)TerminalReporter.build_summary_stats_linekey	list[Any]c                 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)rO   r  rD   rD   rE   r|    s    z<TerminalReporter._get_reports_to_display.<locals>.<listcomp>r  )rA   rk  r  rD   rD   rE   r    rq  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 )NTr  %d %szno tests ran)r  r  r  rG  r  rH  r  	pluralize)	rA   r  known_typesr>  rk  r  ra   r   r	  rD   rD   rE   rj    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)   r-   r   zno tests collectedrT  TrS  z%d %s collectedtestzno tests collected (z deselected)r  z tests collected (rm  )r  r  r   rn  rG  )rA   r)   r)  r>  r  collected_outputall_tests_were_deselectedr  rD   rD   rE   ri    s*   


z7TerminalReporter._build_collect_only_summary_stats_linerS   )r   r   r   r   r<   r=   )r<   r   )r<   r   )r<   r9   )r   r  r<   r=   )r   r5   r<   r9   )r   r5   r  r5   r	  r9   r<   r=   r:  )r  r5   r  r5   r<   r=   r<   r=   )r  r5   r  r9   r  r   r  r5   r	  r9   r<   r=   )r  r5   r  r9   r	  r9   r<   r=   )r  r5   r  r9   r<   r=   )rw   r(  r	  r9   r<   r=   )rw   r5   r	  r9   r<   r=   )NN)
r1  r5   r2  r;   r   r3  r	  r9   r<   r=   )r5  )r2  r5   r1  r5   r6  r9   r<   r=   )r   r5   r6  r9   r<   r=   )rZ   r5   r9  r:  r<   r=   )r@  r   r<   r9   )rB  rC  r   r5   r<   r=   )rI  r   r<   r=   )r9  rK  r<   r=   )r   r5   rM  rN  r<   r=   r   r$   r<   r=   )r<   rs  )r<   r5   )r   r#   r<   r=   )F)r   r9   r<   r=   r  r%   r<   r=   )r  r  r<   r=   )r   r   r<   r  )r  r%   r  r  r<   r  )r<   r  )r  r  r<   r=   )
r   r5   r  r5   rF  r3  rP  r5   r<   r5   )r  r5   )r'  r5   r(  r5   r)  r5   r<   r=   )r   r5   r<   r-  )r   r5   r<   r=   )ri  r$   r<   r=   )
r'  r5   r(  r5   rq   r5   r)  r;   r<   r=   )ri  r"   r<   r=   )r<   ra  )rb  r9   r<   r5   )r<   rh  )rk  r5   r<   rl  )OrT   rU   rV   r@   r   propertyr   r   re   rf   r   setterr  r  r  r  r  r  r%  r  r'  r  r   r0  r4  r7  rw   r?  rA  rH  rJ  rL  rQ  ro  rb  r   ru  rh  rc  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rO  r  r  r  r  r  r  r$  r.  r,  r/  r  r  r4  r  r+  r  r  r  rc  r=  r;  r  rj  ri  rD   rD   rD   rE   r   y  s    



		





L
-


$




6





%l
	r   twr   ri  c                 C  sB   | |j}|d^}}|r| jd|dd}|d | S |S )Nr
  Tr  )r   r   r  r	  r   )rx  r   ri  r   pathr>  parts_markuprD   rD   rE   rO    s   rO  r  r   rm  r   r;   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 )zFormat msg into format, ellipsizing it if doesn't fit in available_width.

    Returns None if even the ellipsis can't fit.
    r  rx  Nz...r   )findr   r  r  )r  r   rm  r}  ellipsisformat_widthrD   rD   rE   re    s   

re  word_markupdict[str, bool]c                 C  s   | | |\}}|j|fi |}t|| |}| d| }t|}	zt|jtr-|j}
n|jjj}
W n
 t	y=   Y |S w t
 sG| jjdkrQ| jjsQd|
 }
n|j|	 }td|
|}
|
durd||
7 }|S )z?Get summary line for a report, trying to add reprcrash message.r   rW  rL  z - {}N)rN  r	  rO  r   r*  r	  r5   r  r   r
  r   r   rb   ri   r   re  )r   ri  rx  r~  rP  rQ  r\   rV  rw   
line_widthr   rm  rD   rD   rE   rI    s6   

rI  r   r	   r(   Sequence[CollectReport]&list[tuple[int, str, int | None, str]]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 )Nr  keywordsr   skip
pytestmark)r	  r*  r_  r  r!   r	   rO   r   r;  r  r9  )r   r(   deventr  rF  rl  r  rk  rJ   eventsrD   rD   rE   rV    s$   

rV  rU  rT  rS  )r&   r-   r,   r'   r.   r/   ra   nountuple[int, str]c                 C  s6   |dvr| |fS | dd}| | dkr|d fS |fS )N)r-   r,   rp  r,   r  rM   r   )r   )ra   r  rD   rD   rE   rn  =  s   rn  r  c                 C  sP   g }| D ]!\}}|j  d|j }|dr|dd  }||vr%|| q|S )Nr  zpytest-   )project_namer  rW  r  )r  rJ   rI  distr  rD   rD   rE   r  J  s   

r  r  floatc                 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.<   .2fr   r  zs (rY  )datetime	timedeltar   )r  dtrD   rD   rE   r<  X  s   r<  c                 C  s   | dk rd| d ddS | dk rd| d ddS | dk r'd| d d	dS | d
k r4d| d ddS | dk rAd| d ddS | dk rNd| d d	dS | dk rYd| ddS | dk rld| d dd| d ddS d| d dd| d d ddS )zQFormat the given seconds in a human readable manner to show in the test progress.gh㈵>r   i@B z.3fusg-C6?r  gMbP?z.1fg{Gz?i  msg?rM   r  r   i  z.0fzm zh mrD   r  rD   rD   rE   r  a  s"   "r  r$   c                 C  s   t | dr| j}|dr|tdd }|S | jsJ t| jts$J | j\}}}|dr9|tdd }|S |dkr?d}|S )zqGet the reason string of a skip/xfail/xpass test report.

    The string is just the part given by the user.
    rR  zreason: NrU  Skippedr   )r`  rR  rW  r  r(   r*  r	  r_  )r   rl  r  rD   rD   rE   rd  x  s   



rd  c                   @  s`   e Zd ZdZdddZ	ddddZedddZedddZed ddZ	edddZ
dS )!TerminalProgressPlugina#  Terminal progress reporting plugin using OSC 9;4 ANSI sequences.

    Emits OSC 9;4 sequences to indicate test progress to terminal
    tabs/windows/etc.

    Not all terminal emulators support this feature.

    Ref: https://conemu.github.io/en/AnsiEscapeCodes.html#ConEmu_specific_OSC
    trr   r<   r=   c                 C  s   || _ d | _d| _d S )NF)_trr   _has_failures)rA   r  rD   rD   rE   r@     s   
zTerminalProgressPlugin.__init__Nstate?Literal['remove', 'normal', 'error', 'indeterminate', 'paused']r   r3  c                 C  s   |du sd|  krdksJ  J | dkr d}n> dkr- |dus&J d| d}n, d	kr@ |dur=d
| d}nd}n dkrH d}ndkrY|durVd| d}nd}	 | j j|dd dS )a  Emit OSC 9;4 sequence for indicating progress to the terminal.

        :param state:
            Progress state to set.
        :param progress:
            Progress value 0-100. Required for "normal", optional for "error"
            and "paused", otherwise ignored.
        Nr   r  removez
]9;4;0;\normalz]9;4;1;z\r-   z]9;4;2;z
]9;4;2;\indeterminatez
]9;4;3;\pausedz]9;4;4;z
]9;4;4;\Tr&  )r  r'  )rA   r  r   sequencerD   rD   rE   _emit_progress  s$   $



z%TerminalProgressPlugin._emit_progressr  r%   c                 C  s   || _ | d d S )Nr  )r   r  )rA   r  rD   rD   rE   r    s   z*TerminalProgressPlugin.pytest_sessionstartc                 C  s.   | j d usJ | j jdkr| dd d S d S )Nr   r  )r   rp  r  r   rD   rD   rE   r    s   z/TerminalProgressPlugin.pytest_collection_finishr   r$   c                 C  sp   |j rd| _|jdkrd S | jd usJ | jj}|dkr6| jj}t|d | d}| | jr0dnd| d S d S )NTcallr   r  r-   r  )	r&   r  r   r   rp  r  r  minr  )rA   r   r  reportedr   rD   rD   rE   ro    s   
z/TerminalProgressPlugin.pytest_runtest_logreportc                 C  s   |  d d S )Nr  )r  r   rD   rD   rE   r    r   z+TerminalProgressPlugin.pytest_sessionfinish)r  r   r<   r=   rS   )r  r  r   r3  r<   r=   ru  rs  rt  )rT   rU   rV   rW   r@   r  r   r  r  ro  r  rD   rD   rD   rE   r    s    

&r  )rF   r   r<   r=   )r   r   r<   r=   )r   r   r<   r5   )r   r"   r<   r   )rx  r   r   r   ri  r"   )r  r5   r   r5   rm  r   r<   r;   )
r   r   ri  r"   rx  r   r~  r  r<   r5   )r   r	   r(   r  r<   r  )ra   r   r  r5   r<   r  )r<   r  )r  r  r<   r5   )r   r$   r<   r5   )ZrW   
__future__r   argparsecollectionsr   collections.abcr   r   r   r   dataclassesr  	functoolsr   r  pathlibr	   r   r   r"  typingr
   r   r   r   r   r   r   r,   r  r   r   r   r   _pytest._coder   _pytest._code.coder   _pytest._ior   _pytest._io.wcwidthr   _pytest._version_pytest.compatr   r   r   r   r   r   _pytest.config.argparsingr   _pytest.nodesr   r   _pytest.pathlibr    r!   _pytest.reportsr"   r#   r$   _pytest.mainr%   r  rd  r   Actionr1   rY   r   r   r   r   	dataclassr   r   rO  re  rI  rV  rG  rH  rn  r  r<  r  rd  r  rD   rD   rD   rE   <module>   s   %
 

        
Z



$ 



	
