a
    4ñ»jà  ã                   @   s\   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddl	Z	ddl
Z
G dd„ deƒZdS )ae  
Setuptools command for behave.

.. code-block:: console

    python setup.py behave_test
    python setup.py behave_test --format=progress3
    python setup.py behave_test --args=features/one.feature
    python setup.py behave_test --tags=-xfail --args=features

.. seealso::

    * http://pypi.python.org/pypi/behave
    * http://github.com/behave/behave
é    )ÚCommand)Údir_util)ÚfnmatchNc                   @   s’   e Zd ZdZd ZdZdZdZdZdZ	ddd	e fd
dddde fgZ
dgZdd„ Zdd„ Zdd„ Zd"dd„Zd#dd„Zdd„ Zdd„ Zd d!„ ZdS )$Úbehave_testz”
    Simple test runner that runs 'behave' via a "setup.py" file.
    This ensures that all requirements are provided before the tests are run.
    zRun feature tests with behaveÚprogressÚfeaturesz.eggsFzformat=ÚfzUse formatter (default: %s))ztags=Útz-Use tags to select/exclude features/scenarios)údry-runÚdzUse dry-run modezargs=NzFeatures to run (default: %s)r
   c                 C   s    | j | _d | _d | _| j| _d S )N)Údefault_formatÚformatÚtagsÚdry_runÚdefault_argsÚargs©Úself© r   ú7E:\soccer\ml_env\Lib\site-packages\setuptools_behave.pyÚinitialize_options0   s    zbehave_test.initialize_optionsc                 C   s&   |   d| j¡ |  d¡ |  d¡ d S )Nr   r   r   )Úensure_stringr   Ú#ensure_string_list_with_comma_wordsÚensure_string_listr   r   r   r   Úfinalize_options6   s    
zbehave_test.finalize_optionsc                 C   s.   t | |dƒ}|sdS t |¡}t| ||ƒ dS )zÈEnsures that a string with whitespace separated words
        is converted into list of strings.
        Note that commas are allowed in words
        (compared :meth:`ensure_string_list()`).
        N)ÚgetattrÚshlexÚsplitÚsetattr)r   ÚoptionÚvalueÚpartsr   r   r   r   ;   s
    
z/behave_test.ensure_string_list_with_comma_wordsÚ.c              	   C   sl   |   d¡ t ¡ }zHt |¡ | jjr6| j | jj¡ | jjrN| j | jj¡ W t 	|¡ nt 	|¡ 0 d S )NZ&ensure_required_packages_are_installed)
ÚannounceÚosÚgetcwdr   ÚmkpathÚdistributionZinstall_requiresZfetch_build_eggsZtests_requireÚchdir)r   Zinstall_dirZinitial_dirr   r   r   Ú'_ensure_required_packages_are_installedG   s    

z3behave_test._ensure_required_packages_are_installedÚ*c                    s   ‡ ‡fdd„t  ˆ ¡D ƒ}|S )Nc                    s$   g | ]}t |ˆƒrtj ˆ |¡‘qS r   )r   r$   ÚpathÚjoin)Ú.0r   ©r+   Úpatternr   r   Ú
<listcomp>V   s   ÿz-behave_test._select_paths.<locals>.<listcomp>)r$   Úlistdir)r   r+   r/   Úselectedr   r.   r   Ú_select_pathsU   s    ÿzbehave_test._select_pathsc                 C   sŠ   t j dd¡}t j}dd„ | |¡D ƒ}| dt  ¡ ¡ |  |d¡}|r^dd„ |D ƒ|dd…< | |¡t jd< | j	d	t jd  d
d� |S )NÚ
PYTHONPATHÚ c                 S   s   g | ]}|r|‘qS r   r   )r-   Úxr   r   r   r0   ]   ó    zAbehave_test._setup_env_with_local_python_path.<locals>.<listcomp>r   z*.eggc                 S   s   g | ]}t j |¡‘qS r   )r$   r+   Úabspath)r-   Úpr   r   r   r0   a   r7   é   zUse PYTHONPATH=%sé   ©Úlevel)
r$   ÚenvironÚgetÚpathsepr   Úinsertr%   r3   r,   r#   )r   Úegg_install_dirr4   r@   ZPPATHZ
local_eggsr   r   r   Ú!_setup_env_with_local_python_pathZ   s    z-behave_test._setup_env_with_local_python_pathc                 C   sX   | j }|  |¡ |  |¡}| jD ](}|  |¡}|r | jddd� t|ƒ‚q |tjd< |S )NZFAILEDé   r<   r4   )	Úlocal_egg_dirr)   rC   r   Úbehaver#   Ú
SystemExitr$   r>   )r   rB   ZOLD_PYTHONPATHr+   Ú
returncoder   r   r   Úrunf   s    





zbehave_test.runc                 C   s”   t j dd¡}t j |¡sd}d}| jr8dd | j¡ }| jrF|d7 }|d| j|f 7 }| jd	||f d
d� t 	|¡}t
 tjg| t 	|¡ ¡S )NÚbinrF   z	-m behaver5   z--tags=z --tags=z
 --dry-runz --format=%s %szCMDLINE: python %s %sr;   r<   )r$   r+   r,   Úexistsr   r   r   r#   r   r   Ú
subprocessÚcallÚsysÚ
executable)r   r+   rF   Úcmd_optionsZ
behave_cmdr   r   r   rF   t   s    
zbehave_test.behave)r"   )r"   r*   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úcommand_nameÚdescriptionr   r   rE   Zcommand_consumes_argumentsÚuser_optionsÚboolean_optionsr   r   r   r)   r3   rC   rI   rF   r   r   r   r   r      s.   ÿü

r   )rT   Ú
setuptoolsr   Ú	distutilsr   r   Úos.pathr$   rN   r   rL   r   r   r   r   r   Ú<module>   s   