
^Yc           @` s  d  Z  d d l m Z m Z m Z d d l Z d d l Z d d l Z d d l	 m
 Z
 d d l m Z m Z d d l m Z m Z m Z m Z d d l m Z m Z d   Z d	 e f d
     YZ d e f d     YZ e
 d e  d    Z e
 d e  d    Z g  d  Z d S(   s>    discovery and running of std-library "unittest" style tests. i    (   t   absolute_importt   divisiont   print_functionN(   t   hookimpl(   t   failt   skip(   t   transfer_markerst   Classt   Modulet   Function(   t   MarkEvaluatort   xfailc         C` sF   y! t  | t j d j  s  d  SWn t k
 r5 d  SXt | d |  S(   Nt   unittestt   parent(   t
   issubclasst   syst   modulest   TestCaset	   Exceptiont   UnitTestCase(   t	   collectort   namet   obj(    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   pytest_pycollect_makeitem   s    R   c           B` s    e  Z e Z d    Z d   Z RS(   c         C` s   |  j  } t | d t  r d  St | d d   } | d  k	 rG |   n  t | d d   } | d  k	 ru |  j |  n  t t |   j   d  S(   Nt   __unittest_skip__t
   setUpClasst   tearDownClass(   R   t   getattrt   Falset   Nonet   addfinalizert   superR   t   setup(   t   selft   clsR    t   teardown(    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyR       s    	
c         c` sa  d d l  m } |  j } t | d t  s/ d  S|  j j j |  d t |   } |  j t	  j } t
 } x} | j |  j  D]i } t |  j |  } t | d t  s q| n  t | d |  } t | | |  t | d |  Vt } q| W| s]t |  j d d   }	 |	 d  k	 r]t j j d d   }
 |
 d  k sC|	 |
 j j k rZt d d |  VqZq]n  d  S(	   Ni    (   t
   TestLoadert   __test__R   t   im_funcR   t   runTests   twisted.trial.unittest(   R   R$   R   R   t   Truet   sessiont   _fixturemanagert   parsefactoriest	   getparentR   R   t   getTestCaseNamesR   t   TestCaseFunctionR   R   R   t   getR   R'   (   R!   R$   R"   t   loadert   modulet   foundsomethingR   t   xt   funcobjt   runtestt   ut(    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   collect+   s,    		
(   t   __name__t
   __module__R(   t
   nofuncargsR    R7   (    (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyR      s   	R.   c           B` s   e  Z d Z d    Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d d	  Z d d
  Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s   |  j  j |  j  |  _ |  j   t |  j |  j  |  _ t |  j d  rb |  j j |  j  n  t |  d  r |  j	 j
   n  d  S(   Nt   setup_methodt   _request(   R   R   R   t	   _testcaset   _fix_unittest_skip_decoratorR   t   _objt   hasattrR;   R<   t   _fillfixtures(   R!   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyR    H   s    
c         C` s0   t  j d d k r, t |  j d |  j  n  d S(   sO  
        The @unittest.skip decorator calls functools.wraps(self._testcase)
        The call to functools.wraps() fails unless self._testcase
        has a __name__ attribute. This is usually automatically supplied
        if the test is a function or method, but we need to add manually
        here.

        See issue #1169
        i    i   R8   N(   R   t   version_infot   setattrR=   R   (   R!   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyR>   Q   s    
c         C` s>   t  |  j d  r( |  j j |  j  n  d  |  _ d  |  _ d  S(   Nt   teardown_method(   R@   R=   RD   R?   R   (   R!   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyR#   ^   s    	c         C` s   d  S(   N(    (   R!   t   testcase(    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt	   startTeste   s    c         C` s  t  | d |  } y t j j |  } Wn t k
 r y} y< t j |   } | j d d  t d j	 |  d t
 Wn: t j t f k
 r   n t d | f d t
 n XWq t k
 r   q t j k
 r t j j   } q Xn X|  j j d g   j |  d  S(   Nt   _rawexcinfoi    sC   NOTE: Incompatible Exception Representation, displaying natively:

t    t   pytraces8   ERROR: Unknown Incompatible Exception representation:
%rt   _excinfo(   R   t   _pytestt   _codet   ExceptionInfot	   TypeErrort	   tracebackt   format_exceptiont   insertR   t   joinR   R   t   KeyboardInterruptt   __dict__t
   setdefaultt   append(   R!   t
   rawexcinfot   excinfot   l(    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   _addexcinfoh   s&    c         C` s   |  j  |  d  S(   N(   RZ   (   R!   RE   RW   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   addError   s    c         C` s   |  j  |  d  S(   N(   RZ   (   R!   RE   RW   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt
   addFailure   s    c         C` sZ   y t  |  WnE t  j k
 rU t |  d  |  _ t |  j _ |  j t j    n Xd  S(   Nt   SkipTest(	   R   R   R
   t	   _evalskipR(   t   resultRZ   R   t   exc_info(   R!   RE   t   reason(    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   addSkip   s    RH   c         C` sB   y t  t |   Wn' t  j k
 r= |  j t j    n Xd  S(   N(   R   t   strR   RZ   R   R`   (   R!   RE   RW   Ra   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   addExpectedFailure   s    c         C` s   | |  _  d  S(   N(   t   _unexpectedsuccess(   R!   RE   Ra   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   addUnexpectedSuccess   s    c         C` s   d  S(   N(    (   R!   RE   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt
   addSuccess   s    c         C` s   d  S(   N(    (   R!   RE   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   stopTest   s    c         C` s   t  |  j |  j j  } t  |  j j d t  sB t  | d t  r t  |  j j d d  pi t  | d d  } y |  j j |  |  j |  Wn= t k
 r t j d d k r   n  |  j j |  |  n Xt	 St S(   NR   t   __unittest_skip_why__RH   i    i   (
   R   R=   t   _testMethodNamet	   __class__R   t   _addSkipRN   R   RB   R(   (   R!   t
   testMethodt   skip_why(    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   _handle_skip   s    c         C` sO   |  j  j j d  d  k r. |  j d |   n |  j   r> d  S|  j j   d  S(   Nt	   pdbinvokeR_   (   t   configt   pluginmanagert
   get_pluginR   R=   Ro   t   debug(   R!   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyR5      s
    c         C` s;   t  j |  |  | j j d    } | r7 | | _ n  d  S(   Nc         S` s   |  j  j j d  S(   Nt
   __unittest(   t   framet	   f_globalsR/   (   R3   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   <lambda>   s    (   R	   t   _prunetracebackRO   t   filter(   R!   RX   RO   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyRy      s
    	N(   R8   R9   R   RJ   R    R>   R#   RF   RZ   R[   R\   Rb   Rd   Rf   Rg   Rh   Ro   R5   Ry   (    (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyR.   E   s    														t   tryfirstc         C` sU   t  |  t  rQ |  j rQ |  j j d  | _ y
 | ` WqN t k
 rJ qN XqQ n  d  S(   Ni    (   t
   isinstanceR.   RJ   t   popRX   R_   t   AttributeError(   t   itemt   call(    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   pytest_runtest_makereport   s    	
t   hookwrapperc         #` s   t  |  t  ry d t j k ry t j d } | j j   t   d  d  d  d    f d  } | | j _ d  V  | j _ n d  Vd  S(   Ns   twisted.trial.unittests   twisted.python.failurec         ` s   | d  k r t j   |  _ n- | d  k r9 t |  } n  | | | f |  _ y   |  | | | d | Wn$ t k
 r   |  | | |  n Xd  S(   Nt   captureVars(   R   R   R`   RG   t   typeRN   (   R!   t	   exc_valuet   exc_typet   exc_tbR   (   t   Failure__init__(    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   excstore   s    (   R|   R.   R   R   t   Failuret   __init__t(   check_testcase_implements_trial_reporterR   (   R   R6   R   (    (   R   s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   pytest_runtest_protocol   s    	c         C` sH   |  r
 d  Sd d l  m } d d l m } | t |  |  j d  d  S(   Ni    (   t   classImplements(   t	   IReporteri   (   t   zope.interfaceR   t   twisted.trial.itrialR   R.   RV   (   t   doneR   R   (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyR      s    (   t   __doc__t
   __future__R    R   R   R   RO   t   _pytest._codeRK   t   _pytest.configR   t   _pytest.runnerR   R   t   _pytest.pythonR   R   R   R	   t   _pytest.skippingR
   R   R   R   R.   R(   R   R   R   (    (    (    s0   /tmp/pip-build-hU8Cw8/pytest/_pytest/unittest.pyt   <module>   s   "	+z