o
    Zh                  
   @   s   d 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Z
dZd	Z	
ddee de	dee dee fddZde	defddZ	
	
ddee dee dee dee fddZdee dedee fddZd
S )zUtilities for truncating assertion output.

Current default behaviour is to truncate assertion explanations at
terminal lines, unless running with an assertions verbosity level of at least 2 or running on CI.
    )List)Optional)util)Config)Item   i  zuse '-vv' to showNexplanationitem
max_lengthreturnc                 C   s   t |rt| S | S )zGTruncate this assertion explanation if the given test item is eligible.)_should_truncate_item_truncate_explanation)r   r	   r
    r   Q/var/www/html/lang_env/lib/python3.10/site-packages/_pytest/assertion/truncate.pytruncate_if_required   s   r   c                 C   s    | j tj}|dk ot  S )z9Whether or not this test item is eligible for truncation.   )configZget_verbosityr   ZVERBOSITY_ASSERTIONSr   Zrunning_on_ci)r	   verboser   r   r   r      s   r   input_lines	max_lines	max_charsc           	      C   s   |du rt }|du rt}td| }|d }|d }t| |kr'||kr'| S | d| }d}td||kr>t||}nd}t| t| }|d r[|d d |d< |rZ|d	7 }nd|d< g |dd
| d|d	krndnd dt S )a  Truncate given list of strings that makes up the assertion explanation.

    Truncates to either 8 lines, or 640 characters - whichever the input reaches
    first, taking the truncation explanation into account. The remaining lines
    will be replaced by a usage message.
    N F   r   TFz...   z...Full output truncated (z linesz
 hidden), )DEFAULT_MAX_LINESDEFAULT_MAX_CHARSlenjoin_truncate_by_char_count	USAGE_MSG)	r   r   r   Zinput_char_countZtolerable_max_charsZtolerable_max_linesZtruncated_explanationZtruncated_charZtruncated_line_countr   r   r   r   #   sH   r   c                 C   sp   d}t | D ]\}}|t| |kr n|t|7 }q| d | }| | }|r1|| }|d | }|| |S )Nr   )	enumerater   append)r   r   Ziterated_char_countZiterated_indexZ
input_lineZtruncated_resultZ
final_lineZfinal_line_truncate_pointr   r   r   r    g   s   
r    )N)NN)__doc__typingr   r   Z_pytest.assertionr   Z_pytest.configr   Z_pytest.nodesr   r   r   r!   strintr   boolr   r   r    r   r   r   r   <module>   s@    
	
"D