ó
LNc           @   s#  d  d l  Z  d  d l m Z y d  d l Z Wn e k
 rK d  d l Z n Xy d  d l Z Wn e k
 r{ d  d l Z n Xd  d l m	 Z	 m
 Z
 m Z d e j f d     YZ d e	 j f d     YZ d e	 j f d	     YZ d
 e f d     YZ d e e f d     YZ d e j f d     YZ d e	 j f d     YZ d e j f d     YZ d d% d     YZ d d& d     YZ d d' d     YZ d   Z d e j f d     YZ d d( d     YZ d d) d      YZ d! e j f d"     YZ d# e j f d$     YZ e e e g Z  d S(*   i˙˙˙˙N(   t   unittest(   t   stylest   aott   crefutilt   VersionTestCasec           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   sp   d d d     Ya  t j t     } d t j f d     Ya  t j |  } t j   | j sl t d   d  S(   Nt   NullVersionedc           B   s   e  Z d  Z RS(   i    (   t   __name__t
   __module__t   ok(    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR      s   c           B   s   e  Z d  Z d   Z RS(   i   c         S   s   d |  _  d  S(   Ni   (   R   (   t   self(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   upgradeToVersion1!   s    (   R   R   t   persistenceVersionR
   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR      s   s   initial upgrade not run!(    (	   R   t   picklet   dumpsR   t	   Versionedt   loadst	   doUpgradeR   t   AssertionError(   R	   t   pkclt   mnv(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testNullVersionUpgrade   s    
c         C   sţ   d t  j f d     Ya t   } | j p1 | j sA t d   t j |  } d t _ t j	 |  } t  j
   | j s t d   | j s t d   t j |  } t j	 |  } t  j
   | j d k sß t d   | j d k sú t d   d  S(	   Nt   MyVersionedc           B   s>   e  Z d  Z d g Z d Z d Z d   Z d   Z d   Z RS(   i   t   garbagedatai    c         S   s   d |  _  d   |  _ d  S(   Nt   xxxc         S   s   d S(   Ns   cant persist(    (   t   q(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   <lambda>1   s    (   t   somedataR   (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   __init__/   s    	c         S   s   |  j  d 7_  d  S(   Ni   (   t   v3(   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   upgradeToVersion33   s    c         S   s   |  j  d 7_  d  S(   Ni   (   t   v4(   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   upgradeToVersion46   s    (	   R   R   R   t   persistenceForgetsR   R   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR   )   s   			s   hasn't been upgraded yeti   s   didn't do version 3 upgrades   didn't do version 4 upgradei   s   upgraded unnecessarily(   R   R   R   R   R   R   R   R   R   R   R   (   R	   t   mvt   picklt   obj(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testVersionUpgrade'   s    		

c         C   sĐ   d t  j f d     Ya t d d  } t d d  } t j | | f  } ~ ~ d t _ d   t _ t j |  \ } } t  j   |  j	 | j
 d  |  j	 | j
 d  |  j | j  |  j | j  d  S(   Nt   ClassWithCustomHashc           B   s   e  Z d    Z d   Z RS(   c         S   s   | |  _  | |  _ d  S(   N(   t   uniquet   hash(   R	   R&   R'   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR   I   s    	c         S   s   |  j  S(   N(   R'   (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   __hash__L   s    (   R   R   R   R(   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR%   H   s   	t   v1i    t   v2i   c         S   s   t  |  d t  S(   Nt   upgraded(   t   setattrt   True(   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR   U   s    (   R   R   R%   R   R   R   R
   R   R   t   assertEqualR&   t
   failUnlessR+   (   R	   R)   R*   t   pkl(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testNonIdentityHashF   s    	
c            sĎ   d t  j f d     Ya d t  j f d     Ya t   } t   } t j |  t j |  }   ~ ~ d t _   f d   } | t _ d t _ d   t _ t j |  } t  j	   |  j
 | j j  d  S(   Nt	   ToyClassAc           B   s   e  Z RS(    (   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR2   _   s   t	   ToyClassBc           B   s   e  Z RS(    (   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR3   a   s   i   c            s    t  j    |  _ t j   d  S(   N(   R   R   t   yR   R   (   R	   (   t   pklB(    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR
   h   s    c         S   s   t  |  d t  S(   NR+   (   R,   R-   (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR   m   s    (   R   R   R2   R3   R   R   R   R
   R   R   R/   R4   R+   (   R	   t   xR4   t   pklAR
   (    (   R5   s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt.   testUpgradeDeserializesObjectsRequiringUpgrade]   s    					
(   R   R   R   R$   R1   R8   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR      s   			t   VersionedSubClassc           B   s   e  Z RS(    (   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR9   u   s   t   SecondVersionedSubClassc           B   s   e  Z RS(    (   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR:   z   s   t   VersionedSubSubClassc           B   s   e  Z RS(    (   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR;      s   t   VersionedDiamondSubClassc           B   s   e  Z RS(    (   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR<      s   t   AybabtuTestsc           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s   
    L{styles._aybabtu} gets all of classes in the inheritance hierarchy of its
    argument that are strictly between L{Versioned} and the class itself.
    c         C   s    |  j  t j t j  g   d S(   sM   
        L{styles._aybabtu} of L{Versioned} itself is an empty list.
        N(   R.   R   t   _aybabtuR   (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   test_aybabtuStrictEmpty   s    c         C   s   |  j  t j t  g   d S(   s   
        There are no classes I{between} L{VersionedSubClass} and L{Versioned},
        so L{styles._aybabtu} returns an empty list.
        N(   R.   R   R>   R9   (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   test_aybabtuStrictSubclass   s    c         C   s    |  j  t j t  t g  d S(   s   
        With a sub-sub-class of L{Versioned}, L{styles._aybabtu} returns a list
        containing the intervening subclass.
        N(   R.   R   R>   R;   R9   (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   test_aybabtuSubsubclass   s    c         C   s&   |  j  t j t  t t t g  d S(   s   
        For a diamond-shaped inheritance graph, L{styles._aybabtu} returns a
        list containing I{both} intermediate subclasses.
        N(   R.   R   R>   R<   R;   R9   R:   (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   test_aybabtuStrict§   s    (   R   R   t   __doc__R?   R@   RA   RB   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR=      s
   				t   MyEphemeralc           B   s   e  Z d    Z RS(   c         C   s   | |  _  d  S(   N(   R6   (   R	   R6   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR   ´   s    (   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyRD   ˛   s   t   EphemeralTestCasec           B   s   e  Z d    Z RS(   c         C   s   t  d  } |  j | j t   |  j | j d  t j |  } t j |  } |  j | j t j  |  j	 t
 | d   d  S(   Ni   R6   (   RD   R.   t	   __class__R6   R   R   R   R   t	   Ephemeralt   assert_t   hasattr(   R	   t   oR"   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testEphemeralş   s    (   R   R   RK   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyRE   ¸   s   t
   Pickleablec           B   s   e  Z d    Z d   Z RS(   c         C   s   | |  _  d  S(   N(   R6   (   R	   R6   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR   Č   s    c         C   s   |  j  S(   N(   R6   (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   getXË   s    (   R   R   R   RM   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyRL   Ć   s   	t   Ac           B   s   e  Z d  Z d   Z RS(   s   
    dummy class
    c         C   s   d  S(   N(    (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   amethodŇ   s    (   R   R   RC   RO   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyRN   Î   s   t   Bc           B   s   e  Z d  Z d   Z RS(   s   
    dummy class
    c         C   s   d  S(   N(    (   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   bmethodŮ   s    (   R   R   RC   RQ   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyRP   Ő   s   c           C   s   d  S(   N(    (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   funktionÜ   s    t   PicklingTestCasec           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s$   Test pickling of extra object types.c         C   s2   t  j t  } t  j |  } |  j | t  d  S(   N(   R   R   R   R   R.   (   R	   R"   RJ   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt
   testModuleâ   s    c         C   s8   t  j t j  } t  j |  } |  j | t j  d  S(   N(   R   R   RL   RM   R   R.   (   R	   R"   RJ   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testClassMethodç   s    c         C   sc   t  d  } t j | j  } t j |  } |  j |   d  |  j t |  t | j   d  S(   Ni   (   RL   R   R   RM   R   R.   t   type(   R	   R#   R"   RJ   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testInstanceMethodě   s
    c         C   sm   t  j    } | j d  t j |  } t j |  } |  j t |  t |   |  j | j   d  d  S(   Nt   abc(   t   StringIOt   writeR   R   R   R.   RV   t   getvalue(   R	   t   fR"   RJ   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testStringIOó   s    (   R   R   RC   RT   RU   RW   R]   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyRS   ß   s
   			t   EvilSourcerorc           B   s   e  Z d    Z RS(   c         C   s(   |  |  _  |  |  j  _ | |  j  j _ d  S(   N(   t   at   bt   c(   R	   R6   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR   ý   s    	(   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR^   ü   s   t   NonDictStatec           B   s   e  Z d    Z d   Z RS(   c         C   s   |  j  S(   N(   t   state(   R	   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   __getstate__  s    c         C   s   | |  _  d  S(   N(   Rc   (   R	   Rc   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   __setstate__  s    (   R   R   Rd   Re   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyRb     s   	t   AOTTestCasec           B   sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c      
   C   sc   d d d t  t d d d  d d t j d d  t f
 } t j t j |   } |  j	 | |  d  S(   Ni   g       @y              @i   i   t   hellou   world(
   R-   t   slicet   syst   maxintt   Nonet   EllipsisR   t   unjellyFromSourcet   jellyToSourceR.   (   R	   R#   t   rtObj(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testSimpleTypes	  s    7c         C   sb   t    } t   } | j | _ | | _ t j t j |   j j } |  j | j | j	 j
  d  S(   N(   RN   RP   RQ   R_   R   Rm   Rn   R.   t   im_classt   im_selfRF   (   R	   R_   R`   t   im_(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testMethodSelfIdentity  s    			c         C   sj   t    } t   } | j | _ | | _ t j } t ` z# |  j t t j t j |   Wd | t _ Xd S(   s°   
        If a class change after an instance has been created,
        L{aot.unjellyFromSource} shoud raise a C{TypeError} when trying to
        unjelly the instance.
        N(	   RN   RP   RQ   R_   t   assertRaisest	   TypeErrorR   Rm   Rn   (   R	   R_   R`   t   savedbmethod(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   test_methodNotSelfIdentity  s    				c         C   s?   y | Wn d d l  m } n X|  j t t j |    d S(   sp   
        L{aot.jellyToSource} should raise a C{TypeError} when trying to jelly
        an unknown type.
        i˙˙˙˙(   t   SetN(   t   setsRy   Ru   Rv   R   Rn   (   R	   t   set(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   test_unsupportedType*  s
    c         C   să   t  j   j } i d d 6| d 6} d d d d d d d	 d t t  j | t g } t |  } | j |  | j |  | j |  t  j t  j | | g   } | d | d k sť t	  | d d d !| d d !k sß t	  d  S(   Nt   worldRg   t   methodi   i   i   s   he	llo

"x world!u   goodbye 
	á world!g      đ?id   l   d i    i   l-                              \l.:'-ü4^SCŃ{Ą'#EMĐnî9Iä{;4'Dh3ş
4;,Y V|(4Ů"Klő5s (
   R   t
   AOTJelliert	   jellyToAOR    RR   t   tuplet   appendRm   Rn   R   (   R	   t   ajt   dt   lt   tt   uj(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testBasicIdentity6  s    		c         C   s@   t    } d | _ t j t j |   j | j k s< t  d  S(   Ns	   meringue!(   Rb   Rc   R   Rm   Rn   R   (   R	   R_   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testNonDictStateJ  s    		c         C   sS   d } t  j    } | j |  t j t j |   } | j   | k sO t  d  S(   Nt   foo_bar(   RY   RZ   R   Rm   Rn   R[   R   (   R	   t   st   sioR   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testCopyRegO  s
    c         C   s   t  t  g    } t j |  } t j |  } | j | k sE t  | j j | j k s` t  | j | j j k	 s{ t  d  S(   N(   R^   R   t
   jellyToAOTt   unjellyFromAOTR_   R   R`   Ra   (   R	   RJ   t   j1t   oj(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   testFunkyReferencesW  s    (
   R   R   Rp   Rt   Rx   R|   R   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyRf     s   								t   CrefUtilTestCasec           B   s    e  Z d  Z d   Z d   Z RS(   s    
    Tests for L{crefutil}.
    c         C   s,   t  j i   } |  j t | j d d  d S(   sO   
        L{crefutil._DictKeyAndValue} only support keys C{0} and C{1}.
        i   i   N(   R   t   _DictKeyAndValueRu   t   RuntimeErrort   __setitem__(   R	   R   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   test_dictUnknownKeyf  s    c         C   s3   t  j   } d | d <|  j t | j d d  d S(   sI   
        L{crefutil._Defer} can be assigned a key only one time.
        i   i    N(   R   t   _DeferRu   R   R   (   R	   R   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   test_deferSetMultipleTimesn  s    
(   R   R   RC   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyR   a  s   	(    (    (    (    (    (!   Ri   t   twisted.trialR    t   cPickleR   t   ImportErrort	   cStringIORY   t   twisted.persistedR   R   R   t   TestCaseR   R   R9   R:   R;   R<   R=   RG   RD   RE   RL   RN   RP   RR   RS   R^   Rb   Rf   R   t	   testCases(    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_persisted.pyt   <module>   s8   \)	Y