403Webshell
Server IP : 209.209.40.120  /  Your IP : 216.73.217.112
Web Server : Microsoft-IIS/10.0
System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586
User : NEWWWW$ ( 0)
PHP Version : 8.3.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Python312/Lib/site-packages/_pytest/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Python312/Lib/site-packages/_pytest/__pycache__/terminal.cpython-312.pyc
�

��Hg1���F�dZddlmZddlZddlmZddlZddlZddlm	Z	ddl
Z
ddlmZddl
Z
ddlZddlZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlmZddlZddlZddlmZddlm Z ddl!m"Z"ddl#m$Z$ddl%m&Z&ddl'm(Z(ddl)Zddl*m+Z+ddl,m-Z-ddl,m.Z.ddl,m/Z/ddl,m0Z0ddl1m2Z2ddl3m4Z4ddl3m5Z5dd l6m7Z7dd!l6m8Z8dd"l9m:Z:dd#l9m;Z;dd$l9m<Z<erdd%l=m>Z>d&Z?d'Z@d(ZAGd)�d*ej��ZCGd+�d,e�ZDdCd-�ZEdDd.�ZFdEd/�ZGe0d0�1�dFd2��ZHej�Gd3�d4��ZJeGd5�d6��ZKdGd7�ZLdHd8�ZM										dId9�ZN						dJd:�ZOd;d;d<d=d>�ZPd<ZQdKd?�ZRdLd@�ZSdMdA�ZTdNdB�ZUy)OzsTerminal reporting of the full testing process.

This is a good source for looking at the various reporting hooks.
�)�annotationsN)�Counter)�partial)�Path)�Any)�Callable)�ClassVar)�final)�	Generator)�Literal)�Mapping)�
NamedTuple)�Sequence)�TextIO)�
TYPE_CHECKING)�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�fEc�`��eZdZdZ			d											d�fd�
Z	d									dd�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.
    c�0��t�|�||d|||��y)Nr)�option_strings�dest�nargs�default�required�help)�super�__init__)�selfr2r3r5r6r7�	__class__s      ��2C:\Python312\Lib\site-packages\_pytest/terminal.pyr9zMoreQuietAction.__init__Ss)���	���)������
	�	
�c��t||jd�dz
}t||j|�t|dd�dz|_y)Nr��quiet)�getattrr3�setattrr@)r:�parser�	namespace�values�
option_string�	new_counts      r<�__call__zMoreQuietAction.__call__ds@���I�t�y�y�!�4�q�8�	��	�4�9�9�i�0�!�)�W�a�8�1�<�	�r=)NFN)r2z
Sequence[str]r3�strr5�objectr6�boolr7�
str | None�return�None�N)
rCzargparse.ArgumentParserrDzargparse.NamespacerEzstr | Sequence[object] | NonerFrLrMrN)�__name__�
__module__�__qualname__�__doc__r9rH�
__classcell__)r;s@r<r0r0Ls��������

�%�
��
��	
�
�
��

�
�
�,%)�
=�'�
=�&�
=�.�	
=�
"�
=�
�
=r=r0c�0�eZdZUdZded<ded<ded<y)�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.
    rI�category�letterz$str | tuple[str, Mapping[str, bool]]�wordN)rPrQrRrS�__annotations__�r=r<rVrVqs����M��K�
.�.r=rVc	��|jddd��}|jddddd	d
��|jdd
ddd��|jdd
ddd��|jddddd��|jddtdd	d��|jdd	tdd��|jd d!d"td#d$�%�|jd&d'dd(d
d)�*�|jd+d,d
d-dd.��|jd/dd-d0�1�|jd2d3d!d4d5gd6�d7�8�|jd9d
d:dd;��|jd<d!d=gd>�d?d@�A�|jdBdCd
ddD�E�|jdFdGd!dGd5gdH�dI�8�|jdJdKdKdLgdM�N�|jdOdPdQ�R�t
j|tjdS�T�y)UNzterminal reporting�	Reporting�general)�afterz-vz	--verbose�countr�verbosezIncrease verbosity)�actionr5r3r7z--no-header�
store_trueF�	no_headerzDisable headerz--no-summary�
no_summaryzDisable summaryz--no-fold-skipped�store_false�fold_skippedTz+Do not fold skipped tests in short summary.)rbr3r5r7z-qz--quietzDecrease verbosityz--verbosityzSet verbosity. Default: 0.)r3�typer5r7z-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').)rbr3r5�metavarr7z--disable-warningsz--disable-pytest-warnings�disable_warningszDisable warnings summary)r5r3rbr7z-lz--showlocals�
showlocalsz/Show locals in tracebacks (disabled by default)z--no-showlocalszFHide locals in tracebacks (negate --showlocals passed through addopts))rbr3r7z--tb�style�tbstyle�auto)rq�long�short�no�line�nativez5Traceback print mode (auto/long/short/line/native/no))rlrbr3r5�choicesr7z
--xfail-tb�xfail_tbz1Show tracebacks for xfail (as long as --tb != no)z--show-capture�showcapture)rt�stdout�stderr�log�allr}zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)rbr3rwr5r7z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))rbr5r7z--color�color)�yesrtrqz#Color terminal output (yes/no/auto)z--code-highlightrrtzSWhether code should be highlighted (only if --color is also enabled). Default: yes.)r5rwr7�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)r7r5z�Specify a verbosity level for test case execution, overriding the main level. Higher levels will provide more detailed information about each test case executed.)r7)	�getgroup�
_addoptionr0�int�_REPORTCHARS_DEFAULT�addinir�_add_verbosity_ini�VERBOSITY_TEST_CASES)rC�groups  r<�pytest_addoptionr��s����O�O�0�+�Y�O�O�E�	�������
�
!�
��
������
�
���
������
�
���
�����
��
:���
�������
�
!�
��
����
�
��
)���
�����
�$��>�
��
����#��
��
'�
��
������
��
>�
��
�����
�
U�	��
������
��A�
D���
�����
��
@���
�����
�8���
��
�������
;���
������
��%�
2���
�������
��	���M�M��)���������#�#�
b�	r=c�"��t|tj��|jj	�d�|j
js|j
jr,�fd�}|jjjd|�yy)N�terminalreporterc�l��djtt|��}�jd|z�y)N� z[traceconfig] )�join�maprI�
write_line)�tags�args�msg�reporters   �r<�mywriterz"pytest_configure.<locals>.mywriters+����(�(�3�s�D�>�*�C���� 0�3� 6�7r=z
pytest:config)�TerminalReporter�sysrz�
pluginmanager�register�option�debug�traceconfig�trace�root�setprocessor)�configr�r�s  @r<�pytest_configurer�si������
�
�3�H�
���!�!�(�,>�?�
�}�}���f�m�m�7�7�	8�	�����&�&���A�
8r=c�R�|jj}ddh}d}|D]8}||vr|j�}|dk(rd}�|dk(rd}�'|dk(rd}�/||vs�4||z
}�:|jjsd	|vrd	|z}|S|jjrd	|vr|j	d	d�}|S)
N�F�S��a�sxXEf�A�PpsxXEf�N�w)r�rj�lowerrm�replace)r�rj�old_aliases�
reportopts�chars     r<�getreportoptr�#s����}�}�0�0�K���*�K��J��
���;���:�:�<�D��3�;� �J�
�S�[�"�J�
�S�[��J�
��
#��$��J�
��=�=�)�)�c��.C��:�%�
���
���	'�	'�C�:�,=��'�'��R�0�
��r=T��trylastc��d}|jrd}n|jrd}|j}|jdvr	|dk(rd}d}|||j	�fS)Nr��.�s)�collect�setup�teardownr&r-�E)r'r(�outcome�when�upper)�reportrXr�s   r<�pytest_report_teststatusr�<sY��
�F�
�}�}���	������>�>�G�
�{�{�6�6�7�h�;N������F�G�M�M�O�+�+r=c�N�eZdZUdZded<dZded<dZded<d	Zd
ed<d
d�Zy)�
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``).
    rI�messageNrL�nodeidztuple[str, int] | None�
fslocationTr	�count_towards_summaryc���|jr|jS|jr?|j\}}t|jjt|��}|�d|��Sy)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�relpaths     r<�get_locationzWarningReport.get_location^sY���;�;��;�;���?�?� $����H�g�!�&�":�":�">�">��X�@V�W�G��Y�a��y�)�)�r=)r�rrMrL)	rPrQrRrSrZr�r�r�r�r[r=r<r�r�Ls3����L��F�J��)-�J�&�-�&*��8�*�r=r�c���eZdZdSdTd�ZdUd�ZedVd��ZedWd��ZedWd��ZedWd��Z	edWd��Z
e
jdXd	��Z
edWd
��ZdYd�Z
dZd�Zd[d\d
�Zd]d�Zdddd�											d^d�Zdd�d_d�Zd]d�Zd`d�Zdad�Z		db									dcd�Zddded�Zdfd�Zdgd�Zdhd�Z						did�Zdjd�Zdkd �Z						dld!�Zdmd"�ZedWd#��Z e!d$�%�dnd&��Z"dod'�Z#d]d(�Z$d]d)�Z%edVd*��Z&d]d+�Z'dpd,�Z(dqdrd-�Z)e!d$�.�dsd/��Z*				dtd0�Z+dud1�Z,dsd2�Z-dkd3�Z.e!d$�%�						dvd4��Z/e!d$�%�dwd5��Z0dxd6�Z1d]d7�Z2d]d8�Z3										dyd9�Z4d:�Z5d;�Z6dzd<�Z7d]d=�Z8d]d>�Z9d]d?�Z:								d{d@�Z;d|dA�Z<d}dB�Z=d~dC�Z>d]dD�Z?d]dE�Z@ddF�									ddG�ZAd]dH�ZBd�dI�ZCd]dJ�ZDd]dK�ZEd�dL�ZFd�dM�ZGd]dN�ZHd�dO�ZId�dP�ZJ		d�dQ�ZK		d�dR�ZLy)�r�Nc�v�ddl}||_d|_d|_d|_i|_d|_d|_|jj|_
|�tj}|jj||�|_|jj|_d|_t%|�|_|j(j*|_|jj.|_|j1�|_t3�|_|j7�|_d|_d|_d|_y�Nr) �_pytest.configr��
_numcollected�_session�_showfspath�stats�_main_color�_known_typesr�r��	startpathr�rz�create_terminal_writer�_tw�	fullwidth�
_screen_width�
currentfspathr�rjr�rg�foldskipped�	hasmarkup�isatty�set�_progress_nodeids_reported�_determine_show_progress_info�_show_progress_info�_collect_report_last_write�_already_displayed_warnings�_keyboardinterrupt_memo)r:r��file�_pytests    r<r9zTerminalReporter.__init__ks����������(,��
�(,���+-��
�'+���.2����1�1�5�5����<��:�:�D��>�>�8�8���F���!�X�X�/�/���6:���'��/���!�=�=�5�5������+�+����k�k�m���47�E��'�#'�#E�#E�#G�� �8<��'�7;��(�=A��$r=c��|jjdd�dk(r|jjd�dk7ry|jjdd�ry|jjd�}|dvry|d	k(ry	y)
zRReturn whether we should display progress information based on the current config.�capturertr��progress-even-when-capture-noF�	setupshow>r�r�r�r`)r��	getoption�getini)r:�cfgs  r<r�z.TerminalReporter._determine_show_progress_info�s���

�K�K�!�!�)�T�2�d�:����"�"�#9�:�.�/���;�;� � ��e�4���;�;�%�%�&<�=���?�?��
�G�^��r=c�F�|jjj}|SrO)r�r�ra)r:�	verbositys  r<r�zTerminalReporter.verbosity�s�����+�+�3�3�	��r=c� �|jdk\Sr�)r��r:s r<�
showheaderzTerminalReporter.showheader�s���~�~��"�"r=c�T�t|jjj�SrO)rKr�r�rdr�s r<rdzTerminalReporter.no_header�s���D�K�K�&�&�0�0�1�1r=c�T�t|jjj�SrO)rKr�r�rer�s r<rezTerminalReporter.no_summary�s���D�K�K�&�&�1�1�2�2r=c��|j�,|jjtj�dk\S|jSr�)r�r��
get_verbosityrr�r�s r<�
showfspathzTerminalReporter.showfspath�s:�����#��;�;�,�,�V�-H�-H�I�Q�N�N����r=c��||_yrO)r�)r:�values  r<r�zTerminalReporter.showfspath�s
�� ��r=c�Z�|jjtj�dkDSr�)r�r�rr�r�s r<�showlongtestinfoz!TerminalReporter.showlongtestinfo�s"���{�{�(�(��)D�)D�E��I�Ir=c�H�ddd�j||�}||jvS)N�xr�)r*r()�getrj)r:r�s  r<�hasoptzTerminalReporter.hasopt�s*���3�/�3�3�D�$�?���t�'�'�'�'r=c���|jj|jd�dz}|j�||jk7r}|j�|jr|j�||_t
|j|�}|jj�|jj|dz�|jj|fddi|��y)N�::rr��flushT)r��rootpath�splitr�r��)_write_progress_information_filling_spacer!r�r�ru�write)r:r��res�markup�fspath�	relfspaths      r<�write_fspath_resultz$TerminalReporter.write_fspath_result�s������%�%����T�(:�1�(=�=�����%��4�3E�3E�)E��!�!�-�$�2J�2J��>�>�@�!'�D��#�D�N�N�F�;�I��H�H�M�M�O��H�H�N�N�9�s�?�+�������s�1�$�1�&�1r=c���|j|k7r<|jj�||_|jj|�|r%|jj|fi|��d|_yy)N���)r�r�rur
)r:�prefix�extra�kwargss    r<�write_ensure_prefixz$TerminalReporter.write_ensure_prefix�s\������'��H�H�M�M�O�!'�D���H�H�N�N�6�"���D�H�H�N�N�5�+�F�+�!#�D��r=c�`�|jr"|jj�d|_yyrO)r�r�rur�s r<�ensure_newlinezTerminalReporter.ensure_newline�s%������H�H�M�M�O�!%�D��r=F��
)r�margin�line_sepc���|jj}|jtjd|z|z|j
|z
dd���}||d}|jj|fd|i|��y)z+Wrap message with margin for progress info.r�TF)�width�drop_whitespace�replace_whitespaceNr)r��width_of_current_liner��textwrap�wrapr�r
)r:�contentrrrrr �wrappeds        r<�
wrap_writezTerminalReporter.wrap_write�s|��!%��� >� >���-�-��M�M��+�+�g�5��(�(�6�1� $�#(�	
�
���/�0�1��������w�6�e�6�v�6r=)rc�B�|jj|fd|i|��y)Nr)r�r
)r:r#rrs    r<r
zTerminalReporter.write�s��������w�6�e�6�v�6r=c�8�|jj�yrO)r�rr�s r<rzTerminalReporter.flush�s�������r=c��t|t�s
t|d��}|j�|jj|fi|��y)Nr�)�errors)�
isinstancerIrr�ru)r:rurs   r<r�zTerminalReporter.write_line�s;���$��$��t�I�.�D���������
�
�d�%�f�%r=c���|jdd�}|r+|jjt|�z
dz
}d|z}nd}t	|�}|jj
d|z|zfi|��y)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.
        �eraseFr?r�r��
N)�popr�r��lenrIr
)r:rurr,�
fill_count�fills      r<�rewritezTerminalReporter.rewrite�sl���
�
�7�E�*������+�+�c�$�i�7�!�;�J���#�D��D��4�y��������t�d�{�T�)�4�V�4r=c�b�|j�|jj|||fi|��yrO)rr��sep)r:r4�titler�rs     r<�	write_sepzTerminalReporter.write_seps+��	
����������S�%��5�f�5r=c�@�|jj||fi|��yrO)r�r4)r:r5r4�kws    r<�sectionzTerminalReporter.sections��������S�%�&�2�&r=c�>�|jj|fi|��yrO)r�ru)r:r�r8s   r<ruzTerminalReporter.lines������
�
�c� �R� r=c��||jv}|jj|g�j|�|r|j�yyrO)r��
setdefault�extend�_set_main_color)r:rW�items�set_main_colors    r<�
_add_statszTerminalReporter._add_statssC��!����3���
�
���h��+�2�2�5�9��� � �"�r=c�j�t|�jd�D]}|jd|z��y)NrzINTERNALERROR> T)rIrr�)r:�excreprrus   r<�pytest_internalerrorz%TerminalReporter.pytest_internalerror!s5����L�&�&�t�,�	6�D��O�O�-��4�5�	6�r=c��ddlm}|j|jf}||�}t	|||��}|jd|g�y)Nr)�warning_record_to_str)r�r�r�r,)�_pytest.warningsrFr��linenor�rA)r:�warning_messager�rFr�r��warning_reports       r<�pytest_warning_recordedz(TerminalReporter.pytest_warning_recorded&sK��
	;�$�-�-��/E�/E�E�
�'��8��&�!�7�6�
��	
���
�^�$4�5r=c�r�|jjjrd|��}|j|�yy)NzPLUGIN registered: )r�r�r�r�)r:�pluginr�s   r<�pytest_plugin_registeredz)TerminalReporter.pytest_plugin_registered5s4���;�;���)�)�'��x�0�C�
�O�O�C� �*r=c�(�|jd|�y)Nr))rA)r:r?s  r<�pytest_deselectedz"TerminalReporter.pytest_deselected=s������e�,r=c���|\}}}|jr7|j||||�}|j|d�|j�y|jr#|j|d�|j�yy)Nr�)r��
_locationlinerrr�r)r:r��locationr
rH�domainrus       r<�pytest_runtest_logstartz(TerminalReporter.pytest_runtest_logstart@so��"*������ � ��%�%�f�f�f�f�E�D��$�$�T�2�.��J�J�L�
�_�_��$�$�V�R�0��J�J�L�r=c�.�d|_|}t|jjj	||j���}|j
|j|j}}}t|t�sd}n|\}}|j||g�|s|sy|�Vt|d�}|jr|sddi}n7|jr|rddi}n$|jrddi}n|jrddi}ni}|jj!|j"�|jj%t&j(�dkrI|j*j,|fi|��|j.�r|j0�s|j3��n�|j4|j"g|j6���}	t|d�}
|
s�|j8|	|fi|��|jst|d�r�t;|�}|jj%t&j(�d	krJ|j*j<|j*j>z
tAd
�z
dz
}tCd||�}
nd
|�d�}
|r|
�|jE|
�|j.r�|jG�n�|jI�|j*j-d|jJjLjN�d��|j.r/|j*j-|jQ�dzd��n|j*j-d�|j*j,|fi|��|j*j-d|	z�d|_)|jU�y)NT)r�r��wasxfail�green�yellow�redr�node�� [100%]r?z ({})z (�)�[�]r�)�cyanr)+�
_tests_ranrVr��hookr�rWrXrYr*�tuplerA�hasattrr'r&r(r��addr�r�rr�r�r
r��
_is_last_item�(_write_progress_information_if_past_edgerRrSr�_get_raw_skip_reasonr�r r/�_format_trimmedr%r	rr[�gateway�id�!_get_progress_information_messager�r)r:r��reprrWrXrYr�	was_xfailru�
running_xdist�reason�available_width�formatted_reasons              r<�pytest_runtest_logreportz)TerminalReporter.pytest_runtest_logreportNs������� �
�[�[�
�
�
6�
6�c�$�+�+�
6�
V�
��"%���s�z�z�3�8�8�$�&���$��&��F��L�D�&�����3�%�(��d���>���
�3�I��z�z�)�!�4������	�"�D�)������������"�D�)�����'�'�+�+�C�J�J�7��;�;�$�$�V�%@�%@�A�Q�F��D�H�H�N�N�6�,�V�,��'�'��0B�0B��=�=�?�%�4�%�%�c�j�j�@�3�<�<�@�D�#�C��0�M� �(��(�(��t�>�v�>��;�;�'�&�*�"=�1�#�6�F��{�{�0�0��1L�1L�M�PQ�Q�!�X�X�/�/�$�(�(�2P�2P�P�!�)�n�-�� �(�
,;�#�V�_�,�(�.0��x�q�>�(��"2�">����(8�9��+�+��B�B�D��#�#�%�������3�8�8�#3�#3�#6�#6�"7�q�9�:��+�+��H�H�N�N��>�>�@�3�F�T�#���H�H�N�N�3�'�������t�.�v�.������s�T�z�*�%'��"��
�
�r=c�v�|j�J�t|j�|jjk(SrO)r�r/r��testscollectedr�s r<rgzTerminalReporter._is_last_item�s2���}�}�(�(�(��4�2�2�3�t�}�}�7S�7S�S�Sr=T)�wrapperc#�K�d��}|jjtj�dkr(|jr|j
r|j
�|S�wr�)r�r�rr�r�r�r	)r:�results  r<�pytest_runtestloopz#TerminalReporter.pytest_runtestloop�sM������
�K�K�%�%�f�&A�&A�B�a�G��(�(��/�/��:�:�<��
�s�AAc�N�|jsJ�|jj}|jdk(rP|rEt|j�}dtt|���d�}d|�d�}|j
||�Sd|�d|�d�S|r dt|j�d	z|zd
�d�Sy)
Nr`z{:zd}� [z/{}]z [ z / z ]�d�3dz%]r])r�rvr�r/r�rI�format)r:�	collectedr��counter_format�
format_strings     r<rmz2TerminalReporter._get_progress_information_message�s����}�}��}��M�M�0�0�	��#�#�w�.���t�>�>�?��#&�s�3�y�>�':�&;�3�!?��"$�^�$4�F� ;�
�$�+�+�H�i�@�@����3�y�k��4�4����T�<�<�=��C�y�P�QS�T�TV�W��r=c�x�|j}|jdk(r7|jsJ�|jj}t	d|�d|�d��}nt	d�}||zdz|j
k\}|rF|j
�\}}|j�}|jj|dzfi|di��yy)	Nr`r|�/r`r]r?rT)
�_width_of_current_liner�r�rvr/r��_get_main_colorrmr�r
)r:r��	num_tests�progress_length�	past_edge�
main_color�_r�s        r<rhz9TerminalReporter._write_progress_information_if_past_edge�s����'�'���#�#�w�.��=�=� �=��
�
�4�4�I�!�B�y�k��9�+�Q�"?�@�O�!�)�n�O���'�!�+�t�/A�/A�A�	�� �0�0�2�M�J���8�8�:�C��D�H�H�N�N�3��:�<�*�d�);�<�r=c���|j�\}}|j�}|j}|jj|z
dz
}|j
|j
|�fddi|di��y)Nr?rT)r�rmr�r�r�r
�rjust)r:r~r�r�r�r1s      r<r	z:TerminalReporter._write_progress_information_filling_space�sj���'�'�)���q��4�4�6���'�'���x�x�!�!�A�%��)����
�
�3�9�9�T�?�@�$�@�5�$�-�@r=c�.�|jjS)z%Return the width of the current line.)r�r r�s r<r�z'TerminalReporter._width_of_current_line�s���x�x�-�-�-r=c�0�|jrR|jjjdk\r.|j	ddd��tj�|_yy|jjjdk\r|j	ddd��yy)Nrzcollecting ... T)r�boldr?)r�r�r�rar
r�timer�r�s r<�pytest_collectionz"TerminalReporter.pytest_collection�sy���;�;��{�{�!�!�)�)�Q�.��
�
�,�D�t�
�D�28�+�+�-��/�/��[�[�
�
�
'�
'�1�
,��J�J�(��4�J�@�-r=c�V�|jr|jd|g�n|jr|jd|g�|jD�cgc]}t	|t
�s�|��}}|xjt|�z
c_|jr|j�yycc}w)Nr-r()
r&rAr(ryr*rr�r/r��report_collect)r:r�rr?s    r<�pytest_collectreportz%TerminalReporter.pytest_collectreport�s����=�=��O�O�G�f�X�.�
�^�^��O�O�I��x�0�"�M�M�A�q�Z��4�-@��A��A����c�%�j�(���;�;����!���Bs�B&�$B&c�:�|jjjdkry|s>tj�}|j
�|j
|tz
kDry||_t|jjdg��}t|jjdg��}t|jjdg��}|j|z
}|rdnd}|t|j�dz|jdk(rd	nd
zz
}|r|d||dk7rd
nd	fzz
}|r|d|zz
}|r|d
|zz
}|j|kDr|d|zz
}|jr)|j|dd��|r|jd�yy|j|�y)Nrr-r(r)z
collected zcollecting z itemr?r�r�z
 / %d error%sz / %d deselectedz
 / %d skippedz / %d selectedT)r�r,r)r�r�rarr�r��REPORT_COLLECTING_RESOLUTIONr/r�rr�rIr�r2r
r�)r:r
�tr)r(r)�selectedrus        r<r�zTerminalReporter.report_collect�s����;�;���%�%��)������
�A��/�/�;��3�3�a�:V�6V�V��./�D�+��T�Z�Z�^�^�G�R�0�1���d�j�j�n�n�Y��3�4���������b�9�:�
��%�%�
�2��$�|�-�����"�"�#�g�-�t�7I�7I�Q�7N��TW�X�	
����O�v�f��k�s�r�&J�J�J�D���&��3�3�D���O�g�-�-�D�����(��$�x�/�/�D��;�;��L�L��D��L�5���
�
�4� ��
�O�O�D�!r=r�c�x�||_tj�|_|jsy|jddd��t
j�}|j�sXdtj�d|��}ttdd�}|r1djtt|dd	��}|d
|�d|d	�d�z
}|d
tjj �dt"j$��z
}|j&dkDsA|j(j*j,s!t|j(j*dd�r|dttj.�zz
}|j1|�|j(j2j5|j(|j6��}|j9|�yy)N�=ztest session startsT�r�z	platform z -- Python �pypy_version_infor��z[pypy-�-r`z	, pytest-z	, pluggy-r�pastebinz -- )r��
start_path)r�rr��_sessionstarttimer�r6�platform�python_versionrdr�rAr�r�rIr��_version�version�pluggy�__version__r�r�r�r��
executabler�rc�pytest_report_headerr��_write_report_lines_from_hooks)r:�session�verinfor�r��liness      r<�pytest_sessionstartz$TerminalReporter.pytest_sessionstartst����
�!'�������������s�1���=��)�)�+���~�~��c�l�l�^�;�w�i�@�C� '��-@�$� G�� ��(�(�3�s�,=�b�q�,A�#B�C�����y��*;�A�*>�)?�q�A�A���Y�w�/�/�7�7�8�	�&�BT�BT�AU�V�V�C�����"��;�;�%�%�+�+��4�;�;�-�-�z�4�@��v��C�N�N� 3�3�3���O�O�C� ��K�K�$�$�9�9��{�{�t�~�~�:��E�
�/�/��6�#r=c��t|�D]<}t|t�r|j|��%|D]}|j|���>yrO)�reversedr*rIr�)r:r��
line_or_linesrus    r<r�z/TerminalReporter._write_report_lines_from_hooks*sH��&�e�_�	*�M��-��-����
�.�)�*�D��O�O�D�)�*�		*r=c	��d|j��g}|jr2|jdt|j|j�z�|jt
jjk(r@|jd�}|jdjdj|���|jj�}|r8|jdjdjt|����|S)Nz	rootdir: zconfigfile: �	testpathsz
testpaths: {}�, zplugins: {})r�inipath�appendr!�args_sourcer�
ArgsSource�	TESTPATHSr�rr�r��list_plugin_distinfo�_plugin_nameversions)r:r�ryr��
plugininfos     r<r�z%TerminalReporter.pytest_report_header4s����f�o�o�.�/�0���>�>��M�M�.�;�v������+W�W�X�����!2�!2�!<�!<�<�#)�=�=��#=�I��M�M�/�0�0����9�1E�F�G��)�)�>�>�@�
���M�M��$�$�T�Y�Y�/C�J�/O�%P�Q�
��
r=c��|jd�|jjj|j|j|j
��}|j
|�|jjd�r�|j
rY|jjjdkDr|jjd�|j|j
�|jjd�}|r?|jjdd�|D]}|j!|j��yyy)	NT)r�r�r?�collectonly���r�r&�!zcollection failures)r�r�rc�pytest_report_collectionfinishr�r?r�r�r�rar�ru�_printcollecteditemsr�rr4�
toterminal)r:r�r�r&rns     r<�pytest_collection_finishz)TerminalReporter.pytest_collection_finishEs������D�!���� � �?�?��;�;��~�~��-�-�@�
��
	
�+�+�E�2��;�;� � ��/��}�}��;�;�%�%�-�-��2��H�H�M�M�"�%��)�)�'�-�-�8��Z�Z�^�^�H�-�F�������S�"7�8�!�-�C��N�N�4�8�8�,�-��0r=c	��|jjtj�}|dkr�|dkrTt	d�|D��}t|j
��D]%\}}|jjd||fz��'y|D]'}|jj|j��)yg}d}|D�]}|j�dd}	|r%||	dt|�k(rn|j�|r�%|	t|�dD]�}
|j|
�t|�dz
dz}|jj|�|
���|dk\s�Jt|
dd�}|rtj |�nd}|s�s|j#�D]0}
|jjd	j%|dz|
���2����y)
Nrr�c3�ZK�|]#}|jjdd�d���%y�w�rr?rN)r�r)�.0�items  r<�	<genexpr>z8TerminalReporter._printcollecteditems.<locals>.<genexpr>_s&���� Q�4����!2�!2�4��!;�A�!>� Q�s�)+z%s: %dr�r?�  �objz{}{})r�r�rr�r�sortedr?r�rur��	listchainr/r.r�rA�inspect�getdoc�
splitlinesr)r:r?�test_cases_verbosity�counts�namer`r��stack�indent�needed_collectors�colr��docrus              r<r�z%TerminalReporter._printcollecteditems[s���#�{�{�8�8��9T�9T�U���!�#�#�b�(� � Q�5� Q�Q��#)�&�,�,�.�#9�<�K�D�%��H�H�M�M�(�d�E�]�":�;�<�

�"�/�D��H�H�M�M�$�+�+�.�/�������	N�D� $��� 0��� 4����-�l��E�
�;�;���	�	���)��U���6�	
N�����S�!��e�*�q�.�D�0�����
�
�����.�/�'�1�,�!�#�u�d�3�C�14�'�.�.��-�$�C��$'�N�N�$4�N�D� �H�H�M�M�&�-�-���
�t�*L�M�N�	
N�
	Nr=c#�K�d��}|jjd�tjtjtj
tjtjf}||vr>|js2|jjj|||j��|jr'|jdt|j�d��|tj
k(r|j�d|_n3|j"r'|jdt|j"�d��|j%�|S�w)Nr�)r��
exitstatusr�r�T)rZ)r�rur�OK�TESTS_FAILED�INTERRUPTED�USAGE_ERROR�NO_TESTS_COLLECTEDrer�rc�pytest_terminal_summary�
shouldfailr6rI�_report_keyboardinterruptr��
shouldstop�
summary_stats)r:r�r�ry�summary_exit_codess     r<�pytest_sessionfinishz%TerminalReporter.pytest_sessionfinishys
���������
�
�b���K�K��!�!�� � �� � ��'�'�
���+�+�D�O�O��K�K���4�4�!%�*�T�[�[�
5�
�����N�N�3��G�$6�$6� 7�T�N�B���-�-�-��*�*�,�+/�D�(�
�
�
��N�N�3��G�$6�$6� 7�T�N�B������
�s�EEc#�^K�|j�|j�|j�|j�|j	�|j�	d��|j
�|j�S#|j
�|j�wxYw�wrO)�summary_errors�summary_failures�summary_xfailures�summary_warnings�summary_passes�summary_xpasses�short_test_summaryr�s r<r�z(TerminalReporter.pytest_terminal_summary�s���������������� �������������	$���#�#�%��!�!�#��
�#�#�%��!�!�#�s�A!B-�$B�'!B-�"B*�*B-c�2�|jd��|_y)NT)�funcargs)�getreprr�)r:�excinfos  r<�pytest_keyboard_interruptz*TerminalReporter.pytest_keyboard_interrupt�s��'.�����'E��$r=c�>�|j�|j�yyrO)r�r�r�s r<�pytest_unconfigurez#TerminalReporter.pytest_unconfigure�s���'�'�3��*�*�,�4r=c��|j}|�J�|j�J�|jj}|jd|�d|vr|jj
jr|j|j�y|jj|j�|jjdd��yy)Nr��KeyboardInterruptz@(to show a full traceback on KeyboardInterrupt use --full-trace)T)rY)
r��	reprcrashr�r6r�r��	fulltracer�r�ru)r:rCr�s   r<r�z*TerminalReporter._report_keyboardinterrupt�s����.�.���"�"�"�� � �,�,�,����'�'�����s�C� ��#�%��{�{�!�!�+�+��"�"�4�8�8�,��!�!�,�,�T�X�X�6����
�
�V����&r=c����d	��fd�}|rv||�}�jdk\rZ|jd�d|jdtj�k7r%|dt�jt|��zz
}|dzSd}|dzS)
Nc����jj|�}�r]|j��rL|dt��}�j	d�}|djdd�|d<|dj
|�z
}|S)Nr_rr�r)r��cwd_relative_nodeid�endswithr/rr�r�)r�rurErTr:s   ��r<�mkrelz-TerminalReporter._locationline.<locals>.mkrel�sw����;�;�2�2�6�:�D��$�-�-��/��N�s�6�{�l�+�����c�*��"�1�I�-�-�c�4�8��q�	������(�(���Kr=r\rr�\z <- z
[location]r�)r�rIrMrI)r�rr�r�SEPr!r�r)r:r�r
rHrTrrs`   `  r<rRzTerminalReporter._locationline�s����	����-�C��~�~��"�v�|�|�D�'9�!�'<�����e�i�i�A�(��v��D�N�N�D��L� I�I�I���S�y���C��S�y�r=c�$�|j}|r|Sy)Nztest session)�	head_line)r:rnrs   r<�_getfailureheadlinez$TerminalReporter._getfailureheadline�s���M�M�	����r=c��	t|jj�S#t$r,	t|j�ddcYS#t$rYYywxYwwxYw)N�2r�)rI�longreprr��AttributeError)r:rns  r<�
_getcrashlinezTerminalReporter._getcrashline�sX��	��s�|�|�-�-�.�.���	�
��3�<�<�(��"�-�-��!�
��
��	�s,�!�	A�A�A�	A�A�A�Ac�z�|jj|d�D�cgc]}t|d�r�|��c}Scc}w)Nr[�	_pdbshown)r�rre)r:r�rs   r<�
getreportszTerminalReporter.getreports�s.���:�:�>�>�$��3�S�a�7�1�k�;R��S�S��Ss�8�8c�(���jd��r�jjd�}|sy�jdu}|r|�jd}n|}t	|��_|syi}|D]-}|j|jg�j|��/d
�fd�}|rdnd}�jd|dd�	�|j�D]�\}}	||	�}
|
rT�jj|
�|j�}d
jd�|D��}|j�}n|j�}�jj|��jj����jjd�yy)Nr�r,c�>��g}|D]1}|j�j�}|s�!|j|��3t|�dkrdj	tt|��Std�|D��}dj	d�|j�D��S)N�
rc3�XK�|]"}t|�jdd�d���$y�wr�)rIr)r��locs  r<r�zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>s)����-�36�C��H�N�N�4��+�A�.�-�s�(*c3�VK�|]!\}}dj|||dkDrdnd����#y�w)z{}: {} warning{}r?r�r�N)r)r��k�vs   r<r�zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>s3����!���1�'�-�-�a��1�q�5�C�b�I�!�s�'))	r�r�r�r/r�r�rIrr?)�reports�	locationsr�rS�counts_by_filenamer:s     �r<�collapsed_location_reportzDTerminalReporter.summary_warnings.<locals>.collapsed_location_report�s�����	� �3�A� �~�~�d�k�k�:�H��!�(�(��2�3�
�y�>�B�&��9�9�S��i�%8�9�9�%,�-�:C�-�&�"��y�y�!� 2� 8� 8� :�!��r=zwarnings summary (final)zwarnings summaryr�TF)rYr�rc3�&K�|]	}d|z���y�w)r�Nr[)r�rs  r<r�z4TerminalReporter.summary_warnings.<locals>.<genexpr>s����(A�a����(A�s�zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)rzlist[WarningReport]rMrI)rr�rr�r/r<r�r�r6r?r�rur�r��rstrip)
r:�all_warningsr
�warning_reports�reports_grouped_by_message�wrrr5r��message_reports�maybe_locationr��indenteds
`            r<r�z!TerminalReporter.summary_warnings�sm����;�;�s��7;�z�z�~�~�j�7Q�L����4�4�D�@�E��".�t�/O�/O�/Q�"R��".��/2�?�/C�D�,�"��IK�&�%�
Q��*�5�5�b�j�j�"�E�L�L�R�P�
Q�
�$38�.�=O�E��N�N�3��d��N�?�,F�,L�,L�,N�

 �(���!:�?�!K��!��H�H�M�M�.�1�#�.�.�0�E�#�y�y�(A�5�(A�A�H�&�o�o�/�G�%�n�n�.�G����
�
�g�&����
�
��

 �
�H�H�M�M�Y�
�cr=c�*�|jddd�y)Nr'�PASSES�P��summary_passes_combinedr�s r<r�zTerminalReporter.summary_passess���$�$�X�x��=r=c�*�|jddd�y)Nr+�XPASSES�Xr&r�s r<r�z TerminalReporter.summary_xpassess���$�$�Y�	�3�?r=c��|jjjdk7r�|j|�r�|j	|�}|sy|jd|�|D]`}|jr7|j|�}|jd|dd��|j|�|j|j��byyy)Nrtr�r�T)rXr�)r�r�rprr
r6�sectionsr�_outrep_summary�_handle_teardown_sectionsr�)r:�
which_reports�	sep_title�
needed_optrrnr�s       r<r'z(TerminalReporter.summary_passes_combined"s����;�;���%�%��-��{�{�:�&�,0�O�O�M�,J�������s�I�.�"�?�C��|�|�"�6�6�s�;�����s�C�t�$��G��,�,�S�1��2�2�3�:�:�>�?�'�.r=c��|jd�}|D�cgc]"}|jdk(r|j|k(r|��$c}Scc}w)Nr�r�)r
r�r�)r:r�rr�s    r<�_get_teardown_reportsz&TerminalReporter._get_teardown_reports2sI���/�/�"�%��"�
���{�{�j�(�V�]�]�f�-D�
�
�	
��
s�'Ac�R�|j|�D]}|j|��yrO)r3�print_teardown_sections)r:r�r�s   r<r.z*TerminalReporter._handle_teardown_sections:s*���0�0��8�	1�F��(�(��0�	1r=c��|jjj}|dk(ry|jD]X\}}|dk7r||vr�d|vs�|jjd|�|dddk(r|dd}|jj
|��Zy)Nrtr}r�r�r�r)r�r�ryr,r�r4ru�r:rnry�secnamer#s     r<r5z(TerminalReporter.print_teardown_sections>s����k�k�(�(�4�4���$��� #���	'��G�W��e�#��7�(B���W�$������S�'�*��2�3�<�4�'�%�c�r�l�G����
�
�g�&�	'r=c�l�|jjj}|jdd|��y)Nr&�FAILURES�ro)r�r�rp�summary_failures_combined)r:ros  r<r�z!TerminalReporter.summary_failuresKs,�����"�"�*�*���&�&�x��5�&�Ir=c��|jjj}|r |jjjnd}|j	dd|��y)Nrtr*�	XFAILURESr;)r�r�rxrpr<)r:�show_tbros   r<r�z"TerminalReporter.summary_xfailuresOsE���+�+�$�$�-�-��.5����"�"�*�*�4���&�&�y�+�U�&�Kr=)r1c��|dk7r�|r|j|�r�|j|�}|sy|jd|�|dk(r*|D]$}|j|�}|j	|��&y|D]T}|j|�}|jd|dd��|j
|�|j|j��Vyyy)Nrtr�rur�T�rZr�)	rr
r6r
r�rr-r.r�)	r:r/r0ror1rrnrur�s	         r<r<z*TerminalReporter.summary_failures_combinedTs����D�=�����Z�!8�,0�O�O�M�,J�������s�I�.��F�?�&�.��#�1�1�#�6������-�.� '�C��"�6�6�s�;�����s�C�T���E��,�,�S�1��6�6�s�z�z�B�	C�"9�r=c�|�|jjjdk7r�|jd�}|sy|j	dd�|j
dD]`}|j
|�}|jdk(rd|z}nd|j�d|��}|j	d	|d
d
��|j|��byy)Nrtr-r��ERRORSr�zERROR collecting z	ERROR at z of r�TrA)	r�r�rpr
r6r�rr�r-)r:rrnr�s    r<r�zTerminalReporter.summary_errorsms����;�;���%�%��-�(,����(@�G����N�N�3��)��z�z�'�*�
*���.�.�s�3���8�8�y�(�-��3�C�%�c�h�h�Z�t�C�5�9�C����s�C�T���=��$�$�S�)�
*�.r=c�J�|j|j�|jjj}|dk(ry|j
D]S\}}|dk7r||vr�|jj
d|�|dddk(r|dd}|jj|��Uy)Nrtr}r�r�r)r�r�r�r�ryr,r4rur7s     r<r-z TerminalReporter._outrep_summary|s������t�x�x� ��k�k�(�(�4�4���$��� #���	#��G�W��e�#��7�(B���H�H�L�L��g�&��r�s�|�t�#�!�#�2�,���H�H�M�M�'�"�
	#r=c�.�|jdkrytj�|jz
}|j	�\}}g}|jdk\}|r|j
j}|D]O\}}|j
j|fi|��}	|rt|	�t|�z
z
}|j|	��Qdj|�}
|di}dt|���}|j
j|fi|��}
|rt|
�t|�z
z
}|
|
z
}
|rE|j
jd
i|��}|jd�r|dd}t|�z
}|
|z
}
|r|jd|
fd	i|��y|j|
fi|��y)Nr�rr�Tz in z���r�r��r�)r�rr�r��build_summary_stats_liner�r�rr/r�r��format_session_durationr�r6r�)r:�session_duration�partsr��
line_parts�display_sepr��textr�with_markupr��main_markup�duration�duration_with_markup�markup_for_end_seps               r<r�zTerminalReporter.summary_stats�s����>�>�B���!�;�;�=�4�+A�+A�A��"�;�;�=���
��
��n�n��)������*�*�I�!�	+�L�D�&�)�$�(�(�/�/�$�9�&�9�K���S��-��D�	�9�9�	����k�*�		+�
�i�i�
�#��!�4�(���1�2B�C�D�E��.�t�x�x���x�G�;�G�����1�2�S��]�B�B�I��#�#���!0������!C�{�!C��!�*�*�9�5�%7���%<�"���/�0�0�I��%�%�C���D�N�N�3��H�y�H�K�H��D�O�O�C�/�;�/r=c	���
���jsyd�fd�}d�fd�}d�fd�}d�fd��
d�fd��d��
�fd�}||t|d��|t|d	��t|d
��d�}g}�jD]}|j|�}|s�||�� |r.�jdd
dd��|D]}	�j	|	��yy)Nc�����jj|g�}|sy�j}|D]G}tj|t�}t||�j|di�}|j|��Iy)NT)r�rr��_color_for_type�_color_for_type_default� _get_line_with_reprcrash_messager�r�)r��statr&r�rnr~rur:s       �r<�show_simplez8TerminalReporter.short_test_summary.<locals>.show_simple�sq����Z�Z�^�^�D�"�-�F����[�[�F��
#��'�+�+�D�2I�J��7��C����E�4�=������T�"�
#r=c����	jjdg�}|D]�}|j�	jtddi�\}}�	j
j|fi|��}t�	j
�	j|�}|�d|��}|j}|r|dt|�zz
}|j|���y)Nr*r,Tr�� - �r�r�_get_verbose_word_with_markupr�rVr�r�_get_node_id_with_markuprWrIr�)
r�r*rn�verbose_word�verbose_markup�markup_wordr�rurqr:s
         �r<�show_xfailedz9TerminalReporter.short_test_summary.<locals>.show_xfailed�s�����j�j�n�n�Y��3�G��
#��/2�/P�/P��K�K�/�*�"=�t�!D�0�,��n�.�d�h�h�o�o�l�M�n�M��1�$�(�(�D�K�K��M��%��a��x�0��������E�C��K�/�/�D����T�"�
#r=c����	jjdg�}|D]�}|j�	jtddi�\}}�	j
j|fi|��}t�	j
�	j|�}|�d|��}|j}|r|dt|�zz
}|j|���y)Nr+r,Tr�r\r])
r�r+rnr`rarbr�rurqr:s
         �r<�show_xpassedz9TerminalReporter.short_test_summary.<locals>.show_xpassed�s�����j�j�n�n�Y��3�G��

#��/2�/P�/P��K�K�/�*�"=�t�!D�0�,��n�.�d�h�h�o�o�l�M�n�M��1�$�(�(�D�K�K��M��%��a��x�0��������E�C��K�/�/�D����T�"�

#r=c	�����jjdg�}|rt�j|�ng}|sy|dj	�j
tddi�\}}�jj|fi|��}d}|D]Z\}}}	}
|
j|�r|
t|�d}
|	�|jd||||	|
fz��C|jd||||
fz��\y)Nr(rr,T�	Skipped: z%s [%d] %s:%d: %sz%s [%d] %s: %s)r�r�
_folded_skipsr�r^r�rVr�r�
startswithr/r�)r�r(�fskipsr`rarbr�numr
rHrqr:s           �r<�show_skipped_foldedz@TerminalReporter.short_test_summary.<locals>.show_skipped_folded�s����+/�:�:�>�>�)�R�+H�G�?F�]�4�>�>�7�;�B�F���+2�1�:�+S�+S����o�j�9�4�@�,�(�L�.�*�$�(�(�/�/�,�I�.�I�K� �F�/5�
X�+��V�V�V��$�$�V�,�#�C��K�M�2�F��%��L�L�+�{�C���QW�.X�X���L�L�!1�[�#�v�v�4V�!V�W�
Xr=c�\���	jjdg�}|D�]	}|j�J�t|jt�sJ||jf��t|j�dk(sJ||jf��|j
�	jtddi�\}}�	jj|fi|��}t�	j�	j|�}|�d|��}|jd}|r|dt|�zz
}|j|���y)Nr(r�r,Tr�r\r\)r�rrr*rdr/r^r�rVr�rr_rIr�)
r�r(rnr`rarbr�rurqr:s
         �r<�show_skipped_unfoldedzBTerminalReporter.short_test_summary.<locals>.show_skipped_unfolded�s���+/�:�:�>�>�)�R�+H�G��
#���|�|�/�/�/�!�#�,�,��6�K��c�l�l�8K�K�6��3�<�<�(�A�-�B��S�\�\�/B�B�-�/2�/P�/P��K�K�/�*�"=�t�!D�0�,��n�.�d�h�h�o�o�l�M�n�M��1�$�(�(�D�K�K��M��%��a��x�0�����a�����E�C��K�/�/�D����T�"�
#r=c�@���jr	�|�y�|�yrO)r�)r�r:rlrns ���r<�show_skippedz9TerminalReporter.short_test_summary.<locals>.show_skippeds������#�E�*�%�e�,r=r&)rYr'r-)rr*�fr��pr�r�zshort test summary infoT)rar�)r��	list[str]rYrIrMrN)r�rsrMrN)rjrrr6r�)r:rZrcrerp�REPORTCHAR_ACTIONSr�r�rbrurlrns`         @@r<r�z#TerminalReporter.short_test_summary�s��������
	#�
	#�	#�	X�(	#�&	-�����8�4����8�4���7�3�
I
�����$�$�	�D�'�+�+�D�1�F���u�
�	�
��N�N�3� 9��4�N�P��
&������%�
&�r=c���|j�|j�|jr,|j�|jsJ�|jsJ�|j|jfSrO)r�r�rgr>r�s r<r�z TerminalReporter._get_main_colorsb�����#�t�'8�'8�'@�D�DV�DV�� � �"��#�#�#�#��$�$�$�$�����!2�!2�2�2r=c�~�|j}d|vsd|vrd}|Sd|vsd|vs|rd}|Sd|vs|jsd}|Sd}|S)	Nr&r-rZr,r+rYr'rX)r�rg)r:�unknown_type_seenr�r�s    r<�_determine_main_colorz&TerminalReporter._determine_main_color#st���
�
���u���5� 0��J���
�5�
 �I��$6�:K�!�J�
��	��
�d�&8�&8� �J���"�J��r=c���g}|jD]$}|s�|tvs�||vs�|j|��&tt�|z|_|jt
|��|_yrO)r��KNOWN_TYPESr��listr�rxrKr�)r:�
unknown_types�
found_types   r<r>z TerminalReporter._set_main_color/sf��#%�
��*�*�	5�J���[�0�Z�}�5T�!�(�(��4�	5�!��-�
�=����5�5�d�=�6I�J��r=c�x�|jjd�r|j�S|j�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 r<rHz)TerminalReporter.build_summary_stats_line8s4��(�;�;� � ��/��>�>�@�@��8�8�:�:r=c��|jj|g�}|D�cgc]}t|dd�s�|��c}Scc}w)zRGet test/collection reports for the given status key, such as `passed` or `error`.r�T)r�rrA)r:�keyrrs    r<�_get_reports_to_displayz(TerminalReporter._get_reports_to_displayQs6���*�*�.�.��b�)��"�P�a�g�a�1H�$�&O��P�P��Ps�;�;c� �|j�\}}g}|D]d}|j|�}|s�t|�}tj	|t
�}|dd||k(i}|j
dt||�z|f��f|sdt
difg}||fS)NTr��%d %szno tests ran)r�r�r/rVrrWr��	pluralize)	r:r��known_typesrKr�rr`r~rs	         r<r�z1TerminalReporter._build_normal_summary_stats_lineVs���#'�"6�"6�"8��
�K����	H�C��2�2�3�7�G���G���'�+�+�C�1H�I����v�u�
�/B�C�����g�	�%��(=�=�v�F�G�
	H��$�'>��&E�F�G�E��j� � r=c���t|jd��}t|jd��}|jdk(r
dddifg}d}no|dk(r#d}dt|jd	�z}||difg}nG|j|k(}|r	d}d
|�d�}n&d}|j|z
}|�d|j�d
|�d�}||difg}|r td}|dt|d�z|difgz
}||fS)Nr)r-rzno tests collectedrYTrXz%d %s collected�testzno tests collected (z deselected)r�z tests collected (r�)r/r�r�r�rV)r:r)r)rKr��collected_output�all_tests_were_deselectedr�s        r<rz7TerminalReporter._build_collect_only_summary_stats_lineis8����5�5�l�C�D�
��T�1�1�'�:�;������"�*�X�t�,<�=�>�E�!�J�
�1�_� �J�0�9�T�=O�=O�QW�3X�X��&��T�(:�;�<�E�(,�(:�(:�j�(H�%�(�%�
�%9�*��\�#R� �$�
��-�-�
�:��&.�Z�q��1C�1C�0D�DV�Wa�Vb�bn�#o� �&��T�(:�;�<�E��(��1�J��w��6�7�!;�;�j�$�=O�P�Q�Q�E��j� � r=rO)r�rr�z
TextIO | NonerMrN)rMz#Literal['progress', 'count', False])rMr�)rMrK)r�zbool | NonerMrN)r�rIrMrK)r�rIrrIrrKrMrNrG)rrIrrIrMrN)rMrN)r#rIrrKrr�rrIrrKrMrN)r#rIrrKrrKrMrN)ruzstr | bytesrrKrMrN)rurIrrKrMrN)NN)
r4rIr5rLr��
int | NonerrKrMrN)r�)r5rIr4rIr8rKrMrN)r�rIr8rKrMrN)rWrIr?z
Sequence[Any]rMrN)rCrrMrK)rIzwarnings.WarningMessager�rIrMrN)rMrrMrN)r?zSequence[Item]rMrN)r�rIrSztuple[str, int | None, str]rMrN)r�r$rMrN)rMzGenerator[None, object, object])rMrI)r�r#rMrN)F)r
rKrMrN)r�r%rMrN)r�zSequence[str | Sequence[str]]rMrN)r�rrMrs)r�r%r�zint | ExitCoderM�Generator[None])rMr�)r�zExceptionInfo[BaseException]rMrN)
r�rIr
rIrHr�rTrIrMrI)r�rI)r/rIr0rIr1rIrMrN)r�rIrMzlist[TestReport])r�rIrMrN)rnr$rMrN)
r/rIr0rIrorIr1rLrMrN)rnr"rMrN)rMztuple[str, list[str]])rwrKrMrI)rMz-tuple[list[tuple[str, dict[str, bool]]], str])r�rIrMz	list[Any])MrPrQrRr9r��propertyr�r�rdrer��setterr�rrrrr%r
rr�r2r6r9rurArDrKrNrPrUrtrgrrzrmrhr	r�r�r�r�r�r�r�r�r�r�r�r�r�r�rRrr
r
r�r�r�r'r3r.r5r�r�r<r�r-r�r�r�rxr>rHr�r�rr[r=r<r�r�is���B�6�*�����#��#��2��2��3��3�� �� �
���!��!��J��J�(�	2�$�&����
7��7��	7�
�7��
7��7�
�7�,49�7��&�5�*!� $�	6�
�6��6��	6�
�6�
�
6�'�!�#��

6�0�
6��
6�
�	
6�!�-����%@��	
��J�X�T��T��d������"=�A��.��.�A�"�#"�J�d��7��7�4*�2�*�	
�*��"-�,N�<�d�����,:��	����4�d��$��$�F�-�� ���#&��0:��DG��	��.��T�4�l>�@�?� �?�-0�?�>A�?�	
�?� 
�1�'�J�L�"&�
C��C��C�
�C��
C�
�C�2
*�#�#0�Jl&�\3�
�K�;�2Q�
!�	6�!�&!�	6�!r=r�c��|j|j�}|jd�^}}|r*|jdj	|�d��}|dz|zS|S)NrTr�)r�r�rrr�)�twr�rnr��pathrK�parts_markups       r<r_r_�sZ��
�
'�
'��
�
�
3�F��<�<��%�L�D�5���y�y����5�!1��y�=���d�{�\�)�)��r=c�X�|jd�}|dk7r|d|}d}t|jd��}|t|�z|kDry|t|�z|kDr@|t|�z}|d|}|t|�z|kDr|dd}|t|�z|kDr�||z
}|j|�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�)�findrrr/)rr�rr�i�ellipsis�format_widths      r<rjrj�s���	�����A��B�w��"�1�g���H��F�M�M�"�-�.�L��c�(�m�#�o�5���h�s�m�#�o�5��3�x�=�(���"�?�#���X�c�]�*�_�<��c�r�(�C��X�c�]�*�_�<��x����=�=���r=c��|j||�\}}|j|fi|��}t|||�}|�d|��}t|�}		|jj
j}
t�s|jjdk\rd|
��}
n|j|	z
}td|
|�}
|
�||
z
}|S#t$rY|SwxYw)z?Get summary line for a report, trying to add reprcrash message.r�r\r\z - {})
r^rr_rrr�r�rr�rar�rjr	)r�rnr��word_markupr`rarYr[ru�
line_widthr�rrs            r<rXrX�s���$'�#D�#D���$� �L�.��2�9�9�\�4�^�4�D�#�B���4�D��V�1�T�F��D��$��J���l�l�$�$�,�,���?�f�m�m�3�3�q�8���u�+�C� �l�l�Z�7�O�!�'�3��@�C��?��C�K�D��K���
���K�
�s�	 B7�7	C�Cc�>�i}|D]�}|j�J�t|jt�sJ||jf��t|j�dk(sJ||jf��|j\}}}t	|t|��}t
|di�}|jdk(rd|vr
d|vr|d|f}n|||f}|j|g�j|���g}	|j�D]#\}}
|	jt|
�g|����%|	S)Nr��keywordsr��skip�
pytestmark)rr*rdr/r!rrAr�r<r�r?)r�r(�d�eventr
rHrqr�r�rE�eventss           r<rhrh�s+��AC�A��,���~�~�)�)�)��%�.�.�%�0�I�5�%�.�.�2I�I�0��5�>�>�"�a�'�@�%����)@�@�'�!&��������Y��V��5���5�*�b�1��

�J�J�'�!��(�"��H�,�06��f�/E�C��6�6�*�C�	���S�"��$�$�U�+�',�(68�F��w�w�y�+���V��
�
�s�6�{�)�S�)�*�+��Mr=rZrYrX)r&r-r,r'c�T�|dvr||fS|jdd�}||dk7r|dzfS|fS)N)r-r,r�r,�warningr?r�)r�)r`�nouns  r<r�r��sD���0�0��d�{��
�<�<�
�I�.�D����
�$��*�4�4��4�4r=c��g}|D]L\}}|j�d|j��}|jd�r|dd}||vs�<|j|��N|S)Nr�zpytest-�)�project_namer�rir�)r�rErM�distr�s     r<r�r�sg���F�"� �����#�#�$�A�d�l�l�^�4���?�?�9�%����8�D��v���M�M�$�� ��Mr=c�h�|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�)�secondszs (r^)�datetime�	timedeltar�)r��dts  r<rIrIsA����|��#��a� � �
�
�
��G��
5���#��c�"��Q�'�'r=c�<�t|d�r-|j}|jd�r|td�d}|S|jsJ�t|jt�sJ�|j\}}}|jd�r|td�d}|S|dk(rd}|S)zqGet the reason string of a skip/xfail/xpass test report.

    The string is just the part given by the user.
    rWzreason: Nrg�Skippedr�)rerWrir/r(r*rrd)r�rqr�s   r<riris���
�v�z�"��������Z�(��C�
�O�-�.�F��
��~�~��~��&�/�/�5�1�1�1������1�f����[�)��C��,�.�/�F��
��y�
 ��F��
r=)rCrrMrN)r�rrMrN)r�rrMrI)r�r"rMztuple[str, str, str])r�rr�rrnr")rrIr�rIrrr�rMrL)
r�rrnr"r�rr�zdict[str, bool]rMrI)r�rr(zSequence[CollectReport]rMz&list[tuple[int, str, int | None, str]])r`r�r�rIrMztuple[int, str])rMrs)r��floatrMrI)r�r$rMrI)VrS�
__future__r�argparse�collectionsr�dataclassesr��	functoolsrr��pathlibrr�r�r!�typingrrr	r
rrr
rrrrr,r�r�rr�
_pytest._coder�_pytest._code.coder�_pytest._ior�_pytest._io.wcwidthr�_pytest._version�_pytest.assertion.utilrr�rrrr�_pytest.config.argparsingr�
_pytest.nodesrr�_pytest.pathlibr r!�_pytest.reportsr"r#r$�_pytest.mainr%r�rzr��Actionr0rVr�r�r�r��	dataclassr�r�r_rjrXrhrVrWr�r�rIrir[r=r<�<module>r�s����
#���������
������������ ��
���'�,�&�(��0�(�!�#�#�,���(�'�&�)�&��$� #��	����"=�h�o�o�"=�J/��/�(O�d	B��2
�$��,��,�
�������8�]!�]!��]!�@!��2���#��)7��FU����<���
$��,��@�
���	��#��
5��(�r=

Youez - 2016 - github.com/yon3zu
LinuXploit