????

Your IP : 3.147.70.194


Current Path : /opt/cloudlinux/venv/lib/python3.11/site-packages/_pytest/__pycache__/
Upload File :
Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/_pytest/__pycache__/terminal.cpython-311.pyc

�

�܋f����dZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
mZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddl Z ddl!Z"ddl"m#Z#ddl"m$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2ddl1m3Z3dd l1m4Z4dd!l1m5Z5dd"l6m7Z7dd#l8m9Z9dd$l8m:Z:dd%l;m<Z<dd&l;m=Z=dd'l>m?Z?dd(l>m@Z@dd)l>mAZAerdd*lBmCZCdd+lDmEZEd,ZFd-ZGd.ZHGd/�d0ejI��ZJGd1�d2e��ZKd3e7d4dfd5�ZLd6e3d4dfd7�ZMd6e3d4eNfd8�ZOe5d9�:��d;e?d4eeNeNeNffd<���ZPejQGd=�d>����ZRe0Gd?�d@����ZSdAe*d6e3dBe?fdC�ZTdDeNdEeNdFeUd4eeNfdG�ZVd6e3dBe?dAe*dHeeNeWfd4eNf
dI�ZXdJedKee@d4eeeUeNeeUeNffdL�ZYdMdMdNdOdP�ZZdNZ[dQeUdReNd4eeUeNffdS�Z\d4eeNfdT�Z]dUe^d4eNfdV�Z_d;eAd4eNfdW�Z`dS)XzsTerminal 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
���eZdZdZ			ddeededededeed	df�fd
�
Z		dde
jde
jd
e
eeedfdeed	df
d�Z�xZS)�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�V��t���||d|||���dS)Nr)r7r8�nargsr9r:r;)�super�__init__)�selfr7r8r9r:r;�	__class__s      ��a/builddir/build/BUILD/cloudlinux-venv-1.0.6/venv/lib/python3.11/site-packages/_pytest/terminal.pyr@zMoreQuietAction.__init__VsB���	�����)������
	�	
�	
�	
�	
�	
��parser�	namespace�values�
option_stringc��t||jd��dz
}t||j|��t|dd��dz|_dS)Nr��quiet)�getattrr8�setattrrK)rArErFrGrH�	new_counts      rC�__call__zMoreQuietAction.__call__gsL���I�t�y�!�4�4�q�8�	��	�4�9�i�0�0�0�!�)�W�a�8�8�1�<�	���rD)NFN�N)�__name__�
__module__�__qualname__�__doc__r�str�object�boolrr@�argparse�ArgumentParser�	NamespacerrO�
__classcell__)rBs@rCr6r6Os�����������"�

�
� ��
�
��
��	
�
�
��s�m�

�
�
�
�
�
�
�
�,(,�
=�
=��'�
=��%�
=��c�8�F�+�T�1�2�	
=�
 ��}�
=�
�
=�
=�
=�
=�
=�
=�
=�
=rDr6c�b�eZdZUdZeed<eed<eeeeeee	fffed<dS)�TestShortLogReportuGUsed 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)
rQrRrSrTrU�__annotations__rrr
rW�rDrCr]r]tsY����������M�M�M��K�K�K�
��U�3���T�	� 2�2�3�3�
4�4�4�4�4�4rDr]rEr<c	�|�|�ddd���}|�ddddd	d
���|�dd
ddd���|�dd
ddd���|�ddtdd	d���|�dd	tdd���|�dddtdd���|�d d!dd"d
d#�$��|�d%d&d
d'dd(�)��|�d*d+d'd,�-��|�d.d/dd0d1gd2�d3�4��|�d5dd6gd7�d8d9�:��|�d;d<d
dd=�>��|�d?d@dd@d1gdA�dB�4��|�dCdDdDdEgdF�G��|�dHdIdJ�K��dS)LNzterminal reporting�	Reporting�general)�afterz-vz	--verbose�countr�verbosezIncrease verbosity)�actionr9r8r;z--no-header�
store_trueF�	no_headerzDisable headerz--no-summary�
no_summaryzDisable summaryz-qz--quietzDecrease verbosityz--verbosityzSet verbosity. Default: 0.)r8�typer9r;z-r�store�reportchars�charsaShow 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').)rir8r9�metavarr;z--disable-warningsz--disable-pytest-warnings�disable_warningszDisable warnings summary)r9r8rir;z-lz--showlocals�
showlocalsz/Show locals in tracebacks (disabled by default))rir8r9r;z--no-showlocals�store_falsezFHide locals in tracebacks (negate --showlocals passed through addopts))rir8r;z--tb�style�tbstyle�auto)rw�long�short�no�line�nativez5Traceback print mode (auto/long/short/line/native/no))rqrir8r9�choicesr;z--show-capture�showcapture)rz�stdout�stderr�log�allr�zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)rir8r}r9r;z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))rir9r;z--color�color)�yesrzrwz#Color terminal output (yes/no/auto)z--code-highlightr�rzzSWhether code should be highlighted (only if --color is also enabled). Default: yes.)r9r}r;�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)r;r9)�getgroup�
_addoptionr6�int�_REPORTCHARS_DEFAULT�addini)rE�groups  rC�pytest_addoptionr��s���O�O�0�+�Y�O�O�O�E�	�������
�
!�
����
������
�
�����
������
�
�����
�������
�
!�
����
����
�
��
)�����
�����
�$��>�
����
����#��
��
'�
����
������
��
>�
����
�����
�
U�	����
������
��A�A�A�
D�����
�����
�8�8�8���
����
�������
;�����
������
��%�%�%�
2�����
�������
��	�����M�M��)�������rD�configc����t|tj���|j��d��|jjs|jjr'�fd�}|jj	�
d|��dSdS)N�terminalreporterc���d�tt|����}��d|z��dS)N� z[traceconfig] )�join�maprU�
write_line)�tags�args�msg�reporters   �rC�mywriterz"pytest_configure.<locals>.mywriter	s<����(�(�3�s�D�>�>�*�*�C���� 0�3� 6�7�7�7�7�7rDz
pytest:config)�TerminalReporter�sysr�
pluginmanager�register�option�debug�traceconfig�trace�root�setprocessor)r�r�r�s  @rC�pytest_configurer�s�������
�3�3�H�
��!�!�(�,>�?�?�?�
�}��B�f�m�7�B�	8�	8�	8�	8�	8�	���&�&���A�A�A�A�A�
B�BrDc�$�|jj}ddh}d}|D]>}||vr|���}|dkrd}�#|dkrd}�,|dkrd}�5||vr||z
}�?|jjs
d	|vrd	|z}n&|jjrd	|vr|�d	d��}|S)
N�F�S��a�sxXEf�A�PpsxXEf�N�w)r�ro�lowerrr�replace)r�ro�old_aliases�
reportopts�chars     rC�getreportoptr�s����}�0�K���*�K��J��
�
���;����:�:�<�<�D��3�;�;� �J�J�
�S�[�[�"�J�J�
�S�[�[��J�J�
��
#�
#��$��J���=�)�1�c��.C�.C��:�%�
�
�	��	'�1�C�:�,=�,=��'�'��R�0�0�
��rDT��trylast�reportc��d}|jrd}n	|jrd}|j}|jdvr
|dkrd}d}|||���fS)Nr��.�s)�collect�setup�teardownr,r3�E)r-r.�outcome�when�upper)r�r_r�s   rC�pytest_report_teststatusr�)se��
�F�
�}�����	������>�G�
�{�6�6�6�7�h�;N�;N������F�G�M�M�O�O�+�+rDc��eZdZUdZeed<dZeeed<dZee	ee
fed<dZeed<de
d	eefd
�ZdS)�
WarningReportaoSimple 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��|jr|jS|jr8|j\}}t|jjt|����}|�d|��SdS)zSReturn the more user-friendly information about the location of a warning, or None.�:N)r�r�r&�invocation_params�dirr%)rAr��filename�linenum�relpaths     rC�get_locationzWarningReport.get_locationKs`���;�	��;���?�	*� $���H�g�!�&�":�">��X�@V�@V�W�W�G��)�)��)�)�)��trD)rQrRrSrTrUrar�rr�rr�r�r	rr�rbrDrCr�r�9s�����������L�L�L� �F�H�S�M� � � �,0�J���s�C�x��)�0�0�0�&*��8�*�*�*��6��h�s�m������rDr�c
���eZdZdxdedeeddfd�Zdyd�Zede	fd���Z
edefd	���Zedefd
���Z
edefd���Zedefd���Zejd
eeddfd���Zedefd���Zdedefd�Zdededdfd�Zdzdededdfd�Zd{d�Zdddd�deded e	d!ededdfd"�Zdd#�dedededdfd$�Zd{d%�Zd&eeefdeddfd'�Zd&ededdfd(�Z		d|d)ed*eed+ee	deddf
d,�Zd}d*ed)ed.eddfd/�Zd0ed.eddfd1�Z d2ed3e!e"ddfd4�Z#d5e$defd6�Z%d7e&j'deddfd8�Z(d9e)ddfd:�Z*d3e!e+ddfd;�Z,ded<e-eee	efddfd=�Z.d>e/ddfd?�Z0edefd@���Z1deddfdA�Z2defdB�Z3d{dC�Z4ede	fdD���Z5d{dE�Z6d>e7ddfdF�Z8d~dGeddfdH�Z9e:dI�J��ddM���Z;dNe!eee!efddfdO�Z<dede=efdP�Z>ddQ�Z?d3e!e+ddfdR�Z@e:dI�S��dKdLdTee	eAffdU���ZBe:dI�S��deCdVfdW���ZDdXeEeFddfdY�ZGd{dZ�ZHd{d[�ZIded\ed]ee	d^edef
d_�ZJd`�ZKda�ZLdbefdc�ZMd{dd�ZNd{de�ZOdede=e/fdf�ZPdeddfdg�ZQdhe/ddfdi�ZRd{dj�ZSd{dk�ZTdheUddfdl�ZVd{dm�ZWd{dn�ZXde-ee=effdo�ZYdpedefdq�ZZd{dr�Z[de-e=e-ee\eeffeffds�Z]dtede=e"fdu�Z^de-e=e-ee\eeffeffdv�Z_de-e=e-ee\eeffeffdw�Z`dS)�r�Nr��filer<c��ddl}||_d|_d|_d|_i|_d|_d|_|jj	|_
|�tj}|j�
||��|_|jj|_d|_t%|��|_|jj|_|���|_t-��|_|���|_d|_d|_d|_dS�Nr)�_pytest.configr��
_numcollected�_session�_showfspath�stats�_main_color�_known_typesr�r��	startpathr�r�create_terminal_writer�_tw�	fullwidth�
_screen_width�
currentfspathr�ro�	hasmarkup�isatty�set�_progress_nodeids_reported�_determine_show_progress_info�_show_progress_info�_collect_report_last_write�_already_displayed_warnings�_keyboardinterrupt_memo)rAr�r��_pytests    rCr@zTerminalReporter.__init__Xs�������������+/��
�+/���+-��
�*.���15����1�5����<��:�D��>�8�8���F�F���!�X�/���:>���'��/�/�����+����k�k�m�m���47�E�E��'�#'�#E�#E�#G�#G�� �;?��'�:>��(�@D��$�$�$rD�#Literal['progress', 'count', False]c��|j�dd��dkr |j�d��dkrdS|j�dd��rdS|j�d��}|dks|dkrdS|dkrdSdS)	zRReturn whether we should display progress information based on the current config.�capturerzr�zprogress-even-when-capture-noF�	setupshowr�rg)r��	getoption�getini)rA�cfgs  rCr�z.TerminalReporter._determine_show_progress_infors���

�K�!�!�)�T�2�2�d�:�:���"�"�#9�:�:�.�/�/��5��;� � ��e�4�4�	��5��;�%�%�&<�=�=���*����'F� F� F��:�
�G�^�^��7��5rDc�(�|jjj}|SrP)r�r�rh)rA�	verbositys  rCr�zTerminalReporter.verbosity�s����+�3�	��rDc��|jdkSr��r��rAs rC�
showheaderzTerminalReporter.showheader�s���~��"�"rDc�>�t|jjj��SrP)rWr�r�rkr�s rCrkzTerminalReporter.no_header�s���D�K�&�0�1�1�1rDc�>�t|jjj��SrP)rWr�r�rlr�s rCrlzTerminalReporter.no_summary�s���D�K�&�1�2�2�2rDc�4�|j�|jdkS|jSr�)r�r�r�s rC�
showfspathzTerminalReporter.showfspath�s!����#��>�Q�&�&���rD�valuec��||_dSrP)r�)rAr�s  rCr�zTerminalReporter.showfspath�s�� ����rDc��|jdkSr�r�r�s rC�showlongtestinfoz!TerminalReporter.showlongtestinfo�s���~��!�!rDr�c�F�ddd��||��}||jvS)N�xr�)r0r.)�getro)rAr�s  rC�hasoptzTerminalReporter.hasopt�s-���3�/�/�3�3�D�$�?�?���t�'�'�'rDr��markupc��|jj|�d��dz}|j�||jkrt|j�|jr|���||_t
|j|��}|j�	��|j�
|dz��|jj
|fddi|��dS)N�::rr��flushT)r��rootpath�splitr�r��)_write_progress_information_filling_spacer&r�r�r{�write)rAr��resr�fspath�	relfspaths      rC�write_fspath_resultz$TerminalReporter.write_fspath_result�s�����%����T�(:�(:�1�(=�=����%��4�3E�)E�)E��!�-�$�2J�-��>�>�@�@�@�!'�D��#�D�N�F�;�;�I��H�M�M�O�O�O��H�N�N�9�s�?�+�+�+�����s�1�1�$�1�&�1�1�1�1�1rDr��prefix�extrac���|j|kr:|j���||_|j�|��|r|jj|fi|��d|_dSdS)N���)r�r�r{r
)rArr�kwargss    rC�write_ensure_prefixz$TerminalReporter.write_ensure_prefix�sw�����'�'��H�M�M�O�O�O�!'�D���H�N�N�6�"�"�"��	$��D�H�N�5�+�+�F�+�+�+�!#�D����	$�	$rDc�X�|jr"|j���d|_dSdSrP)r�r�r{r�s rC�ensure_newlinezTerminalReporter.ensure_newline�s4����	&��H�M�M�O�O�O�!%�D����	&�	&rDF��
)r	�margin�line_sep�contentr	rrc���|jj}|�tjd|z|z|j|z
dd�����}||d�}|jj|fd|i|��dS)z+Wrap message with margin for progress info.r�TF)�width�drop_whitespace�replace_whitespaceNr	)r��width_of_current_liner��textwrap�wrapr�r
)rArr	rrrr#�wrappeds        rC�
wrap_writezTerminalReporter.wrap_write�s���!%�� >���-�-��M��+�+�g�5��(�6�1� $�#(�	
�
�
�
�
���/�0�0�1������w�6�6�e�6�v�6�6�6�6�6rD)r	c�0�|jj|fd|i|��dS)Nr	)r�r
)rArr	rs    rCr
zTerminalReporter.write�s)������w�6�6�e�6�v�6�6�6�6�6rDc�8�|j���dSrP)r�r	r�s rCr	zTerminalReporter.flush�s����������rDr{c��t|t��st|d���}|���|jj|fi|��dS)Nr�)�errors)�
isinstancerUrr�r{)rAr{rs   rCr�zTerminalReporter.write_line�sZ���$��$�$�	/��t�I�.�.�.�D����������
�d�%�%�f�%�%�%�%�%rDc���|�dd��}|r%|jjt|��z
dz
}d|z}nd}t	|��}|jjd|z|zfi|��dS)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.
        �eraseFrJr�r��
N)�popr�r��lenrUr
)rAr{rr.�
fill_count�fills      rC�rewritezTerminalReporter.rewrite�s����
�
�7�E�*�*���	���+�c�$�i�i�7�!�;�J���#�D�D��D��4�y�y������t�d�{�T�)�4�4�V�4�4�4�4�4rD�sep�titler�c�X�|���|jj|||fi|��dSrP)rr�r5)rAr5r6r�rs     rC�	write_sepzTerminalReporter.write_sep�s<��	
����������S�%��5�5�f�5�5�5�5�5rD�=�kwc�.�|jj||fi|��dSrP)r�r5)rAr6r5r:s    rC�sectionzTerminalReporter.sections&������S�%�&�&�2�&�&�&�&�&rDr�c�,�|jj|fi|��dSrP)r�r{)rAr�r:s   rCr{zTerminalReporter.lines$�����
�c� � �R� � � � � rDr^�itemsc��||jv}|j�|g���|��|r|���dSdSrP)r��
setdefault�extend�_set_main_color)rAr^r>�set_main_colors    rC�
_add_statszTerminalReporter._add_statss^��!���3���
���h��+�+�2�2�5�9�9�9��	#�� � �"�"�"�"�"�	#�	#rD�excreprc��t|���d��D]}|�d|z���dS)NrzINTERNALERROR> T)rUrr�)rArEr{s   rC�pytest_internalerrorz%TerminalReporter.pytest_internalerror
sE����L�L�&�&�t�,�,�	6�	6�D��O�O�-��4�5�5�5�5��trD�warning_messagec��ddlm}|j|jf}||��}t	|||���}|�d|g��dS)Nr)�warning_record_to_str)r�r�r�r2)�_pytest.warningsrJr��linenor�rD)rArHr�rJr�r��warning_reports       rC�pytest_warning_recordedz(TerminalReporter.pytest_warning_recordedsp��
	;�:�:�:�:�:�$�-��/E�E�
�'�'��8�8��&�!�7�6�
�
�
��	
���
�^�$4�5�5�5�5�5rD�pluginc�`�|jjjrd|��}|�|��dSdS)NzPLUGIN registered: )r�r�r�r�)rArOr�s   rC�pytest_plugin_registeredz)TerminalReporter.pytest_plugin_registered!sC���;��)�	!�0��0�0�C�
�O�O�C� � � � � �	!�	!rDc�2�|�d|��dS)Nr/)rD)rAr>s  rC�pytest_deselectedz"TerminalReporter.pytest_deselected)s������e�,�,�,�,�,rD�locationc���|jr:|j|g|�R�}|�|d��|���dS|jr,|�|d��|���dSdS)Nr�)r�
_locationlinerr	r�r)rAr�rTr{s    rC�pytest_runtest_logstartz(TerminalReporter.pytest_runtest_logstart,s���
� �	�%�4�%�f�8�x�8�8�8�D��$�$�T�2�.�.�.��J�J�L�L�L�L�L�
�_�	��$�$�V�R�0�0�0��J�J�L�L�L�L�L�	�	rDr�c��d|_|}t|jj�||j����}|j|j|j}}}t|t��sd}n|\}}|�
||g��|s|sdSt|d��}|�Ft|d��}	|jr|	sddi}n(|jr|	rddi}n|j
rddi}n|jrddi}ni}|jdkr|jj|fi|���n�|j�|j��|j|jg|j�R�}
|s�|j|
|fi|��|jst|d��r�t1|��}|jjjd	kr>|jj|jjz
t;d
��z
dz
}t=d||��}
nd
|�d�}
|r|
�|�|
��|j r|�!��n�|�"��|j�d|j#j$j%z��|j r2|j�|�&��dzd���n|j�d��|jj|fi|��|j�d|
z��d|_'|�(��dS)NT)r�r��node�wasxfail�green�yellow�redr�� [100%]rJz ({})z (�)z[%s]r�)�cyanr))�
_tests_ranr]r��hookr�r^r_r`r,�tuplerD�hasattrr-r,r.r�r�r
r��addr�rVrTr�_get_raw_skip_reasonr�rhr�r#r1�_format_trimmedr'r�rrrY�gateway�id�!_get_progress_information_messager�r	)rAr��reprr^r_r`r�
running_xdist�	was_xfailr{�reason�available_width�formatted_reasons              rC�pytest_runtest_logreportz)TerminalReporter.pytest_runtest_logreport9sW������� �
�[�
�
6�
6�c�$�+�
6�
V�
V�
��"%��s�z�3�8�$�&���$��&�&�	 ��F�F��L�D�&�����3�%�(�(�(��	�d�	��F���V�,�,�
��>���
�3�3�I��z�	
�)�	
�!�4������
�	�
�"�D�)�����
��������
�"�D�)������>�Q����D�H�N�6�,�,�V�,�,�,�,��+�/�/��
�;�;�;�%�4�%�c�j�@�3�<�@�@�@�D� �
(�(��(��t�>�>�v�>�>�>��;�:�'�&�*�"=�"=�:�1�#�6�6�F��{�)�1�A�5�5�!�X�/�$�(�2P�P�!�)�n�n�-�� �(�
,;�#�V�_�,�,�(�(�,:��>�>�>�(��:�"2�">����(8�9�9�9��+�E��B�B�D�D�D���#�#�%�%�%�����v���(8�(;�;�<�<�<��+�(��H�N�N��>�>�@�@�3�F�T�#������H�N�N�3�'�'�'�����t�.�.�v�.�.�.�����s�T�z�*�*�*�%'��"��
�
�����rDc�X�|j�J�t|j��|jjkSrP)r�r1r��testscollectedr�s rC�
_is_last_itemzTerminalReporter._is_last_item}s+���}�(�(�(��4�2�3�3�t�}�7S�S�SrDc���|jsJ�|jdkr�|jr�|jdkr#|jj}t	d|�d|�d���}nt	d��}|j�|��|jr|���dS|�	��\}}|j
}||zdz|jk}|r2|���}|j
j|dzfi|d	i��dSdSdSdS)
Nrrg� [�/�]r_rJrT)r�r�r�rtr1r�rfrur�_get_main_color�_width_of_current_liner�rkr�r
)	rAr��	num_tests�progress_length�
main_color�_r��	past_edger�s	         rC�pytest_runtest_logfinishz)TerminalReporter.pytest_runtest_logfinish�s8���}���}��>�Q���4�#;���'�7�2�2� �M�8�	�"%�&C�9�&C�&C�y�&C�&C�&C�"D�"D���"%�i�.�.���+�/�/��7�7�7��!�
E��>�>�@�@�@�@�@� $� 4� 4� 6� 6�
�
�A��/����/�!�3�t�7I�I�	��E��@�@�B�B�C�"�D�H�N�3��:�D�D�*�d�1C�D�D�D�D�D�#����E�ErDc�Z�|jsJ�|jj}|jdkr[|rP|j}dt	t|�����d�}d|�d�}|�t	|��|��Sd|�d|�d�S|r-d	�t	|j��d
z|z��SdS)Nrgz{:zd}rwz/{}]z [ z / z ]z	 [{:3d}%]�dr_)r�rtr�r�r1rU�format)rA�	collectedr��counter_format�
format_strings     rCrkz2TerminalReporter._get_progress_information_message�s����}���}��M�0�	��#�w�.�.��
F��:��!?�s�3�y�>�>�':�':�!?�!?�!?�� ;�^� ;� ;� ;�
�$�+�+�C��M�M�9�E�E�E�4��4�4�y�4�4�4�4��
�"�)�)���7�8�8�3�>�)�K�����9rDc���|���\}}|���}|j}|jj|z
dz
}|j|�|��fddi|di��dS)NrJr	T)rzrkr{r�r�r
�rjust)rAr�rr�r�r3s      rCrz:TerminalReporter._write_progress_information_filling_space�sw���'�'�)�)���q��4�4�6�6���'���x�!�A�%��)����
�3�9�9�T�?�?�@�@�$�@�5�$�-�@�@�@�@�@rDc��|jjS)z%Return the width of the current line.)r�r#r�s rCr{z'TerminalReporter._width_of_current_line�s���x�-�-rDc��|jrI|jjjdkr2|�ddd���tj��|_dSdS|jjjdkr|�ddd���dSdS)Nrzcollecting ... T)r	�boldrJ)r�r�r�rhr
r�timer�r�s rC�pytest_collectionz"TerminalReporter.pytest_collection�s����;�	A��{�!�)�Q�.�.��
�
�,�D�t�
�D�D�D�28�+�-�-��/�/�/�/�.��[�
�
'�1�
,�
,��J�J�(��4�J�@�@�@�@�@�-�
,rDc��|jr|�d|g��n|jr|�d|g��d�|jD��}|xjt|��z
c_|jr|���dSdS)Nr3r.c�<�g|]}t|t���|��Srb)r,r#��.0rs  rC�
<listcomp>z9TerminalReporter.pytest_collectreport.<locals>.<listcomp>�s'��A�A�A�q�Z��4�-@�-@�A��A�A�ArD)r,rDr.�resultr�r1r��report_collect)rAr�r>s   rC�pytest_collectreportz%TerminalReporter.pytest_collectreport�s����=�	1��O�O�G�f�X�.�.�.�.�
�^�	1��O�O�I��x�0�0�0�A�A�F�M�A�A�A�����c�%�j�j�(����;�	"����!�!�!�!�!�	"�	"rDrc��|jjjdkrdS|s6tj��}|j�|j|tz
krdS||_t|j�	dg����}t|j�	dg����}t|j�	dg����}|j
|z
}|rdnd}|t|j
��dz|j
dkrd	nd
zz
}|r|d||dkrd
nd	fzz
}|r|d|zz
}|r|d
|zz
}|j
|kr|d|zz
}|jr3|�
|dd���|r|�d��dSdS|�|��dS)Nrr3r.r/z
collected zcollecting z itemrJr�r�z
 / %d error%sz / %d deselectedz
 / %d skippedz / %d selectedT)r�r.r)r�r�rhrr�r��REPORT_COLLECTING_RESOLUTIONr1r�rr�rUr�r4r
r�)rAr�tr+r.r/�selectedr{s        rCr�zTerminalReporter.report_collect�s����;��%��)�)��F��	0���
�
�A��/�;��3�a�:V�6V�V�V���./�D�+��T�Z�^�^�G�R�0�0�1�1���d�j�n�n�Y��3�3�4�4��������b�9�9�:�:�
��%�
�2��$�7�|�|�-�����"�#�#�g�-�t�7I�Q�7N�7N���TW�X�	
���	K��O�v�f��k�k�s�s�r�&J�J�J�D��	4��&��3�3�D��	.��O�g�-�-�D����(�(��$�x�/�/�D��;�	"��L�L��D��L�5�5�5��
!��
�
�4� � � � � �
!�
!�
�O�O�D�!�!�!�!�!rDTr��sessionr+c�R�||_tj��|_|jsdS|�ddd���t
j��}|j�sKdtj�d|��}ttdd��}|rBd�tt|dd	�����}|d
|�d|d	�d�z
}|d
�tjjt$j��z
}|jdks,|jjjst|jjdd��r|dttj��zz
}|�|��|jj�|j|j���}|�|��dSdS)Nr9ztest session startsT�r�z	platform z -- Python �pypy_version_infor��z[pypy-�-ryz, pytest-{}, pluggy-{}r�pastebinz -- )r��
start_path)r�rr��_sessionstarttimer�r8�platform�python_versionrkr�rLr�r�rUr�r��_version�version�pluggy�__version__r�r�r�r��
executabler�rc�pytest_report_headerr��_write_report_lines_from_hooks)rAr��verinfor�r��liness      rC�pytest_sessionstartz$TerminalReporter.pytest_sessionstart�s�����
�!'��������	��F����s�1���=�=�=��)�+�+���~�	7�@�c�l�@�@�w�@�@�C� '��-@�$� G� G�� �
B��(�(�3�s�,=�b�q�b�,A�#B�#B�C�C���A��A�A�*;�A�*>�A�A�A�A���+�2�2�� �(�&�*<���
�C����"�"��;�%�+�#��4�;�-�z�4�@�@�#��v��C�N� 3� 3�3�3���O�O�C� � � ��K�$�9�9��{�t�~�:���E�
�/�/��6�6�6�6�6�'	7�	7rDr�c��t|��D]G}t|t��r|�|���-|D]}|�|����HdSrP)�reversedr,rUr�)rAr��
line_or_linesr{s    rCr�z/TerminalReporter._write_report_lines_from_hooksss��&�e�_�_�	*�	*�M��-��-�-�
*����
�.�.�.�.�)�*�*�D��O�O�D�)�)�)�)�*�		*�	*rDc��d|j��g}|jr0|�dt|j|j��z��|jt
jjkrP|�d��}|�d�	d�
|������|j���}|r8|�dd�
t|����z��|S)Nz	rootdir: zconfigfile: �	testpathsz
testpaths: {}�, zplugins: %s)r
�inipath�appendr&�args_sourcer�
ArgsSource�	TESTPATHSr�r�r�r��list_plugin_distinfo�_plugin_nameversions)rAr�r�r��
plugininfos     rCr�z%TerminalReporter.pytest_report_headers���/�f�o�/�/�0���>�	Y��M�M�.�;�v����+W�+W�W�X�X�X����!2�!<�<�<�#)�=�=��#=�#=�I��M�M�/�0�0����9�1E�1E�F�F�G�G�G��)�>�>�@�@�
��	W��M�M�-�$�)�)�4H��4T�4T�*U�*U�U�V�V�V��
rDc�D�|�d��|jj�|j|j|j���}|�|��|j�d��r�|jrI|jjj	dkr|j
�d��|�|j��|j
�d��}|r<|j
�dd��|D] }|�|j
���dSdSdS)	NT)r�r�r>�collectonly���r�r,�!zcollection failures)r�r�rc�pytest_report_collectionfinishr�r>r�r�r�rhr�r{�_printcollecteditemsr�rr5�
toterminal)rAr�r�r,rls     rC�pytest_collection_finishz)TerminalReporter.pytest_collection_finish!s0�����D�!�!�!��� �?�?��;��~��-�@�
�
��
	
�+�+�E�2�2�2��;� � ��/�/�
	-��}�
9��;�%�-��2�2��H�M�M�"�%�%�%��)�)�'�-�8�8�8��Z�^�^�H�-�-�F��
-�����S�"7�8�8�8�!�-�-�C��N�N�4�8�,�,�,�,�
	-�
	-�
-�
-�-�-rDc	���|jjjdkr�|jjjdkr`td�|D����}t	|�����D]$\}}|j�d||fz���%n$|D]!}|j�|j���"dSg}d}|D�]=}|�	��dd�}|r2||dt|���krn|���|�2|t|��d�D]�}	|�|	��t|��dz
dz}|j�|�|	����|jjjdkrst|	dd��}
|
rtj|
��nd}|rH|���D]3}|j�d	�|dz|�����4�Ӑ�?dS)
Nrr�c3�XK�|]%}|j�dd��dV��&dS�rrJrN)r�r)r��items  rC�	<genexpr>z8TerminalReporter._printcollecteditems.<locals>.<genexpr>:s9���� Q� Q�4���!2�!2�4��!;�!;�A�!>� Q� Q� Q� Q� Q� QrDz%s: %dr�rJ�  �objz{}{})r�r�rhr�sortedr>r�r{r��	listchainr1r0r�rL�inspect�getdoc�
splitlinesr�)
rAr>�counts�namergr��stack�indent�needed_collectors�colr��docr{s
             rCr�z%TerminalReporter._printcollecteditems7s0���;��%��)�)��{�!�)�B�.�.� � Q� Q�5� Q� Q� Q�Q�Q��#)�&�,�,�.�.�#9�#9�<�<�K�D�%��H�M�M�(�d�E�]�":�;�;�;�;�<�"�/�/�D��H�M�M�$�+�.�.�.�.��F������	N�	N�D� $��� 0� 0���� 4���
��-�l��E�
�
�l�;�;�;���	�	�����
�)��U�����6�	
N�	
N�����S�!�!�!��e�*�*�q�.�D�0����
�
��.��.�.�/�/�/��;�%�-��2�2�!�#�u�d�3�3�C�14�>�'�.��-�-�-�$�C��N�$'�N�N�$4�$4�N�N�D� �H�M�M�&�-�-���
�t�*L�*L�M�M�M�M��	
N�
	N�	NrD)�hookwrapper�
exitstatusc#�K�dV�}|���|j�d��tjtjtjtjtjf}||vr.|j	s'|j
j�|||j
���|j
r*|�dt|j
��d���|tjkr|���d|_n1|jr*|�dt|j��d���|���dS)Nr�)r�r�r�r�T)r])�
get_resultr�r{r �OK�TESTS_FAILED�INTERRUPTED�USAGE_ERROR�NO_TESTS_COLLECTEDrlr�rc�pytest_terminal_summary�
shouldfailr8rU�_report_keyboardinterruptr��
shouldstop�
summary_stats)rAr�r�r��summary_exit_codess     rC�pytest_sessionfinishz%TerminalReporter.pytest_sessionfinishTs?�����%�%����������
�
�b�����K��!�� �� ��'�
���+�+�+�D�O�+��K��4�4�!%�*�T�[�
5�
�
�
���	C��N�N�3��G�$6� 7� 7�T�N�B�B�B���-�-�-��*�*�,�,�,�+/�D�(�(�
�
�	C��N�N�3��G�$6� 7� 7�T�N�B�B�B��������rD)NNNc#�K�|���|���|���|���dV�|���|���dSrP)�summary_errors�summary_failures�summary_warnings�summary_passes�short_test_summaryr�s rCr�z(TerminalReporter.pytest_terminal_summaryos�����������������������������
�������!�!�!��������rD�excinfoc�<�|�d���|_dS)NT)�funcargs)�getreprr�)rAr�s  rC�pytest_keyboard_interruptz*TerminalReporter.pytest_keyboard_interruptzs��'.�����'E�'E��$�$�$rDc�@�|j�|���dSdSrP)r�r�r�s rC�pytest_unconfigurez#TerminalReporter.pytest_unconfigure}s+���'�3��*�*�,�,�,�,�,�4�3rDc�N�|j}|�J�|j�J�|jj}|�d|��d|vrj|jjjr|�|j��dS|j�|j��|j�	dd���dSdS)Nr��KeyboardInterruptz@(to show a full traceback on KeyboardInterrupt use --full-trace)T)r\)
r��	reprcrashr�r8r�r��	fulltracer�r�r{)rArEr�s   rCr�z*TerminalReporter._report_keyboardinterrupt�s����.���"�"�"�� �,�,�,���'�����s�C� � � ��#�%�%��{�!�+�
��"�"�4�8�,�,�,�,�,��!�,�,�T�X�6�6�6���
�
�V��������&�%rDrrL�domainc�:���dtdtf��fd�}|r|||��}�jdkre|�d��d|�dtj��kr(|dt
�jt|����zz
}nd	}|d
zS)Nr�r<c�2���j�|��}�ry|����rd|dt����}��d��}|d�dd��|d<|d�|��z
}|S)N�[rr�r)r��cwd_relative_nodeid�endswithr1rr�r�)r�r{rGr�rAs   ��rC�mkrelz-TerminalReporter._locationline.<locals>.mkrel�s�����;�2�2�6�:�:�D��
)�$�-�-��/�/�
)��N�s�6�{�{�l�N�+�����c�*�*��"�1�I�-�-�c�4�8�8��q�	������(�(�(���KrDr^rr�\z <- z
[location]r�)	rUr�rr�r�SEPr&r�r)rAr�rrLr�rrs`   `  rCrVzTerminalReporter._locationline�s�����	�#�	�#�	�	�	�	�	�	�	��	��%��-�-�C��~��"�"�v�|�|�D�'9�'9�!�'<�����e�i�A�A�(�(��v��D�N�D��L�L� I� I�I�I����C��S�y�rDc��|j}|r|SdS)Nztest session)�	head_line)rArlrs   rC�_getfailureheadlinez$TerminalReporter._getfailureheadline�s���M�	��	����~rDc��	t|jj��S#t$r2	t|j��dd�cYS#t$rYYdSwxYwwxYw)N�2r�)rU�longreprr��AttributeError)rArls  rC�
_getcrashlinezTerminalReporter._getcrashline�s}��	��s�|�-�.�.�.���	�	�	�
��3�<�(�(��"��-�-�-�-��!�
�
�
��r�r�r�
����	���s,��
A�A�A�
A�A�A�Ar�c�L�d�|j�|d��D��S)Nc�2�g|]}t|d���|��S)�	_pdbshown)rer�s  rCr�z/TerminalReporter.getreports.<locals>.<listcomp>�s'��S�S�S�a�7�1�k�;R�;R�S��S�S�SrDrb�r�r)rAr�s  rC�
getreportszTerminalReporter.getreports�s&��S�S�4�:�>�>�$��3�3�S�S�S�SrDc�����d���r��j�d��}|sdS�jdu}|r|�jd�}n|}t	|���_|sdSi}|D]0}|�|jg���|���1dttdtf�fd�}|rdnd}��d|d	d
���|���D]�\}}	||	��}
|
rb�j
�|
��|���}d�d
�|D����}|���}n|���}�j
�|���j
������j
�d��dSdS)Nr�r2�reportsr<c�~��g}|D]3}|��j��}|r|�|���4t|��dkr(d�tt|����Std�|D����}d�d�|���D����S)N�
rc3�hK�|]-}t|���dd��dV��.dSr�)rUr)r��locs  rCr�zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>�sL����-�-�36�C��H�H�N�N�4��+�+�A�.�-�-�-�-�-�-rDc3�ZK�|]&\}}d�|||dkrdnd��V��'dS)z{}: {} warning{}rJr�r�N)r�)r��k�vs   rCr�zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>�sX����!�!���1�'�-�-�a��1�q�5�5�C�C�b�I�I�!�!�!�!�!�!rD)	r�r�r�r1r�r�rUrr>)r�	locationsr�rT�counts_by_filenamerAs     �rC�collapsed_location_reportzDTerminalReporter.summary_warnings.<locals>.collapsed_location_report�s�����	� �3�3�A� �~�~�d�k�:�:�H��3�!�(�(��2�2�2���y�>�>�B�&�&��9�9�S��i�%8�%8�9�9�9�%,�-�-�:C�-�-�-�&�&�"��y�y�!�!� 2� 8� 8� :� :�!�!�!���rDzwarnings summary (final)zwarnings summaryr9TF)r\r�rc3� K�|]	}d|zV��
dS)r�Nrbr�s  rCr�z4TerminalReporter.summary_warnings.<locals>.<genexpr>�s&����(A�(A�a����(A�(A�(A�(A�(A�(ArDzG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)rr�rr�r1r@r�r�rr�rUr8r>r�r{r�r��rstrip)
rA�all_warningsr�warning_reports�reports_grouped_by_message�wrrr6r��message_reports�maybe_locationr��indenteds
`            rCr�z!TerminalReporter.summary_warnings�s����;�;�s���3	�:>�*�.�.��:T�:T�L��
����4�D�@�E��
/�".�t�/O�/Q�/Q�"R���".��/2�?�/C�/C�D�,�"�
���IK�&�%�
Q�
Q��*�5�5�b�j�"�E�E�L�L�R�P�P�P�P�
�4�
�3F�
�3�
�
�
�
�
�
�$38�O�.�.�=O�E��N�N�3��d��N�?�?�?�,F�,L�,L�,N�,N�

 �

 �(���!:�!:�?�!K�!K��!�/��H�M�M�.�1�1�1�#�.�.�0�0�E�#�y�y�(A�(A�5�(A�(A�(A�A�A�H�&�o�o�/�/�G�G�%�n�n�.�.�G���
�
�g�&�&�&���
�
������H�M�M�Y�
�
�
�
�
�c3	�3	rDc��|jjjdkr�|�d��r�|�d��}|sdS|�dd��|D]j}|jrC|�|��}|�d|dd���|�|��|�	|j
���gdSdSdS)	Nrz�Pr-r9�PASSESrT)r[r�)r�r�rvrrr8�sectionsr�_outrep_summary�_handle_teardown_sectionsr��rArrlr�s    rCr�zTerminalReporter.summary_passes�s����;��%��-�-��{�{�3���

?�,0�O�O�H�,E�,E�����F����s�H�-�-�-�"�?�?�C��|�2�"�6�6�s�;�;�����s�C�t�$��G�G�G��,�,�S�1�1�1��2�2�3�:�>�>�>�>�.�-�

?�

?�
?�?rDc�J��|�d��}�fd�|D��S)Nr�c�@��g|]}|jdk�
|j�k�|��S)r�)r�r�)r�r�r�s  �rCr�z:TerminalReporter._get_teardown_reports.<locals>.<listcomp>s<���
�
�
���{�j�(�(�V�]�f�-D�-D�
�-D�-D�-DrD)r)rAr�rs ` rC�_get_teardown_reportsz&TerminalReporter._get_teardown_reportss?����/�/�"�%�%��
�
�
�
�!�
�
�
�	
rDc�`�|�|��D]}|�|���dSrP)r.�print_teardown_sections)rAr�r�s   rCr*z*TerminalReporter._handle_teardown_sections	s@���0�0��8�8�	1�	1�F��(�(��0�0�0�0�	1�	1rDrlc�
�|jjj}|dkrdS|jD]a\}}|dkr||vr�d|vrM|j�d|��|dd�dkr
|dd�}|j�|���bdS)Nrzr�r�r�r�r)r�r�r~r(r�r5r{�rArlr~�secnamers     rCr0z(TerminalReporter.print_teardown_sections
s����k�(�4���$����F� #��	'�	'��G�W��e�#�#��7�(B�(B���W�$�$�����S�'�*�*�*��2�3�3�<�4�'�'�%�c�r�c�l�G���
�
�g�&�&�&��	'�	'rDc���|jjjdkr�|�d��}|sdS|�dd��|jjjdkr1|D],}|�|��}|�|���-dS|D]a}|�|��}|�d|dd���|�|��|�	|j
���`dSdS)	Nrzr,r9�FAILURESr{rT�r]r�)r�r�rvrr8r
r�rr)r*r�)rArrlr{r�s     rCr�z!TerminalReporter.summary_failuress���;��%��-�-�(,����(A�(A�G��
����N�N�3�
�+�+�+��{�!�)�V�3�3�"�*�*�C��-�-�c�2�2�D��O�O�D�)�)�)�)�*�*�#�?�?�C��2�2�3�7�7�C��N�N�3���D�N�A�A�A��(�(��-�-�-��2�2�3�:�>�>�>�>�.�-�?�?rDc�t�|jjjdkr�|�d��}|sdS|�dd��|jdD]e}|�|��}|jdkrd|z}n
d|j�d|��}|�d	|d
d
���|�|���ddSdS)Nrzr3r9�ERRORSr�zERROR collecting z	ERROR at z of rTr6)	r�r�rvrr8r�rr�r)r+s    rCr�zTerminalReporter.summary_errors+s����;��%��-�-�(,����(@�(@�G��
����N�N�3��)�)�)��z�'�*�
*�
*���.�.�s�3�3���8�y�(�(�-��3�C�C�9�c�h�9�9�C�9�9�C����s�C�T���=�=�=��$�$�S�)�)�)�)�.�-�

*�
*rDc�6�|�|j��|jjj}|dkrdS|jD]]\}}|dkr||vr�|j�d|��|dd�dkr
|dd�}|j�|���^dS)Nrzr�r�r�r)r�r�r�r�r~r(r5r{r2s     rCr)z TerminalReporter._outrep_summary:s������t�x� � � ��k�(�4���$����F� #��	#�	#��G�W��e�#�#��7�(B�(B���H�L�L��g�&�&�&��r�s�s�|�t�#�#�!�#�2�#�,���H�M�M�'�"�"�"�"�
	#�	#rDc�
�|jdkrdStj��|jz
}|���\}}g}|jdk}|r|jj}|D]Q\}}|jj|fi|��}	|r"|t|	��t|��z
z
}|�	|	���Rd�
|��}
|di}dt|����}|jj|fi|��}
|r"|t|
��t|��z
z
}|
|
z
}
|rH|jjdi|��}|�d��r
|dd�}|t|��z
}|
|z
}
|r|j
d	|
fd
|i|��dS|j|
fi|��dS)Nr�rr�Tz in r�z���r9r��r�)r�rr�r��build_summary_stats_liner�r�rr1r�r��format_session_durationr�r8r�)rA�session_duration�partsr~�
line_parts�display_sepr��textr�with_markupr��main_markup�duration�duration_with_markup�markup_for_end_seps               rCr�zTerminalReporter.summary_statsGs����>�B����F�!�;�=�=�4�+A�A��"�;�;�=�=���
��
��n��)���	+���*�I�!�	+�	+�L�D�&�)�$�(�/�$�9�9�&�9�9�K��
:��S��-�-��D�	�	�9�9�	����k�*�*�*�*��i�i�
�#�#��!�4�(��E�1�2B�C�C�E�E��.�t�x��x�G�G�;�G�G���	C���1�2�2�S��]�]�B�B�I��#�#���	&�!0����!C�!C�{�!C�!C��!�*�*�9�5�5�
=�%7����%<�"���/�0�0�0�I��%�%�C��	0��D�N�3��H�H�y�H�K�H�H�H�H�H��D�O�C�/�/�;�/�/�/�/�/rDc	�.���jsdSdttdtddf�fd�}dttddf�fd�}dttddf�fd�}dttddf�fd�}||t|d�	��|t|d
�	��t|d�	��d�}g}�jD]$}|�|��}|r||���%|r3��d
ddd���|D]}	��|	���dSdS)Nr��statr<c����j�|g��}|sdS�j}|D]P}t�|t��}t||�j|di��}|�|���QdS)NT)r�rr��_color_for_type�_color_for_type_default� _get_line_with_reprcrash_messager�r�)r�rJr,r�rlr�r{rAs       �rC�show_simplez8TerminalReporter.short_test_summary.<locals>.show_simpleps�����Z�^�^�D�"�-�-�F��
����[�F��
#�
#��'�+�+�D�2I�J�J��7��C���E�4�=�������T�"�"�"�"�
#�
#rDc�f���j�dg��}|D]�}|��j��}�jj|fitddi��}t�j�j|��}|�d|��}|j}|r|dt|��zz
}|�
|����dS)Nr0r2Tr�� - )r�r�_get_verbose_wordr�r�rrL�_get_node_id_with_markuprZrUr�)	r�r0rl�verbose_word�markup_wordr�r{rorAs	        �rC�show_xfailedz9TerminalReporter.short_test_summary.<locals>.show_xfailed|s�����j�n�n�Y��3�3�G��
#�
#��"�4�4�T�[�A�A��-�d�h�o� ���%4�Z�%@�$�$G����2�$�(�D�K��M�M��%�0�0��0�0������0��E�C��K�K�/�/�D����T�"�"�"�"�
#�
#rDc�:���j�dg��}|D]{}|��j��}�jj|fitddi��}t�j�j|��}|j}|�	|�d|�d|�����|dS)Nr1r2Tr�)
r�rrRr�r�rrLrSrZr�)r�r1rlrTrUr�rorAs       �rC�show_xpassedz9TerminalReporter.short_test_summary.<locals>.show_xpassed�s�����j�n�n�Y��3�3�G��
A�
A��"�4�4�T�[�A�A��-�d�h�o� ���%4�Z�%@�$�$G����2�$�(�D�K��M�M���������?�?�f�?�?�v�?�?�@�@�@�@�
A�
ArDc	�����
j�dg��}|rt�
j|��ng}|sdS|d��
j��}�
jj|fitddi��}d}|D]o\}}}}	|	�	|��r|	t|��d�}	|�|�d|||||	fz���S|�d||||	fz���pdS)Nr.rr2T�	Skipped: z%s [%d] %s:%d: %sz%s [%d] %s: %s)r�r�
_folded_skipsr�rRr�r�rrL�
startswithr1r�)r�r.�fskipsrTrUr�numrrLrorAs          �rC�show_skippedz9TerminalReporter.short_test_summary.<locals>.show_skipped�s:���+/�:�>�>�)�R�+H�+H�G�?F�N�]�4�>�7�;�;�;�B�F��
���"�1�:�7�7���D�D�L�)�$�(�/����!0��!<�d� C���K�!�F�/5�
X�
X�+��V�V�V��$�$�V�,�,�3�#�C��K�K�M�M�2�F��%��L�L�+�{�C���QW�.X�X������L�L�!1�[�#�v�v�4V�!V�W�W�W�W�
X�
XrDr,)rJr-r3)r�X�fr��pr�r9zshort test summary infoT)rar�)rorrUrrr8r�)
rArOrVrXr_�REPORTCHAR_ACTIONSr�r�rir{s
`         rCr�z#TerminalReporter.short_test_summaryls������	��F�
	#�t�C�y�
	#�3�
	#�4�
	#�
	#�
	#�
	#�
	#�
	#�
	#��S�	�
	#�d�
	#�
	#�
	#�
	#�
	#�
	#�		A��S�	�		A�d�		A�		A�		A�		A�		A�		A�	X��S�	�	X�d�	X�	X�	X�	X�	X�	X�*����8�4�4�4����8�4�4�4���7�3�3�3�
I
�I
�����$�	�	�D�'�+�+�D�1�1�F��
���u�
�
�
���	&��N�N�3� 9��4�N�P�P�P��
&�
&������%�%�%�%�	&�	&�
&�
&rDc��|j�|j�|jr&|���|jsJ�|jsJ�|j|jfSrP)r�r�rurBr�s rCrzz TerminalReporter._get_main_color�s\����#�t�'8�'@�D�DV�'@�� � �"�"�"��#�#�#�#��$�$�$�$����!2�2�2rD�unknown_type_seenc�d�|j}d|vsd|vrd}nd|vsd|vs|rd}nd|vs|jsd}nd}|S)	Nr,r3r]r2r1r\r-r[)r�ru)rArer�r~s    rC�_determine_main_colorz&TerminalReporter._determine_main_color�sl���
���u����5� 0� 0��J�J�
�5�
 �
 �I��$6�$6�:K�$6�!�J�J�
��
�
�d�&8�
� �J�J�!�J��rDc��g}|j���D]&}|r"|tvr||vr|�|���'t	t��|z|_|�t|����|_dSrP)	r��keys�KNOWN_TYPESr��listr�rgrWr�)rA�
unknown_types�
found_types   rCrBz TerminalReporter._set_main_color�s���#%�
��*�/�/�+�+�	5�	5�J��
5��[�0�0�Z�}�5T�5T�!�(�(��4�4�4�� ��-�-�
�=����5�5�d�=�6I�6I�J�J����rDc��|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�s rCr=z)TerminalReporter.build_summary_stats_line�s@��(�;� � ��/�/�	;��>�>�@�@�@��8�8�:�:�:rD�keyc�P�|j�|g��}d�|D��S)zRGet test/collection reports for the given status key, such as `passed` or `error`.c�4�g|]}t|dd���|��S)r�T)rLr�s  rCr�z<TerminalReporter._get_reports_to_display.<locals>.<listcomp>�s*��P�P�P�a�g�a�1H�$�&O�&O�P��P�P�PrDr)rArqrs   rC�_get_reports_to_displayz(TerminalReporter._get_reports_to_display�s+���*�.�.��b�)�)��P�P�7�P�P�P�PrDc�R�|���\}}g}|D]z}|�|��}|rat|��}t�|t
��}|dd||ki}|�dt||��z|f���{|sdt
difg}||fS)NTr��%d %szno tests ran)rzrtr1rLrrMr��	pluralize)	rAr~�known_typesr@rqrrgr�rs	         rCrpz1TerminalReporter._build_normal_summary_stats_line�s���#'�"6�"6�"8�"8��
�K����	H�	H�C��2�2�3�7�7�G��
H��G����'�+�+�C�1H�I�I����v�u�
�/B�C�����g�	�%��(=�(=�=�v�F�G�G�G���	H�$�'>��&E�F�G�E��j� � rDc���t|�d����}t|�d����}|jdkr
dddifg}d}na|dkr"d}dt|jd	��z}||difg}n9|j|k}|r	d}d
|�d�}nd}|j|z
}|�d|j�d
|�d�}||difg}|r(td}|dt|d��z|difgz
}||fS)Nr/r3rzno tests collectedr\Tr[z%d %s collected�testzno tests collected (z deselected)rxz tests collected (rv)r1rtr�rwrL)rAr/r+r@r~�collected_output�all_tests_were_deselectedr�s        rCroz7TerminalReporter._build_collect_only_summary_stats_linesW����5�5�l�C�C�D�D�
��T�1�1�'�:�:�;�;�����"�"�*�X�t�,<�=�>�E�!�J�J�
�1�_�_� �J�0�9�T�=O�QW�3X�3X�X��&��T�(:�;�<�E�E�(,�(:�j�(H�%�(�
p�%�
�#R�*�#R�#R�#R� � �$�
��-�
�:��&.�#o�#o��1C�#o�#o�Wa�#o�#o�#o� �&��T�(:�;�<�E��	R�(��1�J��w��6�7�!;�!;�;�j�$�=O�P�Q�Q�E��j� � rDrP)r<r�r<)r<N)NN)r9)F)r�r+r<N)arQrRrSrrrr@r��propertyr�r�rWr�rkrlr��setterrrUrrrrr'r
r	r�bytesr�r4r8r<r{rrrDrrGr2�WarningMessagerNrrQr#rSrrWr)rrrur�rkrr{r�r(r�r�r!r�r�rr�r�r�r r�rr�r�
BaseExceptionr�r�r�rVrr
rr�r�r.r*r0r�r�r'r)r�r�rzrgrBr
r=rtrprorbrDrCr�r�Vs�
������E�E�v�E�X�f�-=�E��E�E�E�E�4����*��3�����X���#�D�#�#�#��X�#��2�4�2�2�2��X�2��3�D�3�3�3��X�3�� �D� � � ��X� �
��!����!�4�!�!�!���!��"�$�"�"�"��X�"�(�3�(�4�(�(�(�(�	2�#�	2�d�	2�t�	2�	2�	2�	2�$�$�#�$�c�$�T�$�$�$�$�&�&�&�&����
7�7�7��7��	7�
�7��
7��7�
�7�7�7�7�,49�7�7�7�S�7�D�7�D�7�T�7�7�7�7�����&�u�S�%�Z�0�&�D�&�T�&�&�&�&�5�C�5�4�5�D�5�5�5�5�* $�#'�	6�6�
�6���}�6��C�=�	6�
�6�
�
6�6�6�6�'�'�S�'�s�'��'��'�'�'�'�!��!�4�!�D�!�!�!�!�#�3�#�x��}�#��#�#�#�#��M��d�����

6�!�0�
6��
6�
�	
6�
6�
6�
6�!�}�!��!�!�!�!�-�x��~�-�$�-�-�-�-����%*�3���
�s�+B�%C��	
�����B�z�B�d�B�B�B�B�H�T�t�T�T�T��X�T�E�s�E�t�E�E�E�E�*�3�����"A�A�A�A��.��.�.�.��X�.�A�A�A�A�"�=�"�T�"�"�"�"�#"�#"�D�#"�T�#"�#"�#"�#"�J�X�d����7�7�7���7�8*��e�C��#��$6�7�8�*�	
�*�*�*�*�
�6�
�d�3�i�
�
�
�
�-�-�-�-�,N�(�4�.�N�T�N�N�N�N�:�X�$����� ��.3�C��M�.B���� ���4�X�$���� ��3C�)D� � � � �� �F��}�1M�F�RV�F�F�F�F�-�-�-�-����� ���#&��08��
��GJ��	�����.������T�s�T�T�T�T�4�4�4�4�l?�?�?�?�
�C�
�D��4D�
�
�
�
�1��1��1�1�1�1�'�:�'�$�'�'�'�'�?�?�?�?�"
*�
*�
*�
*�#�:�#�$�#�#�#�#�#0�#0�#0�#0�JP&�P&�P&�P&�d3��s�D��I�~�!6�3�3�3�3�
�t�
��
�
�
�
�K�K�K�K�;�%��U�3��S�$�Y��;O�5P�0Q�SV�0V�*W�;�;�;�;�2Q�3�Q�4��9�Q�Q�Q�Q�
!�	�t�E�#�t�C��I��.�/�0�#�5�	6�!�!�!�!�&!�	�t�E�#�t�C��I��.�/�0�#�5�	6�!�!�!�!�!�!rDr��twrlc���|�|j��}|�d��^}}|r2|�d�|��d���}|dz|zS|S)NrTr�)r�r�rrr�)r�r�rlr��pathr@�parts_markups       rCrSrS,si��
�
'�
'��
�
3�
3�F��<�<��%�%�L�D�5����y�y����5�!1�!1��y�=�=���d�{�\�)�)��rDr�r�rpc���|�d��}|dkr
|d|�}d}t|�d����}|t|��z|krdS|t|��z|krW|t|��z}|d|�}|t|��z|kr |dd�}|t|��z|k� ||z
}|�|��S)z�Format msg into format, ellipsizing it if doesn't fit in available_width.

    Returns None if even the ellipsis can't fit.
    rr�Nz...r�)�findrr�r1)r�r�rp�i�ellipsis�format_widths      rCrhrh6s���	������A��B�w�w��"�1�"�g���H��F�M�M�"�-�-�.�.�L��c�(�m�m�#�o�5�5��t��h�s�m�m�#�o�5�5��3�x�=�=�(���"�?�"�#���X�c�]�]�*�_�<�<��c�r�c�(�C��X�c�]�]�*�_�<�<��x����=�=����rD�word_markupc�L�|�|��}|j|fi|��}t|||��}|�d|��}t|��}	|jjj}	t��s|j|z
}
td|	|
��}	nd|	��}	|	�||	z
}n#t$rYnwxYw|S)z?Get summary line for a report, trying to add reprcrash message.r�z - {}rQ)rRrrSrrr�r�rr�rhr	)r�rlr�r�rTr`rYr{�
line_widthr�rps           rCrNrNOs����(�(��0�0�L��2�9�\�1�1�[�1�1�D�#�B���4�4�D����T���D��$���J���l�$�,�����	� �l�Z�7�O�!�'�3��@�@�C�C���+�+�C��?��C�K�D����
�
�
���
�����Ks�B�
B!� B!r�r.c�R�i}|D]�}|j�J�t|jt��sJ||jf���t|j��dksJ||jf���|j\}}}t	|t|����}t
|di��}|jdkrd|vr
d|vr|d|f}n|||f}|�|g���	|����g}	|�
��D]+\}}
|	�	t|
��g|�R���,|	S)Nr��keywordsr��skip�
pytestmark)rr,rdr1r&rrLr�r@r�r>)r�r.�d�eventrrLror�rqrG�eventss           rCr[r[ks\��DF�A��,�,���~�)�)�)��%�.�%�0�0�I�I�5�%�.�2I�I�I�0��5�>�"�"�a�'�'�'�%���)@�'�'�'�!&�������Y��V���5�5���5�*�b�1�1��

�J�'�!�!��(�"�"��H�,�,�39�4��2H�C�C��6�6�*�C�	���S�"���$�$�U�+�+�+�+�8:�F��w�w�y�y�+�+���V��
�
�s�6�{�{�)�S�)�)�*�*�*�*��MrDr]r\r[)r,r3r2r-rg�nounc�\�|dvr||fS|�dd��}||dkr|dzn|fS)N)r3r2rzr2�warningrJr�)r�)rgr�s  rCrwrw�sH���0�0�0��d�{��
�<�<�
�I�.�.�D����
�
�$��*�*��4�4rDc��g}|D]S\}}d�|���}|�d��r
|dd�}||vr|�|���T|S)Nz"{dist.project_name}-{dist.version})�distzpytest-�)r�r\r�)r�rGrOr�r�s     rCr�r��st���F�"� � ����3�:�:��:�E�E���?�?�9�%�%�	�����8�D��v����M�M�$������MrD�secondsc�p�|dkr|d�d�Stjt|�����}|d�d|�d�S)zQFormat the given seconds in a human readable manner to show in the final summary.�<z.2fr�)r�zs (r`)�datetime�	timedeltar�)r��dts  rCr>r>�sP����|�|�� � � � � �
�
��G���
5�
5�
5���'�'�'�"�'�'�'�'rDc��t|d��rHtt|j��}|�d��r|td��d�}|S|jsJ�t|jt��sJ�|j\}}}|�d��r|td��d�}n|dkrd}|S)zqGet the reason string of a skip/xfail/xpass test report.

    The string is just the part given by the user.
    rZzreason: NrZ�Skippedr�)
rerrUrZr\r1r.r,rrd)r�rors   rCrgrg�s���
�v�z�"�"�
��c�6�?�+�+�����Z�(�(�	/��C�
�O�O�-�-�.�F��
��~���~��&�/�5�1�1�1�1�1�����1�f����[�)�)�	��C��,�,�.�.�/�F�F�
�y�
 �
 ��F��
rD)arTrX�dataclassesr�r�r�r�r$r2�collectionsr�	functoolsr�pathlibr�typingrrrr	r
rrr
rrrrrrrrr��_pytest._versionr�rr�
_pytest._coder�_pytest._code.coder�_pytest._ior�_pytest._io.wcwidthr�_pytest.assertion.utilr�_pytest.compatrr�rrr r!�_pytest.config.argparsingr"�
_pytest.nodesr#r$�_pytest.pathlibr%r&�_pytest.reportsr'r(r)�typing_extensionsr*�_pytest.mainr+r�rjr��Actionr6r]r�r�rUr�r��	dataclassr�r�rSr�rhrWrNr[rLrMrwr��floatr>rgrbrDrC�<module>r�s�������������������������
�
�
�
��������������������������������������������������������������������������������������������������������������� � � � � � �������
�
�
�
�����������������'�'�'�'�'�'�,�,�,�,�,�,�&�&�&�&�&�&�(�(�(�(�(�(�0�0�0�0�0�0� � � � � � �(�(�(�(�(�(�!�!�!�!�!�!�#�#�#�#�#�#�#�#�#�#�#�#�,�,�,�,�,�,�������������(�(�(�(�(�(�'�'�'�'�'�'�&�&�&�&�&�&�)�)�)�)�)�)�&�&�&�&�&�&��%�)�)�)�)�)�)�$�$�$�$�$�$� #��	����"=�"=�"=�"=�"=�h�o�"=�"=�"=�J5�5�5�5�5��5�5�5�(y�V�y��y�y�y�y�x	B�V�	B��	B�	B�	B�	B����C�����2
��$����,�Z�,�E�#�s�C�-�4H�,�,�,���,�
������������8�R!�R!�R!�R!�R!�R!�R!���R!�j�����j������C��c��C��H�S�M�����2���#��)7��FJ�3�PT�9�o�������8���
�m�
$��
�%��S�(�3�-��,�
-�.�����@�
���	���#��
5�S�
5��
5��c�3�h��
5�
5�
5�
5���S�	�����(�U�(�s�(�(�(�(����������rD