3
LYW!                 @   s   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 d dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dlmZ G d	d
 d
eZG dd deZG dd deZdS )    N)DistutilsOptionError)
TestLoader)six)mapfilter)resource_listdirresource_existsnormalize_pathworking_set_namespace_packagesadd_activation_listenerrequire
EntryPoint)Command)unittest_mainc               @   s   e Zd ZdddZdS )ScanningLoaderNc             C   s   g }|j tj| | t|dr.|j |j  t|drxpt|jdD ]`}|jdrt|dkrt|jd |dd  }n"t|j|d	 rF|jd | }nqF|j | j	| qFW t
|d
kr| j|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.
        additional_tests__path__ z.pyz__init__.py.N   z/__init__.py   r   )appendr   loadTestsFromModulehasattrr   r   __name__endswithr   ZloadTestsFromNamelenZ
suiteClass)selfmodulepatterntestsfile	submodule r%   q/private/var/folders/7d/20zwc49s3kn54d3vgq8bd4640000gn/T/pip-build-an2lx5zf/setuptools/setuptools/command/test.pyr      s    


z"ScanningLoader.loadTestsFromModule)N)r   
__module____qualname__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 )N)fget)r   r*   r%   r%   r&   __init__4   s    zNonDataProperty.__init__Nc             C   s   |d kr| S | j |S )N)r*   )r   objZobjtyper%   r%   r&   __get__7   s    zNonDataProperty.__get__)N)r   r'   r(   r+   r-   r%   r%   r%   r&   r)   3   s   r)   c               @   s   e Zd ZdZdZd%d&d'gZdd Zdd Zedd Z	dd Z
dd Zejg fddZeejdd Zedd Zdd Zdd Zed d! Zed"d# Zd$S )(testz.Command to run unit tests after in-place buildz#run unit tests after in-place buildtest-module=m$Run 'test_suite' in specified moduletest-suite=s1Test suite to run (e.g. 'some_module.test_suite')test-runner=rTest runner to usec             C   s   d | _ d | _d | _d | _d S )N)
test_suitetest_moduletest_loadertest_runner)r   r%   r%   r&   initialize_optionsI   s    ztest.initialize_optionsc             C   s   | j r| jrd}t|| j d krD| jd kr8| jj | _ n| jd | _ | jd kr^t| jdd | _| jd krnd| _| jd krt| 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_optionsO   s    




ztest.finalize_optionsc             C   s   t | j S )N)list
_test_args)r   r%   r%   r&   	test_argsb   s    ztest.test_argsc             c   s   | j rdV  | jr| jV  d S )Nz	--verbose)verboser8   )r   r%   r%   r&   rB   f   s    ztest._test_argsc          	   C   s   | j   |  W dQ R X dS )zI
        Backward compatibility for project_on_sys_path context.
        N)project_on_sys_path)r   funcr%   r%   r&   with_project_on_sys_pathl   s    
ztest.with_project_on_sys_pathc       	      c   sP  t jot| jdd}|rv| jddd | jd | jd}t|j}| jd|d | jd | jddd | jd n"| jd | jdd	d | jd | jd}t	j
d d  }t	jj }zbt|j}t	j
jd| tj  td
d  td|j|jf  | j|g d V  W d Q R X W d |t	j
d d < t	jj  t	jj| tj  X d S )Nuse_2to3Fbuild_pyr   )Zinplaceegg_info)egg_base	build_extr   c             S   s   | j  S )N)activate)distr%   r%   r&   <lambda>   s    z*test.project_on_sys_path.<locals>.<lambda>z%s==%s)r   PY3r>   r=   reinitialize_commandrun_commandget_finalized_commandr	   	build_libsyspathmodulescopyrK   insertr
   r+   r   r   egg_nameZegg_versionpaths_on_pythonpathclearupdate)	r   Zinclude_distsZ	with_2to3Zbpy_cmdZ
build_pathZei_cmdZold_pathZold_modulesZproject_pathr%   r%   r&   rE   s   s8    









ztest.project_on_sys_pathc             c   s   t  }tjjd|}tjjdd}z>tjj| }td||g}tjj|}|rX|tjd< dV  W d||krztjjdd n
|tjd< X 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   pop)pathsZnothingZorig_pythonpathZcurrent_pythonpathprefixZto_joinnew_pathr%   r%   r&   r[      s    


ztest.paths_on_pythonpathc             C   s,   | j | jpg }| j | jpg }tj||S )z
        Install the requirements indicated by self.distribution and
        return an iterable of the dists that were built.
        )Zfetch_build_eggsZinstall_requiresZtests_require	itertoolschain)rN   Zir_dZtr_dr%   r%   r&   install_dists   s    ztest.install_distsc             C   s   | j | j}dj| j}| jr0| jd|  d S | jd|  ttjd|}| j	|" | j
  | j  W d Q R X W d Q R X d S )N zskipping "%s" (dry run)zrunning "%s"location)rk   r=   rd   _argvdry_runannouncer   operator
attrgetterr[   rE   	run_tests)r   installed_distscmdrf   r%   r%   r&   run   s    
ztest.runc             C   s   t jrt| jddr| jjdd }|tkrg }|tjkrD|j	| |d7 }x"tjD ]}|j
|rT|j	| qTW tttjj| td d | j| j| j| j| jd d S )NrH   Fr   r   )Z
testLoaderZ
testRunner)r   rP   r>   r=   r8   splitr   rU   rW   r   
startswithrA   r   __delitem__r   rn   _resolve_as_epr:   r;   )r   r    Zdel_modulesnamer%   r%   r&   rs      s    



ztest.run_testsc             C   s   dg| j  S )Nunittest)rC   )r   r%   r%   r&   rn      s    z
test._argvc             C   s$   | dkrdS t jd|  }|j  S )zu
        Load the indicated attribute value, called, as a as if it were
        specified as an entry point.
        Nzx=)r   parseresolve)valparsedr%   r%   r&   rz      s    ztest._resolve_as_epN)r/   r0   r1   )r2   r3   r4   )r5   r6   r7   )r   r'   r(   __doc__descriptionuser_optionsr<   r@   r)   rC   rB   rG   
contextlibcontextmanagerrE   staticmethodr[   rk   rv   rs   propertyrn   rz   r%   r%   r%   r&   r.   =   s(    -
r.   )r`   rq   rU   r   ri   Zdistutils.errorsr   r|   r   Zsetuptools.externr   Zsetuptools.extern.six.movesr   r   pkg_resourcesr   r   r	   r
   r   r   r   r   
setuptoolsr   Zsetuptools.py31compatr   r   r_   r)   r.   r%   r%   r%   r&   <module>   s   ( 
