o
    #ifj                     @   s   d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d d	lZer<d d
lmZ dZde	dd	fddZejdedd	fddZdedd	fddZG dd dZd	S )    )List)Optional)TYPE_CHECKING)nodes)Config)Parser)Session)
TestReportN)Cachezcache/stepwiseparserreturnc                 C   s:   |  d}|jddddddd |jd	d
ddddd d S )Ngeneralz--swz
--stepwise
store_trueFstepwisezBExit on test failure and continue from last failing test next time)actiondefaultdesthelpz	--sw-skipz--stepwise-skipstepwise_skipz_Ignore the first failing test but stop on the next failing test. Implicitly enables --stepwise.)getgroup	addoption)r   group r   I/var/www/html/corbot_env/lib/python3.10/site-packages/_pytest/stepwise.pypytest_addoption   s"   

r   configc                 C   s4   | j jrd| j _| dr| jt| d d S d S )NTr   stepwiseplugin)optionr   r   	getoptionpluginmanagerregisterStepwisePlugin)r   r   r   r   pytest_configure(   s
   
r"   sessionc                 C   sD   | j ds | j jd usJ t| j drd S | j jtg  d S d S )Nr   workerinput)r   r   cachehasattrsetSTEPWISE_CACHE_DIRr#   r   r   r   pytest_sessionfinish1   s   r*   c                   @   sz   e Zd ZdeddfddZdeddfddZded	eej	 ddfd
dZ
deddfddZdee fddZdddZdS )r!   r   r   Nc                 C   sH   || _ d | _d| _|jd usJ |j| _| jtd | _|d| _d S )N r   )	r   r#   report_statusr%   getr(   
lastfailedr   skip)selfr   r   r   r   __init__=   s   zStepwisePlugin.__init__r#   c                 C   s
   || _ d S )Nr)   )r0   r#   r   r   r   pytest_sessionstartF   s   
z"StepwisePlugin.pytest_sessionstartitemsc                 C   s   | j sd| _d S d }t|D ]\}}|j| j kr|} nq|d u r&d| _d S d| d| _|d | }|d |= |jj|d d S )Nz)no previously failed tests, not skipping.z/previously failed test not found, not skipping.z	skipping z already passed items.)r3   )r.   r,   	enumeratenodeidhookpytest_deselected)r0   r   r3   failed_indexindexitem
deselectedr   r   r   pytest_collection_modifyitemsI   s   

z,StepwisePlugin.pytest_collection_modifyitemsreportc                 C   sr   |j r%| jr|j| jkrd | _d| _d S |j| _| jd usJ d| j_d S |jdkr5|j| jkr7d | _d S d S d S )NFz0Test failed, continuing from this test next run.call)failedr/   r5   r.   r#   
shouldstopwhen)r0   r=   r   r   r   pytest_runtest_logreporta   s   



z'StepwisePlugin.pytest_runtest_logreportc                 C   s&   | j ddkr| jrd| j S d S )Nverboser   z
stepwise: )r   r   r,   r0   r   r   r   pytest_report_collectionfinishy   s   z-StepwisePlugin.pytest_report_collectionfinishc                 C   s$   t | jdrd S | jt| j d S )Nr$   )r&   r   r%   r'   r(   r.   rD   r   r   r   r*   ~   s   z#StepwisePlugin.pytest_sessionfinish)r   N)__name__
__module____qualname__r   r1   r   r2   r   r   Itemr<   r	   rB   r   strrE   r*   r   r   r   r   r!   <   s    	
r!   )typingr   r   r   _pytestr   _pytest.configr   _pytest.config.argparsingr   _pytest.mainr   _pytest.reportsr	   pytest_pytest.cacheproviderr
   r(   r   hookimplr"   r*   r!   r   r   r   r   <module>   s"    