+
    DfjmJ                        R t ^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHt  ! R R]P                  4      t ! R R	4      tR
 t ! R R4      t ! R R4      t ! R R4      t ! R R4      t ! R R4      tR t ! R R]4      t ! R R]4      t ! R R]P2                  ]P4                  4      t ! R R]P2                  ]P4                  4      t ! R R]4      tR# ) z/
Test cases for L{jelly} object serialization.
N)StringTransport)bananajellypb)unittest)TestCasec                   2   a  ] tR t^t o Rt^tRR ltRtV tR# )TestNodez<
An object to test jellyfying of new style class instances.
Nc                    V'       d5   VP                   ^,           V n         VP                  P                  V 4       M^V n         Wn        . V n        R# )   N)idchildrenappendparent)selfr   s   &&@/usr/lib/python3/dist-packages/twisted/spread/test/test_jelly.py__init__TestNode.__init__   s9    ii!mDGOO""4(DG    )r   r   r   N)	__name__
__module____qualname____firstlineno____doc__	classAttrr   __static_attributes____classdictcell____classdict__s   @r   r	   r	      s      I r   r	   c                   *   a  ] tR t^#t o RtR tRtV tR# )A
Dummy class.
c                    R# z+
Method to be used in serialization tests.
N r   s   &r   amethod	A.amethod(       r   r%   N)r   r   r   r   r   r'   r   r   r   s   @r   r!   r!   #         r   r!   c                    R# )z2
A dummy function to test function serialization.
Nr%   r&   s   &r   afuncr,   .   r)   r   c                   *   a  ] tR t^4t o RtR tRtV tR# )Br"   c                    R# r$   r%   r&   s   &r   bmethod	B.bmethod9   r)   r   r%   N)r   r   r   r   r   r0   r   r   r   s   @r   r.   r.   4   r*   r   r.   c                   *   a  ] tR t^?t o RtR tRtV tR# )Cr"   c                    R# r$   r%   r&   s   &r   cmethod	C.cmethodD   r)   r   r%   N)r   r   r   r   r   r5   r   r   r   s   @r   r3   r3   ?   r*   r   r3   c                       ] tR t^JtRtRtR# )Dz
Dummy new-style class.
r%   N)r   r   r   r   r   r   r%   r   r   r8   r8   J   s    r   r8   c                   >   a  ] tR t^Pt o RtRtRR ltR tR tRt	V t
R# )Ez#
Dummy new-style class with slots.
Nc                    Wn         W n        R # r   xyr   r=   r>   s   &&&r   r   
E.__init__W       r   c                6    R V P                   RV P                  /# r<   r<   r&   s   &r   __getstate__E.__getstate__[   s    TVVS$&&))r   c                >    VR ,          V n         VR,          V n        R# )r=   r>   Nr<   r   states   &&r   __setstate__E.__setstate__^   s    ssr   r<   )NN)r   r   r   r   r   	__slots__r   rC   rH   r   r   r   s   @r   r:   r:   P   s%      I* r   r:   c                   ,   a  ] tR t^ct o R tR tRtV tR# )SimpleJellyTestc                    Wn         W n        R # r   r<   r?   s   &&&r   r   SimpleJellyTest.__init__d   rA   r   c                4    V P                   VP                   8H  # r   )__dict__r   others   &&r   isTheSameAsSimpleJellyTest.isTheSameAsh   s    }}..r   r<   N)r   r   r   r   r   rS   r   r   r   s   @r   rL   rL   c   s     / /r   rL   c                    \         P                   ! V4      p\        P                  ! V4      p\        P                  ! V4      p\         P                  ! V4      pV P                  W4       R# )zh
Verify that the given object round-trips through jelly & banana and comes
out equivalent to the input.
N)r   r   encodedecodeunjellyassertEqual)testCasetoSerializejelliedencodeddecoded	unjellieds   &&    r   jellyRoundTripr`   l   sJ    
 kk+&GmmG$GmmG$Gg&I0r   c                      a  ] tR t^xt o RtR. R#O. R$O. R%O. R&O.tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R t"R  t#R!t$V t%R"# )'
JellyTestsz
Testcases for L{jelly} module serialization.

@cvar decimalData: serialized version of decimal data, to be used in tests.
@type decimalData: L{list}
s   listc                <   \         P                   ! V4      p\         P                  ! 4       pVP                  4        \         P                  ! W44       VP                  P                  V4       V P                  \         P                  \         P                  W44       R# )z
Helper test method to test security options for a type.

@param inputList: a sample input for the type.
@type inputList: L{list}

@param atom: atom identifier for the type.
@type atom: L{str}
N)r   SecurityOptionsallowBasicTypesrX   allowedTypespopassertRaisesInsecureJelly)r   	inputListatomctasters   &&&  r   _testSecurityJellyTests._testSecurity   sh     KK	"&&( a %%--u}}aHr   c                F   \        4       p\        4       p\        4       pVP                  Vn        Wn        \        P                  p\        = V P                  \        \        P                  \        P                  ! V4      4       V\        n        R#   T\        n        i ; i)z
If a class change after an instance has been created, L{jelly.unjelly}
shoud raise a C{TypeError} when trying to unjelly the instance.
N)
r!   r.   r3   r5   r0   arh   	TypeErrorr   rX   )r   rq   brl   savecmethods   &    r   test_methodsNotSelfIdentity&JellyTests.test_methodsNotSelfIdentity   si    
 CCCII	iiI	$iAG#AIAIs   9B B c                \   \        4       p^Vn        \        4       pW!n        W!n        \        P                  ! V4      p\        P
                  ! V4      pV P                  V\         4       V P                  VP                  VP                  4       V P                  VP                  ^4       R# )zk
Test that a new style class can be jellied and unjellied with its
objects and attribute values preserved.
N)	r8   r=   n2n3r   rX   assertIsInstanceassertIsrY   )r   nrx   rl   ms   &    r   test_newStyleJellyTests.test_newStyle   sx    
 CSKKNMM!a#addADD!a r   c                    \        4       p^Vn        \        P                  ! V4      p\        P                  ! V4      pV P	                  V\         4       V P                  VP                  ^4       R# )zj
A class defined with I{slots} can be jellied and unjellied with the
values for its attributes preserved.
N)r:   r=   r   rX   rz   rY   )r   r|   rl   r}   s   &   r   test_newStyleWithSlots!JellyTests.test_newStyleWithSlots   sQ    
 CKKNMM!a#a r   c                    \         .p\        P                  ! \        P                  ! V4      4      pV P                  W4       R# )zU
Test that a new style class type can be jellied and unjellied
to the original type.
N)r8   r   rX   rY   r   trs   &  r   test_typeNewStyleJellyTests.test_typeNewStyle   s/    
 CMM%++a.)r   c                    \         .p\        P                  ! \        P                  ! V4      4      pV P                  W4       R# )zM
Test that a builtin type can be jellied and unjellied to the original
type.
N)strr   rX   rY   r   s   &  r   test_typeBuiltinJellyTests.test_typeBuiltin   s/    
 EMM%++a.)r   c                .   \         P                   P                  4       p\         P                   P                  4       V,
          pW.p\        P                  ! V4      p\        P                  ! V4      pV P	                  W54       V P                  W54       R# )z
Jellying L{datetime.timedelta} instances and then unjellying the result
should produce objects which represent the values of the original
inputs.
N)datetimenowr   rX   rY   assertIsNot)r   dtndtdrj   rl   outputs   &     r   test_dateTimeJellyTests.test_dateTime   sp     ##%##%+J	KK	"q!++r   c                <   \         P                  ! R^^4      p\         P                  ! ^^^R4      p\         P                   P                  W4      pV\         P                   ! R^^4      ,
          p\	        W4       \	        W4       \	        W4       \	        W4       R# )z
Jellying L{datetime.time}, L{datetime.timedelta}, L{datetime.datetime},
and L{datetime.date} objects should result in jellied objects which can
be serialized and unserialized with banana.
i  iX  N)r   datetimecombiner`   )r   
sampleDate
sampleTimesampleDateTimesampleTimeDeltas   &    r   test_bananaTimeTypesJellyTests.test_bananaTimeTypes   sy     ]]4B/
]]1b!S1
!**22:J(8+<+<T1a+HHt(t(t,t-r   c                N   \         P                  ! R4      \         P                  ! ^ 4      \         P                  ! R4      \         P                  ! R4      .p\        P                  ! V4      p\        P                  ! V4      pV P	                  W4       V P                  W4       R# )z
Jellying L{decimal.Decimal} instances and then unjellying the result
should produce objects which represent the values of the original
inputs.
9.95@ -78.901N)decimalDecimalr   rX   rY   r   )r   rj   rl   r   s   &   r   test_decimalJellyTests.test_decimal   su     OOF#OOAOOF#OOI&	
	 KK	"q!++r   c                   \         P                  ! R4      \         P                  ! ^ 4      \         P                  ! R4      \         P                  ! R4      .p\        P                  ! V P                  4      pV P                  W!4       R# )a  
Unjellying the s-expressions produced by jelly for L{decimal.Decimal}
instances should result in L{decimal.Decimal} instances with the values
represented by the s-expressions.

This test also verifies that L{decimalData} contains valid jellied
data.  This is important since L{test_decimalMissing} re-uses
L{decimalData} and is expected to be unable to produce
L{decimal.Decimal} instances even though the s-expression correctly
represents a list of them.
r   r   r   N)r   r   r   rX   decimalDatarY   )r   expectedr   s   &  r   test_decimalUnjellyJellyTests.test_decimalUnjelly  s_     OOF#OOAOOF#OOI&	
 t//0*r   c                X    \         P                  ! R4      .pV P                  VR4       R# )z
By default, C{decimal} objects should be allowed by
L{jelly.SecurityOptions}. If not allowed, L{jelly.unjelly} should raise
L{jelly.InsecureJelly} when trying to unjelly it.
r      decimalN)r   r   rn   r   rj   s   & r   test_decimalSecurityJellyTests.test_decimalSecurity  s%     __V,-	9j1r   c                    0 Rm.p\         P                  ! \         P                   ! V4      4      pV P                  W4       V P                  W4       R# )z
Jellying C{set} instances and then unjellying the result
should produce objects which represent the values of the original
inputs.
N   r         )r   rX   rY   r   r   rj   r   s   &  r   test_setJellyTests.test_set&  s>     K	u{{956++r   c                    \        . RO4      .p\        P                  ! \        P                  ! V4      4      pV P                  W4       V P	                  W4       R# )z
Jellying L{frozenset} instances and then unjellying the result
should produce objects which represent the values of the original
inputs.
Nr   r   r   )	frozensetr   rX   rY   r   r   s   &  r   test_frozensetJellyTests.test_frozenset1  sD     y)*	u{{956++r   c                4    0 Rm.pV P                  VR4       R# )z
By default, C{set} objects should be allowed by
L{jelly.SecurityOptions}. If not allowed, L{jelly.unjelly} should raise
L{jelly.InsecureJelly} when trying to unjelly it.
s   setNr   )rn   r   s   & r   test_setSecurityJellyTests.test_setSecurity<  s     K	9f-r   c                F    \        . RO4      .pV P                  VR4       R# )z
By default, L{frozenset} objects should be allowed by
L{jelly.SecurityOptions}. If not allowed, L{jelly.unjelly} should raise
L{jelly.InsecureJelly} when trying to unjelly it.
s	   frozensetNr   )r   rn   r   s   & r   test_frozensetSecurity!JellyTests.test_frozensetSecurityE  s!     y)*	9l3r   c                   V P                  \        RR4      P                  \        RR4      4      4       \        ^^4      p\        P                  ! V4      p\        P                  ! V4      pV P                  VP                  V4      4       R# )z
Simplest test case.
rq   rs   N)
assertTruerL   rS   r   rX   )r   rq   cerealrs   s   &   r   test_simpleJellyTests.test_simpleN  sj     	C%11/#s2KL	
 Aq!QMM&!a()r   c                   . pTpVP                  V4       VP                  V4       V P                  V^ ,          V^,          4       V P                  V^ ,          ^ ,          V4       \        P                  ! V4      p\        P                  ! V4      pV P                  V^ ,          V^,          4       V P                  V^ ,          ^ ,          V4       R# )z:
Test to make sure that objects retain identity properly.
N)r   r{   r   rX   )r   r=   r>   szs   &    r   test_identityJellyTests.test_identityZ  s     		adAaD!ad1gq!KKNMM!adAaD!ad1gq!r   c                    R p\         P                  ! \         P                   ! V4      4      pV P                  W4       V P                  \        V4      \        V4      4       R# )blahN)r   rX   rY   typer?   s   &  r   test_strJellyTests.test_stri  sC    MM%++a.)a$q'*r   c                ,   . pR V/V3pVP                  V4       \        P                  ! V4      p\        P                  ! V4      pV P                  V^ ,          R ,          V^,          4       V P                  V^ ,          R ,          ^ ,          V4       R# )listNr   r   rX   r{   )r   rereftoplevelTupler   r   s   &    r   test_stressReferences JellyTests.test_stressReferenceso  sq     %%0]#KK&MM!ad6lAaD)ad6l1oq)r   c                    . pV3pVP                  V34       \        P                  ! V4      p\        P                  ! V4      pV P                  V^ ,          ^ ,          ^ ,          V4       R#     Nr   )r   rq   r   r   r   s   &    r   test_moreReferencesJellyTests.test_moreReferencesx  sP    D	!KKNMM!ad1gaj!$r   c                    \         P                  ! 4       p\         P                   ! / 4      pV P                  \         P                  \         P                  W!4       R# )z0
Test for type-level security of serialization.
N)r   rd   rh   ri   rX   )r   rm   dcts   &  r   test_typeSecurityJellyTests.test_typeSecurity  s;     &&(kk"o%--u}}cJr   c                f    \         P                  ! \        4      pV P                  \        V4       R # r   )r   rX   r8   r{   )r   ujs   & r   test_newStyleClassesJellyTests.test_newStyleClasses  s    ]]1ar   c                   \        4       p\        P                  ! \        P                  ! V4      4       \        P                  ! \        P                  ! VP                  4      4       \        . RO\        ^4      '       * \        ^4      RRRR\         \        R^/\         P                  .pV F=  pV P                  V\        P                  ! \        P                  ! V4      4      4       K?  	  R# )z1
Test for all types currently supported in jelly
testgL4@Nrq   r   )r!   r   rX   r'   r,   boolr   rY   )r   rq   itemsis   &   r   test_lotsaTypesJellyTests.test_lotsaTypes  s     Cekk!n%ekk!)),-QKG!HII
 AQekk!n => r   c                r    ! R  R4      s \        4       p\        V4      p\        V4      p\        W#34      pW"W3WDRV/p\        P                  ! \        P                  ! V4      4      R,          pV P	                  VP
                  ^ ,          P
                  VP
                  ^,          P
                  4       R# )c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )
TupleStatei  c                    Wn         R # r   rR   rQ   s   &&r   r   TupleState.__init__  s    "
r   c                    V P                   3# r   r   r&   s   &r   rC   TupleState.__getstate__  s    

}$r   c                "    V^ ,          V n         R# r   r   rF   s   &&r   rH   TupleState.__setstate__  s    "1X
r   c                ,    \        V P                  4      # r   )hashrR   r&   s   &r   __hash__TupleState.__hash__  s    DJJ''r   r   N)
r   r   r   r   r   rC   rH   r   r   r   r   s   @r   r   r     s     #%&( (r   r   t3N)r   r!   r   rX   r{   rR   )r   rq   t1t2r   dt3primes   &      r   test_setStateJellyTests.test_setState  s    	( 	( C]]!RRT2.--A/5gmmA&,,gmmA.>.D.DEr   c                   \         P                  ! 4       pVP                  \        \        4       \        4       p\	        4       p\        4       pW2n        WBn        W2n        WCn        \         P                   ! W!4      p\         P                  ! WQ4      pV P                  VP                  \         P                  4       \         P                   ! V4      pV P                  \         P                  \         P                  Wq4       V P                  VP                  VP                  R4       \         P                   ! \        V4      p\         P                  ! WQ4      pV P                  V\        RV,          4       R# )z1
Test for class-level security of serialization.
zIdentity mismatchzA came back: %sN)r   rd   allowInstancesOfr!   r.   r3   rs   rl   r=   rX   rz   Unpersistablerh   ri   r{   )r   rm   rq   rs   rl   friendlyr=   means   &       r   test_classSecurityJellyTests.test_classSecurity  s     &&(1%CCC;;q)MM(+acc5#6#67{{1~%--u}}dKacc133 34;;q&)MM(+a-12r   c                j    ! R R\         P                  4      p\         P                  ! V\         P                  4       V! 4       pRVn        \         P
                  ! \         P                   ! V4      4      pV P                  VP                  R4       V P                  V\         P                  4       R# )zZ
Test that if Unjellyable is used to deserialize a jellied object,
state comes out right.
c                       ] tR tRtRtR# )7JellyTests.test_unjellyable.<locals>.JellyableTestClassi  r%   Nr   r   r   r   r   r%   r   r   JellyableTestClassr        r   r  valueN)r   	JellyablesetUnjellyableForClassUnjellyable	attributerX   rY   rz   )r   r  inputr   s   &   r   test_unjellyableJellyTests.test_unjellyable  s}    	 	 	$$%79J9JK"$!u{{512))73fe&7&78r   c                   / ^.pV3R lpV3R lp\        ^^4      p\        ^^4      p\        ^^4      pWTn        Wdn        WVn        \        P                  ! WBR7      p\        P                  ! WsR7      pV P                  VP                  VP                  P                  4       V P                  V^ ,          R4       V P                  VP                  VP                  R4       R# )r   c                 p    V^,          ^,           V^&   W^ ,          V^,          &   \        V^,          4      # )r   )r   )objjelpersts   &&&r   persistentStore:JellyTests.test_persistentStorage.<locals>.persistentStore  s1    Qx!|E!H!$!HU1XuQx= r   c                 8    \        V 4      pV^ ,          V,          # )r   )int)pidstrunjr  pids   &&& r   persistentLoad9JellyTests.test_persistentStorage.<locals>.persistentLoad  s    f+C8C= r   )r  )r$  zpersistentStore was not called.z$Persistent storage identity failure.N)rL   rs   rl   r   rX   r{   r   )	r   r  r  r$  rq   rs   rl   r  r=   s	   &        r   test_persistentStorage!JellyTests.test_persistentStorage  s    Q,1 	!
 /4 	! Aq!Aq!Aq!kk!=MM#=acc13355!a"CDacc133 FGr   c                    \        4       p\        V4      p\        V4       \        V4       \        P                  ! V4      p\        P                  ! V4      pV P                  W4       R # r   )r	   r   rX   _check_newstyle)r   r|   n1r  r}   s   &    r   test_newStyleClassesAttributes)JellyTests.test_newStyleClassesAttributes  sI    Ja[kk!nMM#Q"r   c                   V P                  VP                  VP                  4       V P                  VP                  ^4       V P                  VP                  ^4       V P                  \        VP                  4      \        VP                  4      4       \        VP                  VP                  4       F  w  r4V P                  W44       K  	  R# )   N)rY   r   r   lenr   zipr)  )r   rq   rs   r=   r>   s   &&&  r   r)  JellyTests._check_newstyle  s    qtt$a(a(QZZ#ajj/:

AJJ/DA  & 0r   c                   \         P                  ! 4       p\         P                  ! 4       pVP                  \	        4       4       \
        P
                  ! WR7      p\         P                  ! 4       pVP                  \	        4       4       \
        P                  ! W4R7      pV P                  VP                  VP                  4       R# )z
A L{pb.Referenceable} instance jellies to a structure which unjellies to
a L{pb.RemoteReference}.  The C{RemoteReference} has a I{luid} that
matches up with the local object key in the L{pb.Broker} which sent the
L{Referenceable}.
invokerN)
r   ReferenceableBrokermakeConnectionr   r   rX   assertInluidlocalObjects)r   refjellyBrokerjunjellyBrokerr   s   &     r   test_referenceableJellyTests.test_referenceable  s~      iik""?#45KK1		$$_%67]]14bgg{778r   r%   N)r   i  )r   r   r   )r   r   r   )r   i)&r   r   r   r   r   r   rn   ru   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r&  r+  r)  r?  r   r   r   s   @r   rb   rb   x   s      	 KI&$"! 
!,.,"+*2	,	,.4
*"+*%K?0F0389 H6	#'9 9r   rb   c                   0   a  ] tR tRt o RtR tR tRtV tR# )JellyDeprecationTestsi)  z#
Tests for deprecated Jelly things
c                   \         P                   V P                  V P                  .4      pV P	                  \        V4      ^4       V P	                  V^ ,          R,          R4       V P	                  V^ ,          R,          \        4       R# )z4
L{jelly.instance_atom} is deprecated since 15.0.0.
messagezltwisted.spread.jelly.instance_atom was deprecated in Twisted 15.0.0: instance_atom is unused within Twisted.categoryN)r   instance_atomflushWarningstest_deprecatedInstanceAtomrY   r/  DeprecationWarningr   warningss   & r   rJ  1JellyDeprecationTests.test_deprecatedInstanceAtom.  su     	%%t'G'G&HIX*QK	">	

 	!Z02DEr   c                   \         P                  ! RRR.R..4       V P                  4       pV P                  \	        V4      ^4       V P                  V^ ,          R,          R4       V P                  V^ ,          R,          \
        4       R# )	z9
Unjellying the instance atom is deprecated with 15.0.0.
instanceclassz twisted.spread.test.test_jelly.A
dictionaryrF  ztUnjelly support for the instance atom is deprecated since Twisted 15.0.0.  Upgrade peer for modern instance support.rG  N)r   rX   rI  rY   r/  rK  rL  s   & r   %test_deprecatedUnjellyingInstanceAtom;JellyDeprecationTests.test_deprecatedUnjellyingInstanceAtom<  s     	'#EFW	
 %%'X*QK	"I	

 	!Z02DEr   r%   N)	r   r   r   r   r   rJ  rS  r   r   r   s   @r   rD  rD  )  s     FF Fr   rD  c                   &   a  ] tR tRt o R tRtV tR# )ClassAiM  c                &    \        V 4      V n        R # r   )ClassBr;  r&   s   &r   r   ClassA.__init__N  s    $<r   r;  Nr   r   r   r   r   r   r   r   s   @r   rV  rV  M  s        r   rV  c                   &   a  ] tR tRt o R tRtV tR# )rX  iR  c                    Wn         R # r   rZ  )r   r;  s   &&r   r   ClassB.__init__S  s    r   rZ  Nr[  r   s   @r   rX  rX  R  s      r   rX  c                   <   a  ] tR tRt o RtR tR tR tR tRt	V t
R# )	CircularReferenceTestsiW  zF
Tests for circular references handling in the jelly/unjelly process.
c                4   \         P                  ! \        \        4       \         P                  ! \        \        4       \         P                  ! \         P                   ! \        4       4      4      pV P                  VP                  P                  VR 4       R# ),Identity not preserved in circular referenceN)r   r  rV  rX  rX   r{   r;  )r   rq   s   & r   test_simpleCircle(CircularReferenceTests.test_simpleCircle\  sT    $$VV4$$VV4MM%++fh/0aeeii$RSr   c                n    ! R  R4      pV! 4       pRVn         \        4       p\        P                  ! \        \        4       \        P                  ! \        \        4       \        P                  ! W2R7      p\        P
                  ! V4      pV P                  VP                  P                  VR4       R# )c                       ] tR tRtRtR# )HCircularReferenceTests.test_circleWithInvoker.<locals>.DummyInvokerClassic  r%   Nr  r%   r   r   DummyInvokerClassrg  c  r  r   rh  Nr3  rb  )serializingPerspectiverV  r   r  rX  rX   failUnlessIdenticalr;  )r   rh  dummyInvokera0r=  a1s   &     r   test_circleWithInvoker-CircularReferenceTests.test_circleWithInvokerb  s    	 	 )*.2+X$$VV4$$VV4KK1]]1  FFJJJ	
r   c                4   \        4       p\        VR4      pVP                  V4       \        P                  ! \        P                  ! V4      4      pV P                  VP                  \         4       V P                  \        VP                  4      V.4       R# )zw
Check that a C{set} can contain a circular reference and be serialized
and unserialized without losing the reference.
N)	setrL   addr   rX   rz   r=   rY   r   )r   r   rq   ress   &   r   r   CircularReferenceTests.test_setq  sf    
 EAt$	ammEKKN+ceeS)ceese,r   c                "   \        RR4      p\        V.4      pW!n        \        P                  ! \        P                  ! V4      4      pV P                  VP                  \        4       V P                  \        VP                  4      V.4       R# )z}
Check that a L{frozenset} can contain a circular reference and be
serialized and unserialized without losing the reference.
N)rL   r   r=   r   rX   rz   rY   r   )r   rq   r   rs  s   &   r   r   %CircularReferenceTests.test_frozenset}  sd    
 D$'qcNmmEKKN+ceeY/ceese,r   r%   N)r   r   r   r   r   rc  rn  r   r   r   r   r   s   @r   r`  r`  W  s$     T

-
- 
-r   r`  )r   r   r   twisted.internet.testingr   twisted.spreadr   r   r   twisted.trialr   twisted.trial.unittestr   r  r	   r!   r,   r.   r3   r8   r:   rL   r`   rb   rD  Copyable
RemoteCopyrV  rX  r`  r%   r   r   <module>r}     s   
   4 , , " +u "     &/ /	1n9 n9b!FH !FH R[["--  
R[["-- 
0-X 0-r   