ó
X¾÷Xc           @   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	 d e j
 f d „  ƒ  YZ d e j
 f d „  ƒ  YZ y  d d l m Z e Z e Z Wn e k
 rÆ e Z e Z n Xd S(	   sÙ  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.

iÿÿÿÿ(   t   cmdNt	   TestrRealc        	   B   sn   e  Z d  Z d d d d d d d  g Z d d d g Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(!   s   Run unit tests using testrt   coveragesG   Replace PYTHON with coverage and merge coverage from each testr worker.s   testr-args=t   ts   Run 'testr' with these argss   omit=t   os(   Files to omit from coverage calculationss   coverage-package-name=sL   Use this name to select packages for coverage (one or more, comma-separated)t   slowests-   Show slowest test times after tests complete.s   no-parallels   Run testr seriallys
   log-level=t   ls   Log level (default: info)t   no_parallelc         G   sC   t  j d | ƒ t j t j d g t | ƒ t j t j t j	 ƒ S(   Ns    _run_testr called with args = %ri    (
   t   loggert   debugt   commandst   run_argvt   syst   argvt   listt   stdint   stdoutt   stderr(   t   selft   args(    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyt
   _run_testrG   s    c         C   sC   d  |  _ d  |  _ d |  _ d  |  _ d  |  _ d  |  _ d |  _ d  S(   Nt    t   info(   t   Nonet
   testr_argsR   t   omitR   t   coverage_package_nameR   t	   log_level(   R   (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyt   initialize_optionsL   s    						c         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 |  _ n  t j d |  j ƒ d  S(   Nt   levels   finalize_options calleds	   --omit=%ss$   finalize_options: self.__dict__ = %r(   t   getattrt   loggingR   t   uppert   INFOt   basicConfigR   R	   R   R   t   splitR   t   __dict__(   R   (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyt   finalize_optionsU   s    	c         C   sÕ   t  j d ƒ t j j d ƒ s/ |  j d ƒ n  |  j rE |  j ƒ  n  |  j si |  j d d |  j	 Œ } n |  j d |  j	 Œ } | r t
 j j d | ƒ ‚ n  |  j r» d GH|  j d ƒ n  |  j rÑ |  j ƒ  n  d	 S(
   s"   Set up testr repo, then run testr.s
   run calleds   .testrepositoryt   initt   runs
   --parallels   testr failed (%d)s   Slowest TestsR   N(   R   R	   t   ost   patht   isdirR   R   t   _coverage_beforeR   R   t	   distutilst   errorst   DistutilsErrorR   t   _coverage_after(   R   t	   testr_ret(    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyR'   d   s     					c         C   sƒ   t  j d ƒ |  j j ƒ  } | j d ƒ r8 | d } n  |  j rM |  j } n  d | } d | t j d <t  j d t j d ƒ d  S(   Ns   _coverage_before calleds   python-i   s   --source %s --parallel-modes   coverage run %st   PYTHONs   os.environ['PYTHON'] = %r(   R   R	   t   distributiont   get_namet
   startswithR   R(   t   environ(   R   t   packaget   options(    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyR+   y   s    	
c         C   sF   t  j d ƒ t j d ƒ t j d |  j ƒ t j d |  j ƒ d  S(   Ns   _coverage_after calleds   coverage combines   coverage html -d ./cover %ss'   coverage xml -o ./cover/coverage.xml %s(   R   R	   R(   t   systemR   (   R   (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyR/   †   s    N(   s   coverageNsG   Replace PYTHON with coverage and merge coverage from each testr worker.(   s   testr-args=R   s   Run 'testr' with these args(   s   omit=R   s(   Files to omit from coverage calculations(   s   coverage-package-name=NsL   Use this name to select packages for coverage (one or more, comma-separated)(   s   slowestNs-   Show slowest test times after tests complete.(   s   no-parallelNs   Run testr serially(   s
   log-level=R   s   Log level (default: info)(   t   __name__t
   __module__t   descriptionR   t   user_optionst   boolean_optionsR   R   R%   R'   R+   R/   (    (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyR   4   s   							t	   TestrFakec           B   s/   e  Z d  Z g  Z d „  Z d „  Z d „  Z RS(   s   Run unit tests using testrc         C   s   d  S(   N(    (   R   (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyR   ‘   s    c         C   s   d  S(   N(    (   R   (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyR%   ”   s    c         C   s	   d GHd  S(   Ns7   Install testrepository to run 'testr' command properly.(    (   R   (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyR'   —   s    (   R9   R:   R;   R<   R   R%   R'   (    (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyR>      s
   		(   R
   (   t   __doc__R,   R    t   distutils.errorsR   R(   R   t	   getLoggerR9   R   t   CommandR   R>   t   testrepositoryR
   t   Truet
   have_testrt   Testrt   ImportErrort   False(    (    (    s.   /tmp/pip-build-h1VYrz/pbr/pbr/testr_command.pyt   <module>)   s   Y
