U
    W[<                     @   s|   d Z ddlZddlmZ ddlmZmZ G dd dZG dd dZd	d
 Z	dd Z
G dd dejZG dd dejZdS )z(
Tests for L{twisted.persisted.styles}.
    N)unittest)unpickleMethod_UniversalPicklingErrorc                   @   s   e Zd ZdZdd ZdS )Foo
    Helper class.
    c                 C   s   dS )z 
        Helper method.
        N selfr   r   D/usr/lib/python3/dist-packages/twisted/persisted/test/test_styles.pymethod   s    z
Foo.methodN)__name__
__module____qualname____doc__r   r   r   r   r
   r      s   r   c                   @   s   e Zd ZdZdS )Barr   N)r   r   r   r   r   r   r   r
   r      s   r   c                   C   s   dS )z)
    A sample function for pickling.
    Nr   r   r   r   r
   sampleFunction    s    r   c                 C   s   | S )Nr   )xr   r   r
   <lambda>'       r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	UniversalPicklingErrorTestsz9
    Tests the L{_UniversalPicklingError} exception.
    c                 C   s   t dS )z2
        Raise L{UniversalPicklingError}.
        N)r   r   r   r   r
   raise_UniversalPicklingError0   s    z8UniversalPicklingErrorTests.raise_UniversalPicklingErrorc                 C   s   |  tj| j dS )z^
        Handling L{pickle.PicklingError} handles
        L{_UniversalPicklingError}.
        N)assertRaisespicklePicklingErrorr   r   r   r   r
   test_handledByPickleModule7   s    z6UniversalPicklingErrorTests.test_handledByPickleModulec                 C   s@   zddl }W n tk
r*   tdY nX | |j| j dS )z_
        Handling L{cPickle.PicklingError} handles
        L{_UniversalPicklingError}.
        r   NzcPickle not available.)cPickleImportErrorr   ZSkipTestr   r   r   r	   r   r   r   r
   test_handledBycPickleModule@   s    z7UniversalPicklingErrorTests.test_handledBycPickleModuleN)r   r   r   r   r   r   r   r   r   r   r
   r   +   s   	r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )UnpickleMethodTestsz0
    Tests for the unpickleMethod function.
    c                 C   s2   t  }td|t }| ||j | ||j dS )zj
        L{unpickleMethod} returns an instance method bound to the
        instance passed to it.
        r   N)r   r   assertEqualr   assertIsNotr	   Zfoomr   r   r
    test_instanceBuildingNamePresentT   s    z4UnpickleMethodTests.test_instanceBuildingNamePresentc                 C   s2   t  }td|t}| ||j | ||j dS )z
        If the named method is not present in the class,
        L{unpickleMethod} finds a method on the class of the instance
        and returns a bound method from there.
        r   N)r   r   r   r    r   r!   r"   r   r   r
   #test_instanceBuildingNameNotPresent_   s    z7UnpickleMethodTests.test_instanceBuildingNameNotPresentc                 C   sZ   dd }|  tjtdd|d zddl}W n   Y nX |  |jtdd|d dS )zd
        We do not contaminate normal function pickling with concerns from
        Twisted.
        c                 S   s"   d dt tjd|  dgdS )N
cp.ascii)joinr   r   encode)nr   r   r
   expectedp   s      z9UnpickleMethodTests.test_primeDirective.<locals>.expectedr   )Zprotocol0N1)r    r   dumpsr   r   )r	   r.   r   r   r   r
   test_primeDirectivek   s    z'UnpickleMethodTests.test_primeDirectivec                 C   sB   |  tjtjt zddl}W n   Y nX |  |j|jt dS )zY
        Pickling a C{lambda} function ought to raise a L{pickle.PicklingError}.
        r   N)r   r   r   r1   lambdaExampler   r   r   r   r
   test_lambdaRaisesPicklingError   s    z2UnpickleMethodTests.test_lambdaRaisesPicklingErrorN)r   r   r   r   r$   r%   r2   r4   r   r   r   r
   r   O   s
   r   )r   r   Ztwisted.trialr   Ztwisted.persisted.stylesr   r   r   r   r   r3   ZTestCaser   r   r   r   r   r
   <module>   s   $