
Mc           @   s   d  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 Z d d l	 m
 Z
 m Z e j d k  r d   Z e Z n d	   Z e Z d
 e f d     YZ d S(   s`   
Helpers for the OpenSSL test suite, largely copied from
U{Twisted<http://twistedmatrix.com/>}.
iN(   t   mktemp(   t   TestCase(   t   Errort   _exception_from_error_queuei   i    c         C   s   |  S(   N(    (   t   s(    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   b   s    c         C   s   |  j  d  S(   Nt   charmap(   t   encode(   R   (    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyR      s    R   c           B   s   e  Z d  Z d   Z d
 d  Z e Z d
 d  Z e Z d
 d  Z	 e	 Z
 d   Z e Z d
 Z d   Z d   Z d   Z d	   Z RS(   s   
    L{TestCase} adds useful testing functionality beyond what is available
    from the standard library L{unittest.TestCase}.
    c         C   s   t  rp |  j d k	 rp xX |  j D]J } t j j |  rG t j |  q t j j |  r t j	 |  q q Wn  y t
   WnM t k
 r t j   d } | j g  f k r |  j d t |   q n Xd S(   s   
        Clean up any files or directories created using L{TestCase.mktemp}.
        Subclasses must invoke this method if they override it or the
        cleanup will not occur.
        i   s)   Left over errors in OpenSSL error queue: N(   t   Falset   _temporaryFilest   Nonet   ost   patht   isdirt   shutilt   rmtreet   existst   unlinkR   R   t   syst   exc_infot   argst   failt   repr(   t   selft   tempt   e(    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   tearDown!   s    c         C   s2   | | k r. |  j  | p% d | | f   n  | S(   s  
        Fail the test if C{containee} is not found in C{container}.

        @param containee: the value that should be in C{container}
        @param container: a sequence type, or in the case of a mapping type,
                          will follow semantics of 'if key in dict.keys()'
        @param msg: if msg is None, then the failure message will be
                    '%r not in %r' % (first, second)
        s   %r not in %r(   t   failureException(   R   t	   containeet	   containert   msg(    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   failUnlessIn5   s    
c         C   s2   | | k	 r. |  j  | p% d | | f   n  | S(   s  
        Fail the test if C{first} is not C{second}.  This is an
        obect-identity-equality test, not an object equality
        (i.e. C{__eq__}) test.

        @param msg: if msg is None, then the failure message will be
        '%r is not %r' % (first, second)
        s   %r is not %r(   R   (   R   t   firstt   secondR   (    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   failUnlessIdenticalE   s    	"c         C   s2   | | k r. |  j  | p% d | | f   n  | S(   s  
        Fail the test if C{first} is C{second}.  This is an
        obect-identity-equality test, not an object equality
        (i.e. C{__eq__}) test.

        @param msg: if msg is None, then the failure message will be
        '%r is %r' % (first, second)
        s   %r is %r(   R   (   R   R    R!   R   (    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   failIfIdenticalT   s    	"c         O   s   y | | |   } WnN | k
 r7 t  j   d } | S|  j d t  j   d | j f   n X|  j d | j | f   d S(   s9  
        Fail the test unless calling the function C{f} with the given
        C{args} and C{kwargs} raises C{exception}. The failure will report
        the traceback and call stack of the unexpected exception.

        @param exception: exception type that is to be expected
        @param f: the function to call

        @return: The raised exception instance, if it is of the given type.
        @raise self.failureException: Raised if the function call does
            not raise an exception or if it raises an exception of a
            different type.
        i   s   %s raised instead of %si    s   %s not raised (%r returned)N(   R   R   R   t   __name__(   R   t	   exceptiont   fR   t   kwargst   resultt   inst(    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   failUnlessRaisesc   s    		c         C   s>   |  j  d k r g  |  _  n  t d d  } |  j  j |  | S(   sQ   
        Pathetic substitute for twisted.trial.unittest.TestCase.mktemp.
        t   dirt   .N(   R	   R
   R    t   append(   R   R   (    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyR       s
    c         O   s   |  j  | |   S(   N(   t
   failUnless(   R   t   at   kw(    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt
   assertTrue   s    c         O   s   |  j  | |   S(   N(   t   failIf(   R   R/   R0   (    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   assertFalse   s    c         G   sO   |  j  | j |  |  j t | t   | |   } |  j t |  |  d S(   s  
        Perform various assertions about C{theType} to ensure that it is a
        well-defined type.  This is useful for extension types, where it's
        pretty easy to do something wacky.  If something about the type is
        unusual, an exception will be raised.

        @param theType: The type object about which to make assertions.
        @param name: A string giving the name of the type.
        @param constructionArgs: Positional arguments to use with C{theType} to
            create an instance of it.
        N(   t   assertEqualR$   R1   t
   isinstancet   typet   assertIdentical(   R   t   theTypet   namet   constructionArgst   instance(    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   assertConsistentType   s    N(   R$   t
   __module__t   __doc__R   R
   R   t   assertInR"   R7   R#   t   assertNotIdenticalR*   t   assertRaisesR	   R    R1   R3   R<   (    (    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyR      s   					(   i   i    (   R>   R   R   t   os.patht   tempfileR    t   unittestR   R   t   OpenSSL.cryptoR   R   t   version_infoR   t   strt   bytes(    (    (    s5   /usr/lib/python2.7/dist-packages/OpenSSL/test/util.pyt   <module>   s   			