
    "e}                         d dl mZ d dlmZ d dlZd dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlZ G d d	e      Zdad
 Zej$                  Zd Zee_        y)    )MultiProcessTestRunner)PluginN)pydev_runfiles_xml_rpc)start_coverage_support)contextmanager)StringIOc                   v    e Zd Zd Zd Zd Z G d de      Zed        Z	d Z
ddZd	 Zd
 Zd Zd Zd Zd Zy)PydevPluginc                 <    || _         t        j                  |        y N)configurationr   __init__)selfr   s     E/usr/lib/python3/dist-packages/_pydev_runfiles/pydev_runfiles_nose.pyr   zPydevPlugin.__init__   s    *    c                 z    t        j                          | _        t        | j                        \  | _        | _        y r   )time
start_timer   r   coverage_filescoverage)r   s    r   beginzPydevPlugin.begin   s)    ))+-CDDVDV-W*T]r   c                     | j                   j                          | j                   j                          t        j                  dt        j
                         | j                  z
  fz         y )NzFinished in: %.2f secs.)r   stopsaver   notifyTestRunFinishedr   r   )r   results     r   finalizezPydevPlugin.finalize   sO    445NRVR[R[R]`d`o`oRoQq5qrr   c                       e Zd Zy)PydevPlugin.SentinelN)__name__
__module____qualname__ r   r   Sentinelr   '   s    r   r$   c              #     K   |j                   }| j                  }| j                  }	 d|j                  v r|j                  j                  d      }	 |j                  j
                  }|j                  `	 d  || j                  ur||j                  d<   || j                  ur||j                  _        y y #  Y jxY w#  Y NxY w# || j                  ur||j                  d<   || j                  ur||j                  _        w w xY ww)Naddress)testr$   __dict__pop	__class__r&   )r   r'   user_test_instanceuser_addressuser_class_addresss        r   _without_user_addressz!PydevPlugin._without_user_address*   s
     "YY}}!]]	.7771::>>yI	!3!=!=!E!E",,4
	J4==09E"++I6!67I",,4 7!		
 4==09E"++I6!67I",,4 7s@   %D)B7 "B> 5C 9>D7B;9D>C D?DDc                 :   	 t        |d      r6| j                  |      5  |j                         }d d d        d   |d   f}|S 	 |d   |d   f}|S # 1 sw Y   "xY w# t        $ rX |j                  j
                  }|j                  d      r|d d }n#|j                  d      r|d t        d        dz   }|d	f}Y |S w xY w#  t        j                  j                  d
       t        j                          t        j                  j                  d       d}Y |S xY w)Nr&   r         z.pycz	$py.classz.py?zYPyDev: Internal pydev error getting test address. Please report at the pydev bug tracker
z


)r3   r3   )hasattrr.   r&   	TypeErrorcontext__file__endswithlensysstderrwrite	traceback	print_exc)r   r'   r&   fs       r   _get_test_addresszPydevPlugin._get_test_addressF   s%   	tY'//5 -"llnG- "!*gaj0$ 	%"1gtAw.G 5- - ! %--Azz&)crFK00K 001E9fG %	JJyz!JJX&GsA   C AC 
A AC AB>:C =B>>C ADc                     | j                  |      }| j                  |      }	 dt        j                         |j                  z
  z  }t	        j
                  ||||d   |d   |       y#  d}Y 'xY w)z.
        @param cond: fail, error, ok
        z%.2fr3   r   r1   N)r@   get_io_from_errorr   _pydev_start_timer   
notifyTest)r   condr'   captured_outputerrorr&   error_contentstime_strs           r   report_condzPydevPlugin.report_conde   sy    
 ((.//6	t/E/E!EFH 	))$QXYZQ[]def]giqr	Hs   $A) )A/c                     t        j                          |_        | j                  |      \  }}t        j                  ||       y r   )r   rC   r@   r   notifyStartTest)r   r'   files      r   	startTestzPydevPlugin.startTestt   s4    !%++D1
d..tT:r   c                    t        |      t        d      k(  rlt        |      dk7  rt        |      dk(  r|d   S t               }|\  }}}t        |t              r|S t        j                  ||||       |j                         S |S )Nr#      r0   r1   )rM   )typer9   r   
isinstancestrr=   print_exceptiongetvalue)r   errsetypevaluetbs         r   rB   zPydevPlugin.get_io_from_errory   sx    9R 3x1}s8q=q6M
A"E5"%%%%eUBQ?::<
r   c                 L    t        |d      r|j                  r|j                  S y)NcapturedOutput )r4   r\   r   r'   s     r   get_captured_outputzPydevPlugin.get_captured_output   s$    4)*t/B/B&&&r   c                 J    | j                  d|| j                  |      |       y )NrG   rJ   r_   r   r'   rV   s      r   addErrorzPydevPlugin.addError   s'    $$T*		
r   c                 J    | j                  d|| j                  |      |       y )Nfailra   rb   s      r   
addFailurezPydevPlugin.addFailure   s'    $$T*		
r   c                 J    | j                  d|| j                  |      d       y )Nokr]   ra   r^   s     r   
addSuccesszPydevPlugin.addSuccess   s'    $$T*		
r   N)r]   )r    r!   r"   r   r   r   objectr$   r   r.   r@   rJ   rN   rB   r_   rc   rf   ri   r#   r   r   r
   r
      s^    X
s6  J J6>s;




r   r
   c                 $    t        |       at        S r   )r
   PYDEV_NOSE_PLUGIN_SINGLETON)r   s    r   !start_pydev_nose_plugin_singletonrm      s    "-m"<&&r   c                 |   t        | ||      }t        j                         j                  }|j                  d   }|j                  d      }|d| ||dz   d g}|\  }}}	}
}|	s|
r@|	D ]  }t        j                  d|||        |
D ]  }t        j                  d|||        |S t        j                  d||       |S )z
    Used so that it can work with the multiprocess plugin.
    Monkeypatched because nose seems a bit unsupported at this time (ideally
    the plugin would have this support by default).
    addr:Nr1   re   rG   rh   )originalr:   	_getframef_backf_localsrindexrl   rJ   )r   r   batch_resultretparent_framero   ioutputtestsRunfailureserrorserrorClassesfailurerG   s                 r   new_consolidater      s     4
.C==?))L   (DCA!Hd1q56l#D7C4FHh6 	SG'33FD&'R	S  	RE'33GT65Q	R
 J 	$//dFCJr   )nose.plugins.multiprocessr   nose.plugins.baser   r:   _pydev_runfilesr   r   '_pydev_runfiles.pydev_runfiles_coverager   
contextlibr   ior   r=   r
   rl   rm   consolidaterq   r   r#   r   r   <module>r      sY    < $ 
 2  J %  R
& R
j # ' "--8 &5  "r   