a
    ñ»j¨  ã                   @   sÞ   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZ ddlmZ d dlmZ d d	lmZ d d
lmZ G dd„ deƒZG dd„ dƒZG dd„ deƒZdS )é    N)ÚDistutilsErrorÚDistutilsOptionError)Úlog)Ú
TestLoader)Úresource_listdirÚresource_existsÚnormalize_pathÚworking_setÚevaluate_markerÚadd_activation_listenerÚrequireé   )Úmetadata)ÚCommand)Úunique_everseen)Ú	pass_nonec                   @   s   e Zd Zdd„ Zddd„ZdS )ÚScanningLoaderc                 C   s   t  | ¡ tƒ | _d S ©N)r   Ú__init__ÚsetÚ_visited©Úself© r   ú=E:\soccer\ml_env\Lib\site-packages\setuptools/command/test.pyr      s    
zScanningLoader.__init__Nc                 C   sâ   || j v rdS | j  |¡ g }| t | |¡¡ t|dƒrH| | ¡ ¡ t|dƒrÀt|jdƒD ]`}| 	d¡rŒ|dkrŒ|jd |dd…  }n"t
|j|d	 ƒr^|jd | }nq^| |  |¡¡ q^t|ƒd
krÖ|  |¡S |d S dS )a  Return a suite of all tests cases contained in the given module

        If the module is a package, load tests from all the modules in it.
        If the module has an ``additional_tests`` function, call it and add
        the return value to the tests.
        NÚadditional_testsÚ__path__Ú z.pyz__init__.pyÚ.éýÿÿÿz/__init__.pyé   r   )r   ÚaddÚappendr   ÚloadTestsFromModuleÚhasattrr   r   Ú__name__Úendswithr   ZloadTestsFromNameÚlenZ
suiteClass)r   ÚmoduleÚpatternZtestsÚfileÚ	submoduler   r   r   r#      s$    



z"ScanningLoader.loadTestsFromModule)N)r%   Ú
__module__Ú__qualname__r   r#   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd„ Zddd„ZdS )ÚNonDataPropertyc                 C   s
   || _ d S r   ©Úfget)r   r0   r   r   r   r   C   s    zNonDataProperty.__init__Nc                 C   s   |d u r| S |   |¡S r   r/   )r   ÚobjÚobjtyper   r   r   Ú__get__F   s    zNonDataProperty.__get__)N)r%   r,   r-   r   r3   r   r   r   r   r.   B   s   r.   c                   @   s¢   e Zd ZdZdZg d¢Zdd„ Zdd„ Zedd	„ ƒZ	d
d„ Z
dd„ Zejddd„ƒZeejdd„ ƒƒZedd„ ƒZdd„ Zdd„ Zedd„ ƒZeedd„ ƒƒZdS )Útestz.Command to run unit tests after in-place buildz0run unit tests after in-place build (deprecated)))ztest-module=Úmz$Run 'test_suite' in specified module)ztest-suite=Úsz9Run single test, case or suite (e.g. 'module.test_suite'))ztest-runner=ÚrzTest runner to usec                 C   s   d | _ d | _d | _d | _d S r   )Ú
test_suiteÚtest_moduleÚtest_loaderÚtest_runnerr   r   r   r   Úinitialize_options[   s    ztest.initialize_optionsc                 C   sŒ   | j r| jrd}t|ƒ‚| j d u rD| jd u r8| jj | _ n| jd | _ | jd u r^t| jdd ƒ| _| jd u rnd| _| jd u rˆt| jdd ƒ| _d S )Nz1You may specify a module or a suite, but not bothz.test_suiter:   z&setuptools.command.test:ScanningLoaderr;   )r8   r9   r   Údistributionr:   Úgetattrr;   )r   Úmsgr   r   r   Úfinalize_optionsa   s    




ztest.finalize_optionsc                 C   s   t |  ¡ ƒS r   )ÚlistÚ
_test_argsr   r   r   r   Ú	test_argss   s    ztest.test_argsc                 c   s*   | j sdV  | jrdV  | j r&| j V  d S )NÚdiscoverz	--verbose)r8   Úverboser   r   r   r   rB   w   s    ztest._test_argsc                 C   s2   |   ¡ � |ƒ  W d  ƒ n1 s$0    Y  dS )zI
        Backward compatibility for project_on_sys_path context.
        N)Úproject_on_sys_path)r   Úfuncr   r   r   Úwith_project_on_sys_path   s    
ztest.with_project_on_sys_pathr   c              
   c   s  |   d¡ | jddd� |   d¡ |  d¡}tjd d … }tj ¡ }z¢t|jƒ}tj 	d|¡ t
 ¡  tdd„ ƒ td|j|jf ƒ |  |g¡� d V  W d   ƒ n1 s®0    Y  W |tjd d …< tj ¡  tj |¡ t
 ¡  n.|tjd d …< tj ¡  tj |¡ t
 ¡  0 d S )	NÚegg_infoÚ	build_extT)Zinplacer   c                 S   s   |   ¡ S r   )Úactivate)Údistr   r   r   Ú<lambda>—   ó    z*test.project_on_sys_path.<locals>.<lambda>z%s==%s)Úrun_commandÚreinitialize_commandÚget_finalized_commandÚsysÚpathÚmodulesÚcopyr   Zegg_baseÚinsertr	   r   r   r   Úegg_nameZegg_versionÚpaths_on_pythonpathÚclearÚupdate)r   Zinclude_distsZei_cmdÚold_pathZold_modulesZproject_pathr   r   r   rF   †   s,    




&

ý
ztest.project_on_sys_pathc              
   c   s°   t ƒ }tj d|¡}tj dd¡}zdtj t| ƒ¡}td||gƒ}tj |¡}|r\|tjd< dV  W ||u r|tj dd¡ q¬|tjd< n$||u r tj dd¡ n
|tjd< 0 dS )zë
        Add the indicated paths to the head of the PYTHONPATH environment
        variable so that subprocesses will also see the packages at
        these paths.

        Do this in a context that restores the value on exit.
        Ú
PYTHONPATHr   N)	ÚobjectÚosÚenvironÚgetÚpathsepÚjoinr   ÚfilterÚpop)ÚpathsZnothingZorig_pythonpathZcurrent_pythonpathÚprefixZto_joinÚnew_pathr   r   r   rX   ¡   s     

ýztest.paths_on_pythonpathc                 C   sD   |   | j¡}|   | jpg ¡}|   dd„ | j ¡ D ƒ¡}t |||¡S )z†
        Install the requirements indicated by self.distribution and
        return an iterable of the dists that were built.
        c                 s   s0   | ](\}}|  d ¡rt|dd… ƒr|V  qdS )ú:r    N)Ú
startswithr
   )Ú.0ÚkÚvr   r   r   Ú	<genexpr>Ã   s   þz%test.install_dists.<locals>.<genexpr>)Zfetch_build_eggsZinstall_requiresZtests_requireZextras_requireÚitemsÚ	itertoolsÚchain)rL   Zir_dZtr_dZer_dr   r   r   Úinstall_dists»   s    
þztest.install_distsc              	   C   sº   |   dtj¡ |  | j¡}d | j¡}| jr>|   d| ¡ d S |   d| ¡ tt	 
d¡|ƒ}|  |¡�@ |  ¡ � |  ¡  W d   ƒ n1 sŽ0    Y  W d   ƒ n1 s¬0    Y  d S )Nz»WARNING: Testing via this command is deprecated and will be removed in a future version. Users looking for a generic test entry point independent of test runner are encouraged to use tox.ú zskipping "%s" (dry run)zrunning "%s"Úlocation)Úannouncer   ÚWARNrq   r=   rb   Ú_argvÚdry_runÚmapÚoperatorÚ
attrgetterrX   rF   Ú	run_tests)r   Zinstalled_distsÚcmdre   r   r   r   ÚrunÊ   s    û
ztest.runc                 C   sV   t jd d | j|  | j¡|  | j¡dd�}|j ¡ sRd|j }|  |t	j
¡ t|ƒ‚d S )NF)Z
testLoaderZ
testRunnerÚexitzTest failed: %s)ÚunittestÚmainrv   Ú_resolve_as_epr:   r;   ÚresultZwasSuccessfulrt   r   ÚERRORr   )r   r4   r?   r   r   r   r{   á   s    

ú

ztest.run_testsc                 C   s   dg| j  S )Nr   )rC   r   r   r   r   rv   ï   s    z
test._argvc                 C   s   t j| ddd� ¡ ƒ S )zu
        Load the indicated attribute value, called, as a as if it were
        specified as an entry point.
        N)ÚvalueÚnameÚgroup)r   Ú
EntryPointÚload)Úvalr   r   r   r�   ó   s    ztest._resolve_as_epN)r   )r%   r,   r-   Ú__doc__ÚdescriptionÚuser_optionsr<   r@   r.   rC   rB   rH   Ú
contextlibÚcontextmanagerrF   ÚstaticmethodrX   rq   r}   r{   Úpropertyrv   r   r�   r   r   r   r   r4   L   s.   



r4   )r^   ry   rR   r�   ro   r   Údistutils.errorsr   r   Ú	distutilsr   r   Úpkg_resourcesr   r   r   r	   r
   r   r   Z
_importlibr   Ú
setuptoolsr   Z setuptools.extern.more_itertoolsr   Z"setuptools.extern.jaraco.functoolsr   r   r.   r4   r   r   r   r   Ú<module>   s    $	(
