
i\c           @` sT  d  Z  d d l m Z d d l m 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
 m Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z d   Z d e f d     YZ d   Z 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_import(   t   division(   t   print_functionN(   t	   getimfunc(   t   hookimpl(   t   fail(   t   skip(   t   xfail(   t   Class(   t   Functionc         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(    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   pytest_pycollect_makeitem   s    R   c           B` s    e  Z e Z d    Z d   Z RS(   c         c` sq  d d l  m } |  j } t | d t  s/ d  St | d t  } | sa |  j |  |  j   n  |  j j	 j
 |  d t |   } t } xm | j |  j  D]Y } t |  j |  } t | d t  s q n  t |  } t | d |  d | Vt } q W| smt |  j d d   }	 |	 d  k	 rmt j j d	 d   }
 |
 d  k sS|	 |
 j j k rjt d d |  Vqjqmn  d  S(
   Ni    (   t
   TestLoadert   __test__t   __unittest_skip__R
   R   t   callobjt   runTests   twisted.trial.unittest(   R
   R   R   t   getattrt   Truet   Falset   _inject_setup_teardown_fixturest   _inject_setup_class_fixturet   sessiont   _fixturemanagert   parsefactoriest   getTestCaseNamesR   t   TestCaseFunctiont   NoneR   R   t   getR   R   (   t   selfR   t   clst   skippedt   loadert   foundsomethingR   t   xt   funcobjt   runtestt   ut(    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   collect%   s0    		
c         C` sd   t  | d d d d d t } | r0 | | _ n  t  | d d d d d t } | r` | | _ n  d	 S(
   sw   Injects a hidden auto-use fixture to invoke setUpClass/setup_method and corresponding
        teardown functions (#517)t
   setUpClasst   tearDownClasst   scopet   classt	   pass_selft   setup_methodt   teardown_methodt   functionN(   t   _make_xunit_fixtureR   t!   _UnitTestCase__pytest_class_setupR   t"   _UnitTestCase__pytest_method_setup(   R'   R(   t   class_fixturet   method_fixture(    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyR   C   s    (   t   __name__t
   __module__R   t
   nofuncargsR0   R   (    (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyR       s   	c         ` sq   t  |  | d    t  |  | d     d  k r@  d  k r@ d  St j d | d t      f d    } | S(   NR3   t   autousec         3` s   t  |  d d   r+ |  j } t j |  n   d  k	 rZ   rP  |  | j  qZ    n  d  V d  k	 r   r  |  | j  q    n  d  S(   NR   (   R   R%   t   __unittest_skip_why__t   pytestR   R8   (   R'   t   requestt   reason(   R5   t   setupt   teardown(    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   fixtureY   s    	
(   R   R%   RC   RH   R   (   R   t
   setup_namet   teardown_nameR3   R5   RH   (    (   R5   RF   RG   s/   lib/python2.7/site-packages/_pytest/unittest.pyR9   S   s    -R$   c           B` s   e  Z e Z d 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` sE   |  j  j |  j  |  _ |  j   t |  d  rA |  j j   n  d  S(   Nt   _request(   R   R   R   t	   _testcaset   _fix_unittest_skip_decoratort   hasattrRK   t   _fillfixtures(   R'   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyRF   r   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   R>   N(   R   t   version_infot   setattrRL   R   (   R'   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyRM   x   s    
c         C` s   d  |  _ d  S(   N(   R%   RL   (   R'   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyRG      s    c         C` s   d  S(   N(    (   R'   t   testcase(    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt	   startTest   s    c         C` s#  t  | d |  } y$ t j j |  } | 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 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   valuet	   tracebackt	   TypeErrort   format_exceptiont   insertR   t   joinR   R   t   KeyboardInterruptt   from_currentt   __dict__t
   setdefaultt   append(   R'   t
   rawexcinfot   excinfot   values(    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   _addexcinfo   s2    
c         C` s   |  j  |  d  S(   N(   Ri   (   R'   RR   Rf   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   addError   s    c         C` s   |  j  |  d  S(   N(   Ri   (   R'   RR   Rf   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt
   addFailure   s    c         C` sE   y t  |  Wn0 t  j k
 r@ t |  _ |  j t j    n Xd  S(   N(   R   R   R   t   _skipped_by_markRi   R   t   exc_info(   R'   RR   RE   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   addSkip   s
    	RU   c         C` sB   y t  t |   Wn' t  j k
 r= |  j t j    n Xd  S(   N(   R   t   strR   Ri   R   Rm   (   R'   RR   Rf   RE   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   addExpectedFailure   s    c         C` s   | |  _  d  S(   N(   t   _unexpectedsuccess(   R'   RR   RE   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   addUnexpectedSuccess   s    c         C` s   d  S(   N(    (   R'   RR   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt
   addSuccess   s    c         C` s   d  S(   N(    (   R'   RR   (    (    s/   lib/python2.7/site-packages/_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   RB   RU   i    i   (
   R   RL   t   _testMethodNamet	   __class__R   t   _addSkipR]   R   RP   R   (   R'   t
   testMethodt   skip_why(    (    s/   lib/python2.7/site-packages/_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	   pdbinvoket   result(   t   configt   pluginmanagert
   get_pluginR%   RL   Rz   t   debug(   R'   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyR.      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&   (   R,   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   <lambda>   RU   (   R	   t   _prunetracebackR\   t   filter(   R'   Rg   R\   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyR      s
    	N(   R>   R?   R   R@   R%   RW   RL   RF   RM   RG   RS   Ri   Rj   Rk   Rn   Rp   Rr   Rs   Rt   Rz   R.   R   (    (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyR$   m   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$   RW   t   popRg   R|   t   AttributeError(   t   itemt   call(    (    s/   lib/python2.7/site-packages/_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   Rm   RT   t   typeR]   (   R'   t	   exc_valuet   exc_typet   exc_tbR   (   t   Failure__init__(    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   excstore  s    (   R   R$   R   R   t   Failuret   __init__t(   check_testcase_implements_trial_reporterR%   (   R   R/   R   (    (   R   s/   lib/python2.7/site-packages/_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$   Re   (   t   doneR   R   (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyR     s    (   t   __doc__t
   __future__R    R   R   R   R\   t   _pytest._codeRX   RC   t   _pytest.compatR   t   _pytest.configR   t   _pytest.outcomesR   R   R   t   _pytest.pythonR   R	   R   R   R9   R$   R   R   R   R   (    (    (    s/   lib/python2.7/site-packages/_pytest/unittest.pyt   <module>   s*   	3	