
UF                 @   s   d  Z  d d l m Z d d l Z d d l Z d d l Z d d l Z e j e  Z	 Gd d   d e j
  Z Gd d   d e j
  Z y  d d l m Z d	 Z e Z Wn e k
 r d
 Z e Z Yn Xd S)a  setuptools/distutils commands to run testr via setup.py

Currently provides 'testr' which runs tests using testr. You can pass
--coverage which will also export PYTHON='coverage run --source <your package>'
and automatically combine the coverage from each testr backend test runner
after the run completes.

To use, just use setuptools/distribute and depend on testr, and it should be
picked up automatically (as the commands are exported in the testrepository
package metadata.
    )cmdNc            	   @   s   e  Z d  Z d Z d! d" d# d$ d% d& d' g Z d d d g Z d d   Z d d   Z d d   Z d d   Z	 d d   Z
 d d    Z d S)(	TestrRealzRun unit tests using testrcoverageNGReplace PYTHON with coverage and merge coverage from each testr worker.testr-args=tRun 'testr' with these argsomit=o(Files to omit from coverage calculationscoverage-package-name="Use this name for coverage packageslowest-Show slowest test times after tests complete.no-parallelRun testr serially
log-level=lLog level (default: info)no_parallelc             G   sC   t  j d |  t j t j d g t |  t j t j t j	  S)Nz _run_testr called with args = %rr   )
loggerdebugcommandsZrun_argvsysargvliststdinstdoutstderr)selfargs r!   3/usr/lib/python3/dist-packages/pbr/testr_command.py
_run_testrC   s    zTestrReal._run_testrc             C   sC   d  |  _  d  |  _ d |  _ d  |  _ d  |  _ d  |  _ d |  _ d  S)N info)
testr_argsr   omitr   coverage_package_namer   	log_level)r   r!   r!   r"   initialize_optionsH   s    						zTestrReal.initialize_optionsc             C   s   t  t |  j j   t j  |  _ t j d |  j  t j d  |  j d  k r\ g  |  _ n |  j j	   |  _ |  j
 r d |  j
 |  _
 t j d |  j  d  S)Nlevelzfinalize_options calledz	--omit=%sz$finalize_options: self.__dict__ = %r)getattrloggingr)   upperINFOZbasicConfigr   r   r&   splitr'   __dict__)r   r!   r!   r"   finalize_optionsQ   s    	zTestrReal.finalize_optionsc             C   s   t  j d  t j j d  s, |  j d  |  j r? |  j   |  j sc |  j d d |  j	  } n |  j d |  j	  } | r t
 j j d |   |  j r t d  |  j d  |  j r |  j   d	 S)
z"Set up testr repo, then run testr.z
run calledz.testrepositoryZinitrunz
--parallelztestr failed (%d)zSlowest Testsr   N)r   r   ospathisdirr#   r   _coverage_beforer   r&   	distutilserrorsZDistutilsErrorr   print_coverage_after)r   Z	testr_retr!   r!   r"   r3   `   s     	
			
	zTestrReal.runc             C   s   t  j d  |  j j   } | j d  r; | d d   } |  j rM |  j } d | } d | t j d <t  j d t j d  d  S)Nz_coverage_before calledzpython-   z--source %s --parallel-modezcoverage run %sPYTHONzos.environ['PYTHON'] = %r)r   r   ZdistributionZget_name
startswithr(   r4   environ)r   packageZoptionsr!   r!   r"   r7   u   s    		
zTestrReal._coverage_beforec             C   s2   t  j d  t j d  t j d |  j  d  S)Nz_coverage_after calledzcoverage combinezcoverage html -d ./cover %s)r   r   r4   systemr'   )r   r!   r!   r"   r;      s    zTestrReal._coverage_after)zcoverageNr   )r   r   r   )r	   r
   r   )r   Nr   )zslowestNr   )r   Nr   )r   r   r   )__name__
__module____qualname__descriptionuser_optionsZboolean_optionsr#   r*   r2   r3   r7   r;   r!   r!   r!   r"   r   2   s   		r   c               @   s@   e  Z d  Z d Z g  Z d d   Z d d   Z d d   Z d S)		TestrFakezRun unit tests using testrc             C   s   d  S)Nr!   )r   r!   r!   r"   r*      s    zTestrFake.initialize_optionsc             C   s   d  S)Nr!   )r   r!   r!   r"   r2      s    zTestrFake.finalize_optionsc             C   s   t  d  d  S)Nz7Install testrepository to run 'testr' command properly.)r:   )r   r!   r!   r"   r3      s    zTestrFake.runN)rB   rC   rD   rE   rF   r*   r2   r3   r!   r!   r!   r"   rG      s
   rG   )r   TF)__doc__r8   r   Zdistutils.errorsr-   r4   r   Z	getLoggerrB   r   ZCommandr   rG   Ztestrepositoryr   Z
have_testrZTestrImportErrorr!   r!   r!   r"   <module>'   s   V
