B
    `                 @   s   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	m
Z
 d dlmZ d d	lmZ erxd d
lmZ dZe
ddddZejeddddZeddddZG dd dZdS )    )List)Optional)TYPE_CHECKINGN)nodes)Config)Parser)Session)
TestReport)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 )NZ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)ZgetgroupZ	addoption)r   group r   X/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/_pytest/stepwise.pypytest_addoption   s    
r   )configr   c             C   s    |  dr| jt| d d S )Nr   Zstepwiseplugin)	getoptionZpluginmanagerregisterStepwisePlugin)r   r   r   r   pytest_configure&   s    
r   )sessionr   c             C   s0   | j ds,| j jd k	st| j jtg  d S )Nr   )r   r   cacheAssertionErrorsetSTEPWISE_CACHE_DIR)r   r   r   r   pytest_sessionfinish-   s    r"   c               @   st   e Zd ZeddddZeddddZeeej	 ddd	d
Z
eddddZee dddZddddZdS )r   N)r   r   c             C   sH   || _ d | _d| _|jd k	s t|j| _| jtd | _|d| _	d S )N r   )
r   r   report_statusr   r   getr!   
lastfailedr   skip)selfr   r   r   r   __init__5   s    zStepwisePlugin.__init__)r   r   c             C   s
   || _ d S )N)r   )r(   r   r   r   r   pytest_sessionstart>   s    z"StepwisePlugin.pytest_sessionstart)r   itemsr   c             C   s   | j sd| _d S d }x&t|D ]\}}|j| j kr|}P qW |d krLd| _n2d| 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.)r+   )r&   r$   	enumeratenodeidhookZpytest_deselected)r(   r   r+   Zfailed_indexindexitemZ
deselectedr   r   r   pytest_collection_modifyitemsA   s    
z,StepwisePlugin.pytest_collection_modifyitems)reportr   c             C   sf   |j rF| jr&|j| jkrd | _d| _qb|j| _| jd k	s<td| j_n|jdkrb|j| jkrbd | _d S )NFz0Test failed, continuing from this test next run.call)failedr'   r-   r&   r   r   Z
shouldstopwhen)r(   r2   r   r   r   pytest_runtest_logreportY   s    

z'StepwisePlugin.pytest_runtest_logreport)r   c             C   s&   | j ddkr"| jr"d| j S d S )Nverboser   z
stepwise: )r   r   r$   )r(   r   r   r   pytest_report_collectionfinishq   s    z-StepwisePlugin.pytest_report_collectionfinishc             C   s   | j t| j d S )N)r   r    r!   r&   )r(   r   r   r   r"   v   s    z#StepwisePlugin.pytest_sessionfinish)__name__
__module____qualname__r   r)   r   r*   r   r   ZItemr1   r	   r6   r   strr8   r"   r   r   r   r   r   4   s   	
r   )typingr   r   r   ZpytestZ_pytestr   Z_pytest.configr   Z_pytest.config.argparsingr   Z_pytest.mainr   Z_pytest.reportsr	   Z_pytest.cacheproviderr
   r!   r   Zhookimplr   r"   r   r   r   r   r   <module>   s    