
    c                         d Z ddlmZ ddlZddlZddlZddlZddlZ ej                  e	      Z
 G d dej                        Z G d dej                        Z	 ddlmZ d	ZeZy# e$ r d
ZeZY yw xY w)a  setuptools/distutils command to run testr via setup.py

PBR will hook in the Testr class to provide "setup.py test" when
.testr.conf is present in the repository (see pbr/hooks/commands.py).

If we are activated but testrepository is not installed, we provide a
sensible error.

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.

    )cmdNc                   D    e Zd ZdZg dZg dZd Zd Zd Zd Z	d Z
d	 Zy
)	TestrRealz&DEPRECATED: Run unit tests using testr))coverageNzGReplace PYTHON with coverage and merge coverage from each testr worker.)ztestr-args=tzRun 'testr' with these args)zomit=oz(Files to omit from coverage calculations)zcoverage-package-name=NzLUse this name to select packages for coverage (one or more, comma-separated))slowestNz-Show slowest test times after tests complete.)zno-parallelNzRun testr serially)z
log-level=lzLog level (default: info))r   r	   no_parallelc                     t         j                  d|       t        j                  t        j
                  d   gt        |      z   t        j                  t        j                  t        j                        S )Nz _run_testr called with args = %rr   )
loggerdebugcommandsrun_argvsysargvliststdinstdoutstderr)selfargss     3/usr/lib/python3/dist-packages/pbr/testr_command.py
_run_testrzTestrReal._run_testrH   sN    7>  #((1+d!;!$CJJ

D 	D    c                 f    d | _         d | _        d| _        d | _        d | _        d | _        d| _        y )N info)
testr_argsr   omitr	   coverage_package_namer   	log_levelr   s    r   initialize_optionszTestrReal.initialize_optionsM   s5    	%)"r   c                    t        t        | j                  j                         t        j                        | _        t        j
                  | j                         t        j                  d       | j                  g | _        n| j                  j                         | _        | j                  rd| j                  z  | _
        t        j                  d| j                         y )N)levelzfinalize_options calledz	--omit=%sz$finalize_options: self.__dict__ = %r)getattrloggingr"   upperINFObasicConfigr   r   r   splitr    __dict__r#   s    r   finalize_optionszTestrReal.finalize_optionsV   s     NN  "LL 	$..1./??" DO"oo335DO99#dii/DI;T]]Kr   c                 \   t         j                  d       t        j                  dt               t
        j                  j                  d      s| j                  d       | j                  r| j                          | j                  s | j                  ddg| j                   }n | j                  dg| j                   }|r"t        j                  j                  d|z        | j                   rt#        d       | j                  d	       | j                  r| j%                          y
y
)z"Set up testr repo, then run testr.z
run calledzctestr integration in pbr is deprecated. Please use the 'testr' setup command or call testr directlyz.testrepositoryinitrunz
--parallelztestr failed (%d)zSlowest Testsr	   N)r   r   warningswarnDeprecationWarningospathisdirr   r   _coverage_beforer   r   	distutilserrorsDistutilsErrorr	   print_coverage_after)r   	testr_rets     r   r1   zTestrReal.rune   s    \" K(	* ww}}./OOF#==!!#'|NdooNI'@@I""11#i/1 1<</"OOI&==  " r   c                 B   t         j                  d       | j                  j                         }|j	                  d      r|dd  }| j
                  r| j
                  }d|z  }d|z  t        j                  d<   t         j                  dt        j                  d          y )Nz_coverage_before calledzpython-   z--source %s --parallel-modezcoverage run %sPYTHONzos.environ['PYTHON'] = %r)r   r   distributionget_name
startswithr!   r5   environ)r   packageoptionss      r   r8   zTestrReal._coverage_before   s    ./##,,.i(abkG %%00G/'9 1G ;

80"**X2FGr   c                     t         j                  d       t        j                  d       t        j                  d| j                  z         t        j                  d| j                  z         y )Nz_coverage_after calledzcoverage combinezcoverage html -d ./cover %sz'coverage xml -o ./cover/coverage.xml %s)r   r   r5   systemr    r#   s    r   r=   zTestrReal._coverage_after   sH    -.
		$%
		/$));<
		;diiGHr   N)__name__
__module____qualname__descriptionuser_optionsboolean_optionsr   r$   r.   r1   r8   r=    r   r   r   r   5   s7    :KL =OD
 L#4HIr   r   c                   &    e Zd ZdZg Zd Zd Zd Zy)	TestrFakezRun unit tests using testrc                      y NrP   r#   s    r   r$   zTestrFake.initialize_options       r   c                      y rT   rP   r#   s    r   r.   zTestrFake.finalize_options   rU   r   c                     t        d       y )Nz7Install testrepository to run 'testr' command properly.)r<   r#   s    r   r1   zTestrFake.run   s    GHr   N)rJ   rK   rL   rM   rN   r$   r.   r1   rP   r   r   rR   rR      s    .KLIr   rR   )r   TF)__doc__r9   r   distutils.errorsr(   r5   r   r2   	getLoggerrJ   r   Commandr   rR   testrepositoryr   
have_testrTestrImportErrorrP   r   r   <module>r`      s   :    	 
 			8	$[I [I|I I'JE JEs   
A% %	A10A1