ó
    Ö›‘hmJ  ã                   óÀ  • S r SSKrSSKrSSKJr  SSKJrJrJr  SSK	J
r
  SSKJr   " S S\R                  5      r " S	 S
5      rS r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      rS r " S S\5      r " S S\5      r " S S\R2                  \R4                  5      r " S S\R2                  \R4                  5      r " S S \5      rg)!z/
Test cases for L{jelly} object serialization.
é    N)ÚStringTransport)ÚbananaÚjellyÚpb)Úunittest)ÚTestCasec                   ó&   • \ rS rSrSrSrSS jrSrg)ÚTestNodeé   z<
An object to test jellyfying of new style class instances.
é   Nc                 óš   • U(       a0  UR                   S-   U l         UR                  R                  U 5        OSU l         Xl        / U l        g )Né   )ÚidÚchildrenÚappendÚparent)Úselfr   s     ÚbC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/spread/test/test_jelly.pyÚ__init__ÚTestNode.__init__   s9   € ÞØ—i‘i !‘mˆDŒGØ�O‰O×"Ñ" 4Õ(àˆDŒGØŒØˆ�ó    )r   r   r   ©N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	classAttrr   Ú__static_attributes__© r   r   r
   r
      s   † ñð €I÷r   r
   c                   ó   • \ rS rSrSrS rSrg)ÚAé#   ú
Dummy class.
c                 ó   • g©z+
Method to be used in serialization tests.
Nr    ©r   s    r   ÚamethodÚ	A.amethod(   ó   � r   r    N)r   r   r   r   r   r(   r   r    r   r   r"   r"   #   ó   † ñõr   r"   c                 ó   • g)z2
A dummy function to test function serialization.
Nr    r'   s    r   Úafuncr-   .   r*   r   c                   ó   • \ rS rSrSrS rSrg)ÚBé4   r$   c                 ó   • gr&   r    r'   s    r   ÚbmethodÚ	B.bmethod9   r*   r   r    N)r   r   r   r   r   r2   r   r    r   r   r/   r/   4   r+   r   r/   c                   ó   • \ rS rSrSrS rSrg)ÚCé?   r$   c                 ó   • gr&   r    r'   s    r   ÚcmethodÚ	C.cmethodD   r*   r   r    N)r   r   r   r   r   r8   r   r    r   r   r5   r5   ?   r+   r   r5   c                   ó   • \ rS rSrSrSrg)ÚDéJ   z
Dummy new-style class.
r    N)r   r   r   r   r   r   r    r   r   r;   r;   J   s   † ôr   r;   c                   ó2   • \ rS rSrSrSrSS jrS rS rSr	g)	ÚEéP   z#
Dummy new-style class with slots.
©ÚxÚyNc                 ó   • Xl         X l        g r   r@   ©r   rA   rB   s      r   r   Ú
E.__init__W   ó   € ØŒØ�r   c                 ó4   • U R                   U R                  S.$ )Nr@   r@   r'   s    r   Ú__getstate__ÚE.__getstate__[   s   € Ø—V‘V $§&¡&Ñ)Ð)r   c                 ó,   • US   U l         US   U l        g )NrA   rB   r@   ©r   Ústates     r   Ú__setstate__ÚE.__setstate__^   s   € Ø�s‘ˆŒØ�s‘ˆ�r   )NN)
r   r   r   r   r   Ú	__slots__r   rH   rM   r   r    r   r   r>   r>   P   s   † ñð €Iôò*õr   r>   c                   ó    • \ rS rSrS rS rSrg)ÚSimpleJellyTestéc   c                 ó   • Xl         X l        g r   r@   rD   s      r   r   ÚSimpleJellyTest.__init__d   rF   r   c                 ó4   • U R                   UR                   :H  $ r   )Ú__dict__©r   Úothers     r   ÚisTheSameAsÚSimpleJellyTest.isTheSameAsh   s   € Ø�}‰} §¡Ñ.Ð.r   r@   N)r   r   r   r   r   rY   r   r    r   r   rQ   rQ   c   s   † òõ/r   rQ   c                 óÖ   • [         R                   " U5      n[        R                  " U5      n[        R                  " U5      n[         R                  " U5      nU R                  X5        g)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   ÚjellyRoundTriprf   l   sJ   € ô
 �kŠk˜+Ó&€GÜ�mŠm˜GÓ$€GÜ�mŠm˜GÓ$€GÜ—’˜gÓ&€IØ×Ñ˜Õ0r   c                   óê   • \ rS rSrSrS/ SQ/ SQ/ SQ/ SQ/rS rS	 rS
 rS r	S r
S rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS  rS! rS" r S# r!S$ r"S% r#S&r$g')(Ú
JellyTestséx   z–
Testcases for L{jelly} module serialization.

@cvar decimalData: serialized version of decimal data, to be used in tests.
@type decimalData: L{list}
s   list)ó   decimaliã  éþÿÿÿ)rj   r   r   )rj   é@â r   )rj   iËËþÿéýÿÿÿc                 ó:  • [         R                   " U5      n[         R                  " 5       nUR                  5         [         R                  " X45        UR                  R                  U5        U R                  [         R                  [         R                  X45        g)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ÚallowBasicTypesr^   ÚallowedTypesÚpopÚassertRaisesÚInsecureJelly)r   Ú	inputListÚatomÚcÚtasters        r   Ú_testSecurityÚJellyTests._testSecurityˆ   sh   € ô �KŠK˜	Ó"ˆÜ×&Ò&Ó(ˆØ×ÑÔ ä�Š�aÔ Ø×Ñ×Ñ Ô%à×Ñœ%×-Ñ-¬u¯}©}¸aÕHr   c                 óD  • [        5       n[        5       n[        5       nUR                  Ul        Xl        [        R                  n[        ? U R                  [        [        R                  [        R                  " U5      5        U[        l        g! U[        l        f = f)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/   r5   r8   r2   Úars   Ú	TypeErrorr   r^   )r   r|   Úbrw   Úsavecmethods        r   Útest_methodsNotSelfIdentityÚ&JellyTests.test_methodsNotSelfIdentity›   si   € ô
 ‹CˆÜ‹CˆÜ‹CˆØ—I‘IˆŒ	ØŒÜ—i‘iˆÜˆIð	$Ø×Ñœi¬¯©¼¿ºÀA»ÔGà#ŒA�Iø˜ŒA�Iús   Á9B ÂBc                 óZ  • [        5       nSUl        [        5       nX!l        X!l        [        R                  " U5      n[        R
                  " U5      nU R                  U[         5        U R                  UR                  UR                  5        U R                  UR                  S5        g)zk
Test that a new style class can be jellied and unjellied with its
objects and attribute values preserved.
r   N)	r;   rA   Ún2Ún3r   r^   ÚassertIsInstanceÚassertIsr_   )r   Únrƒ   rw   Úms        r   Útest_newStyleÚJellyTests.test_newStyle¬   sx   € ô
 ‹CˆØˆŒÜ‹SˆØŒØŒÜ�KŠK˜‹NˆÜ�MŠM˜!ÓˆØ×Ñ˜a¤Ô#Ø�‰�a—d‘d˜AŸD™DÔ!Ø×Ñ˜Ÿ™˜aÕ r   c                 óâ   • [        5       nSUl        [        R                  " U5      n[        R                  " U5      nU R	                  U[         5        U R                  UR                  S5        g)zj
A class defined with I{slots} can be jellied and unjellied with the
values for its attributes preserved.
r   N)r>   rA   r   r^   r…   r_   )r   r‡   rw   rˆ   s       r   Útest_newStyleWithSlotsÚ!JellyTests.test_newStyleWithSlots¼   sQ   € ô
 ‹CˆØˆŒÜ�KŠK˜‹NˆÜ�MŠM˜!ÓˆØ×Ñ˜a¤Ô#Ø×Ñ˜Ÿ™˜aÕ r   c                 óˆ   • [         /n[        R                  " [        R                  " U5      5      nU R                  X5        g)zU
Test that a new style class type can be jellied and unjellied
to the original type.
N)r;   r   r^   r_   ©r   ÚtÚrs      r   Útest_typeNewStyleÚJellyTests.test_typeNewStyleÈ   s/   € ô
 ˆCˆÜ�MŠMœ%Ÿ+š+ a›.Ó)ˆØ×Ñ˜Õr   c                 óˆ   • [         /n[        R                  " [        R                  " U5      5      nU R                  X5        g)zM
Test that a builtin type can be jellied and unjellied to the original
type.
N)Ústrr   r^   r_   r�   s      r   Útest_typeBuiltinÚJellyTests.test_typeBuiltinÑ   s/   € ô
 ˆEˆÜ�MŠMœ%Ÿ+š+ a›.Ó)ˆØ×Ñ˜Õr   c                 ó$  • [         R                   R                  5       n[         R                   R                  5       U-
  nX/n[        R                  " U5      n[        R                  " U5      nU R	                  X55        U R                  X55        g)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   r^   r_   ÚassertIsNot)r   ÚdtnÚdtdru   rw   Úoutputs         r   Útest_dateTimeÚJellyTests.test_dateTimeÚ   sp   € ô ×Ñ×#Ñ#Ó%ˆÜ×Ñ×#Ñ#Ó%¨Ñ+ˆØ�Jˆ	Ü�KŠK˜	Ó"ˆÜ—’˜qÓ!ˆØ×Ñ˜Ô+Ø×Ñ˜Õ+r   c                 ó2  • [         R                  " SSS5      n[         R                  " SSSS5      n[         R                   R                  X5      nU[         R                   " SSS5      -
  n[	        X5        [	        X5        [	        X5        [	        X5        g	)
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ä  é   é   r   é   é   iX  é   N)r™   ÚdateÚtimeÚcombinerf   )r   Ú
sampleDateÚ
sampleTimeÚsampleDateTimeÚsampleTimeDeltas        r   Útest_bananaTimeTypesÚJellyTests.test_bananaTimeTypesè   sy   € ô —]’] 4¨¨BÓ/ˆ
Ü—]’] 1 b¨!¨SÓ1ˆ
Ü!×*Ñ*×2Ñ2°:ÓJˆØ(¬8×+<Ò+<¸TÀ1ÀaÓ+HÑHˆÜ�tÔ(Ü�tÔ(Ü�tÔ,Ü�tÕ-r   c                 óL  • [         R                  " S5      [         R                  " S5      [         R                  " S5      [         R                  " S5      /n[        R                  " U5      n[        R                  " U5      nU R	                  X5        U R                  X5        g)z�
Jellying L{decimal.Decimal} instances and then unjellying the result
should produce objects which represent the values of the original
inputs.
ú9.95r   rl   ú-78.901N)ÚdecimalÚDecimalr   r^   r_   r›   )r   ru   rw   rž   s       r   Útest_decimalÚJellyTests.test_decimal÷   su   € ô �OŠO˜FÓ#Ü�OŠO˜AÓÜ�OŠO˜FÓ#Ü�OŠO˜IÓ&ð	
ˆ	ô �KŠK˜	Ó"ˆÜ—’˜qÓ!ˆØ×Ñ˜Ô+Ø×Ñ˜Õ+r   c                 ó  • [         R                  " S5      [         R                  " S5      [         R                  " S5      [         R                  " S5      /n[        R                  " U R                  5      nU R                  X!5        g)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   rl   r²   N)r³   r´   r   r^   ÚdecimalDatar_   )r   Úexpectedrž   s      r   Útest_decimalUnjellyÚJellyTests.test_decimalUnjelly  s_   € ô �OŠO˜FÓ#Ü�OŠO˜AÓÜ�OŠO˜FÓ#Ü�OŠO˜IÓ&ð	
ˆô —’˜t×/Ñ/Ó0ˆØ×Ñ˜Õ*r   c                 óV   • [         R                  " S5      /nU R                  US5        g)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±   rj   N)r³   r´   ry   ©r   ru   s     r   Útest_decimalSecurityÚJellyTests.test_decimalSecurity  s%   € ô —_’_ VÓ,Ð-ˆ	Ø×Ñ˜9 jÕ1r   c                 ó¦   • 1 Sk/n[         R                  " [         R                   " U5      5      nU R                  X5        U R                  X5        g)z„
Jellying C{set} instances and then unjellying the result
should produce objects which represent the values of the original
inputs.
¾   r   é   r¦   N)r   r^   r_   r›   ©r   ru   rž   s      r   Útest_setÚJellyTests.test_set&  s>   € ò �Kˆ	Ü—’œuŸ{š{¨9Ó5Ó6ˆØ×Ñ˜Ô+Ø×Ñ˜Õ+r   c                 ó¸   • [        / SQ5      /n[        R                  " [        R                  " U5      5      nU R                  X5        U R	                  X5        g)zŠ
Jellying L{frozenset} instances and then unjellying the result
should produce objects which represent the values of the original
inputs.
©r   rÂ   r¦   N)Ú	frozensetr   r^   r_   r›   rÃ   s      r   Útest_frozensetÚJellyTests.test_frozenset1  sD   € ô šyÓ)Ð*ˆ	Ü—’œuŸ{š{¨9Ó5Ó6ˆØ×Ñ˜Ô+Ø×Ñ˜Õ+r   c                 ó2   • 1 Sk/nU R                  US5        g)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.
rÁ   s   setN)ry   r½   s     r   Útest_setSecurityÚJellyTests.test_setSecurity<  s   € ò �Kˆ	Ø×Ñ˜9 fÕ-r   c                 óD   • [        / SQ5      /nU R                  US5        g)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.
rÇ   s	   frozensetN)rÈ   ry   r½   s     r   Útest_frozensetSecurityÚ!JellyTests.test_frozensetSecurityE  s!   € ô šyÓ)Ð*ˆ	Ø×Ñ˜9 lÕ3r   c                 ó  • U R                  [        SS5      R                  [        SS5      5      5        [        SS5      n[        R                  " U5      n[        R                  " U5      nU R                  UR                  U5      5        g)z
Simplest test case.
r|   r~   r   rÂ   N)Ú
assertTruerQ   rY   r   r^   )r   r|   Úcerealr~   s       r   Útest_simpleÚJellyTests.test_simpleN  sj   € ð 	�‰Ü˜C Ó%×1Ñ1´/À#ÀsÓ2KÓLô	
ô ˜A˜qÓ!ˆÜ—’˜Q“ˆÜ�MŠM˜&Ó!ˆØ�‰˜Ÿ™ aÓ(Õ)r   c                 óh  • / nUnUR                  U5        UR                  U5        U R                  US   US   5        U R                  US   S   U5        [        R                  " U5      n[        R                  " U5      nU R                  US   US   5        U R                  US   S   U5        g)z:
Test to make sure that objects retain identity properly.
r   r   N)r   r†   r   r^   )r   rA   rB   ÚsÚzs        r   Útest_identityÚJellyTests.test_identityZ  s—   € ð ˆØˆØ	�‰�ŒØ	�‰�ŒØ�‰�a˜‘d˜A˜a™DÔ!Ø�‰�a˜‘d˜1‘g˜qÔ!Ü�KŠK˜‹NˆÜ�MŠM˜!ÓˆØ�‰�a˜‘d˜A˜a™DÔ!Ø�‰�a˜‘d˜1‘g˜qÕ!r   c                 óÆ   • Sn[         R                  " [         R                   " U5      5      nU R                  X5        U R                  [        U5      [        U5      5        g )NÚblah)r   r^   r_   ÚtyperD   s      r   Útest_strÚJellyTests.test_stri  sC   € ØˆÜ�MŠMœ%Ÿ+š+ a›.Ó)ˆØ×Ñ˜ÔØ×Ñœ˜a›¤$ q£'Õ*r   c                 óú   • / nSU0U4nUR                  U5        [        R                  " U5      n[        R                  " U5      nU R                  US   S   US   5        U R                  US   S   S   U5        g )NÚlistr   r   ©r   r   r^   r†   )r   ÚrerefÚtoplevelTupler×   rØ   s        r   Útest_stressReferencesÚ JellyTests.test_stressReferenceso  sq   € ØˆØ  %˜¨%Ð0ˆØ�‰�]Ô#Ü�KŠK˜Ó&ˆÜ�MŠM˜!ÓˆØ�‰�a˜‘d˜6‘l A a¡DÔ)Ø�‰�a˜‘d˜6‘l 1‘o qÕ)r   c                 óÀ   • / nU4nUR                  U45        [        R                  " U5      n[        R                  " U5      nU R                  US   S   S   U5        g ©Nr   râ   )r   r|   r�   r×   rØ   s        r   Útest_moreReferencesÚJellyTests.test_moreReferencesx  sP   € ØˆØˆDˆØ	�‰�!�ŒÜ�KŠK˜‹NˆÜ�MŠM˜!ÓˆØ�‰�a˜‘d˜1‘g˜a‘j !Õ$r   c                 ó¸   • [         R                  " 5       n[         R                   " 0 5      nU R                  [         R                  [         R                  X!5        g)z0
Test for type-level security of serialization.
N)r   ro   rs   rt   r^   )r   rx   Údcts      r   Útest_typeSecurityÚJellyTests.test_typeSecurity€  s;   € ô ×&Ò&Ó(ˆÜ�kŠk˜"‹oˆØ×Ñœ%×-Ñ-¬u¯}©}¸cÕJr   c                 ód   • [         R                  " [        5      nU R                  [        U5        g r   )r   r^   r;   r†   )r   Úujs     r   Útest_newStyleClassesÚJellyTests.test_newStyleClassesˆ  s   € Ü�]Š]œ1ÓˆØ�‰”a˜Õr   c                 óà  • [        5       n[        R                  " [        R                  " U5      5        [        R                  " [        R                  " UR                  5      5        [        / SQ[        S5      (       + [        S5      SSSS[         [        SS0[         R                  /nU H=  nU R                  U[        R                  " [        R                  " U5      5      5        M?     g)z1
Test for all types currently supported in jelly
rÇ   r   ÚtestgÍÌÌÌÌL4@Nr|   )r"   r   r^   r(   r-   Úboolr   r_   )r   r|   ÚitemsÚis       r   Útest_lotsaTypesÚJellyTests.test_lotsaTypesŒ  s¢   € ô ‹CˆÜ�Š”e—k’k !“nÔ%Ü�Š”e—k’k !§)¡)Ó,Ô-äÚÜ�Q“ŒKÜ�‹GØØØØÜÜØ�!ˆHÜ�I‰Ið
ˆó ˆAØ×Ñ˜Q¤§¢¬e¯kªk¸!«nÓ =Ö>ò r   c                 óX  •  " S S5      q [        5       n[        U5      n[        U5      n[        X#45      nX"X3XDSU0n[        R                  " [        R                  " U5      5      S   nU R	                  UR
                  S   R
                  UR
                  S   R
                  5        g )Nc                   ó,   • \ rS rSrS rS rS rS rSrg)Ú
TupleStatei§  c                 ó   • Xl         g r   ©rX   rW   s     r   r   ÚTupleState.__init__¨  s   € Ø"•
r   c                 ó   • U R                   4$ r   rþ   r'   s    r   rH   ÚTupleState.__getstate__«  s   € ØŸ
™
�}Ð$r   c                 ó   • US   U l         g rè   rþ   rK   s     r   rM   ÚTupleState.__setstate__®  s   € Ø" 1™X�•
r   c                 ó,   • [        U R                  5      $ r   )ÚhashrX   r'   s    r   Ú__hash__ÚTupleState.__hash__±  s   € Ü˜DŸJ™JÓ'Ð'r   rþ   N)	r   r   r   r   r   rH   rM   r  r   r    r   r   rü   rü   §  s   † ò#ò%ò&õ(r   rü   Út3r   r   )rü   r"   r   r^   r†   rX   )r   r|   Út1Út2r  ÚdÚt3primes          r   Útest_setStateÚJellyTests.test_setState¤  sŠ   € ÷	(ñ 	(ô ‹CˆÜ˜‹]ˆÜ˜‹]ˆÜ˜˜Ó!ˆØ�R˜R T¨2Ð.ˆÜ—-’-¤§¢¨A£Ó/°Ñ5ˆØ�‰�g—m‘m AÑ&×,Ñ,¨g¯m©m¸AÑ.>×.DÑ.DÕEr   c                 óè  • [         R                  " 5       nUR                  [        [        5        [        5       n[	        5       n[        5       nX2l        XBl        X2l        XCl        [         R                   " X!5      n[         R                  " XQ5      nU R                  UR                  [         R                  5        [         R                   " U5      nU R                  [         R                  [         R                  Xq5        U R                  UR                  UR                  S5        [         R                   " [        U5      n[         R                  " XQ5      nU R                  U[        SU-  5        g)z1
Test for class-level security of serialization.
zIdentity mismatchzA came back: %sN)r   ro   ÚallowInstancesOfr"   r/   r5   r~   rw   rA   r^   r…   ÚUnpersistablers   rt   r†   )r   rx   r|   r~   rw   ÚfriendlyrA   Úmeans           r   Útest_classSecurityÚJellyTests.test_classSecurity¼  s÷   € ô ×&Ò&Ó(ˆØ×Ñ¤¤1Ô%Ü‹CˆÜ‹CˆÜ‹CˆàŒØŒàŒØŒä—;’;˜qÓ)ˆÜ�MŠM˜(Ó+ˆØ×Ñ˜aŸc™c¤5×#6Ñ#6Ô7ä�{Š{˜1‹~ˆØ×Ñœ%×-Ñ-¬u¯}©}¸dÔKØ�‰�a—c‘c˜1Ÿ3™3Ð 3Ô4ä—;’;œq &Ó)ˆÜ�MŠM˜(Ó+ˆØ�‰�aœÐ-°Ñ1Õ2r   c                 óh  •  " S S[         R                  5      n[         R                  " U[         R                  5        U" 5       nSUl        [         R
                  " [         R                   " U5      5      nU R                  UR                  S5        U R                  U[         R                  5        g)zZ
Test that if Unjellyable is used to deserialize a jellied object,
state comes out right.
c                   ó   • \ rS rSrSrg)Ú7JellyTests.test_unjellyable.<locals>.JellyableTestClassiÞ  r    N©r   r   r   r   r   r    r   r   ÚJellyableTestClassr  Þ  ó   † Úr   r  ÚvalueN)r   Ú	JellyableÚsetUnjellyableForClassÚUnjellyableÚ	attributer^   r_   r…   )r   r  Úinputrž   s       r   Útest_unjellyableÚJellyTests.test_unjellyableØ  s}   € ô	¤§¡ô 	ô 	×$Ò$Ð%7¼×9JÑ9JÔKÙ"Ó$ˆØ!ˆŒÜ—’œuŸ{š{¨5Ó1Ó2ˆØ×Ñ˜×)Ñ)¨7Ô3Ø×Ñ˜f¤e×&7Ñ&7Õ8r   c                 ó¸  • 0 S/nU4S jnU4S jn[        SS5      n[        SS5      n[        SS5      nXTl        Xdl        XVl        [        R                  " XBS	9n[        R                  " XsS
9nU R                  UR                  UR                  R                  5        U R                  US   S5        U R                  UR                  UR                  S5        g )Nr   c                 óH   • US   S-   US'   XS   US   '   [        US   5      $ )Nr   r   )r•   )ÚobjÚjelÚpersts      r   ÚpersistentStoreÚ:JellyTests.test_persistentStorage.<locals>.persistentStoreë  s1   € Ø˜Q‘x !‘|ˆE�!‰HØ!$�!‰H�U˜1‘XÑÜ�u˜Q‘x“=Ð r   c                 ó(   • [        U 5      nUS   U   $ rè   )Úint)ÚpidstrÚunjr(  Úpids       r   ÚpersistentLoadÚ9JellyTests.test_persistentStorage.<locals>.persistentLoadð  s   € Ü�f“+ˆCØ˜‘8˜C‘=Ð r   rÂ   r¦   r   r¥   é   )r)  )r0  r   zpersistentStore was not called.z$Persistent storage identity failure.)rQ   r~   rw   r   r^   r†   rÒ   )	r   r(  r)  r0  r|   r~   rw   r'  rA   s	            r   Útest_persistentStorageÚ!JellyTests.test_persistentStorageè  s´   € Ø�Q�ˆà,1ô 	!ð
 /4ô 	!ô ˜A˜qÓ!ˆÜ˜A˜qÓ!ˆÜ˜A˜qÓ!ˆàŒØŒØŒä�kŠk˜!Ñ=ˆÜ�MŠM˜#Ñ=ˆà�‰�a—c‘c˜1Ÿ3™3Ÿ5™5Ô!Ø�‰˜˜a™Ð"CÔDØ�‰�a—c‘c˜1Ÿ3™3Ð FÕGr   c                 óÔ   • [        5       n[        U5      n[        U5        [        U5        [        R                  " U5      n[        R                  " U5      nU R                  X5        g r   )r
   r   r^   Ú_check_newstyle)r   r‡   Ún1r'  rˆ   s        r   Útest_newStyleClassesAttributesÚ)JellyTests.test_newStyleClassesAttributes  sI   € Ü‹JˆÜ�a‹[ˆÜ�ŒÜ�Œä�kŠk˜!‹nˆÜ�MŠM˜#Óˆà×Ñ˜QÕ"r   c                 ó¤  • U R                  UR                  UR                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  [        UR                  5      [        UR                  5      5        [        UR                  UR                  5       H  u  p4U R                  X45        M     g )Nr   )r_   r   r   Úlenr   Úzipr6  )r   r|   r~   rA   rB   s        r   r6  ÚJellyTests._check_newstyle  s‹   € Ø×Ñ˜Ÿ™˜qŸt™tÔ$Ø×Ñ˜Ÿ™ aÔ(Ø×Ñ˜Ÿ™ aÔ(Ø×Ñœ˜QŸZ™Z›¬#¨a¯j©j«/Ô:Ü˜Ÿ
™
 A§J¡JÖ/‰DˆAØ× Ñ  Ö&ò 0r   c                 ó‚  • [         R                  " 5       n[         R                  " 5       nUR                  [	        5       5        [
        R
                  " XS9n[         R                  " 5       nUR                  [	        5       5        [
        R                  " X4S9nU R                  UR                  UR                  5        g)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   r^   ÚassertInÚluidÚlocalObjects)r   ÚrefÚjellyBrokerÚjÚunjellyBrokerrð   s         r   Útest_referenceableÚJellyTests.test_referenceable  s~   € ô ×ÒÓ ˆÜ—i’i“kˆØ×"Ñ"¤?Ó#4Ô5Ü�KŠK˜Ñ1ˆäŸ	š	›ˆØ×$Ñ$¤_Ó%6Ô7ä�]Š]˜1Ñ4ˆØ�‰�b—g‘g˜{×7Ñ7Õ8r   r    N)%r   r   r   r   r   r¸   ry   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"  r3  r8  r6  rK  r   r    r   r   rh   rh   x   s¹   † ñð 	ÚÚÚÚ ð€KòIò&$ò"!ò 
!òòò,ò.ò,ò"+ò*2ò	,ò	,ò.ò4ò
*ò"ò+ò*ò%òKòò?ò0Fò03ò89ò Hò6	#ò'õ9r   rh   c                   ó$   • \ rS rSrSrS rS rSrg)ÚJellyDeprecationTestsi)  z#
Tests for deprecated Jelly things
c                 óú   • [         R                    U R                  U R                  /5      nU R	                  [        U5      S5        U R	                  US   S   S5        U R	                  US   S   [        5        g)z4
L{jelly.instance_atom} is deprecated since 15.0.0.
r   r   Úmessagezltwisted.spread.jelly.instance_atom was deprecated in Twisted 15.0.0: instance_atom is unused within Twisted.ÚcategoryN)r   Úinstance_atomÚflushWarningsÚtest_deprecatedInstanceAtomr_   r;  ÚDeprecationWarning©r   Úwarningss     r   rT  Ú1JellyDeprecationTests.test_deprecatedInstanceAtom.  su   € ô 	×ÒØ×%Ñ% t×'GÑ'GÐ&HÓIˆØ×Ñœ˜X›¨Ô*Ø×ÑØ�Q‰K˜	Ñ"ð>ô	
ð
 	×Ñ˜ !™ ZÑ0Ô2DÕEr   c                 óú   • [         R                  " SSS/S//5        U R                  5       nU R                  [	        U5      S5        U R                  US   S   S5        U R                  US   S	   [
        5        g
)z9
Unjellying the instance atom is deprecated with 15.0.0.
ÚinstanceÚclassz twisted.spread.test.test_jelly.AÚ
dictionaryr   r   rP  ztUnjelly support for the instance atom is deprecated since Twisted 15.0.0.  Upgrade peer for modern instance support.rQ  N)r   r^   rS  r_   r;  rU  rV  s     r   Ú%test_deprecatedUnjellyingInstanceAtomÚ;JellyDeprecationTests.test_deprecatedUnjellyingInstanceAtom<  s‚   € ô 	�ŠØ˜'Ð#EÐFÈÈÐWô	
ð ×%Ñ%Ó'ˆØ×Ñœ˜X›¨Ô*Ø×ÑØ�Q‰K˜	Ñ"ðIô	
ð
 	×Ñ˜ !™ ZÑ0Ô2DÕEr   r    N)r   r   r   r   r   rT  r]  r   r    r   r   rN  rN  )  s   † ñòFõFr   rN  c                   ó   • \ rS rSrS rSrg)ÚClassAiM  c                 ó$   • [        U 5      U l        g r   )ÚClassBrG  r'   s    r   r   ÚClassA.__init__N  s   € Ü˜$“<ˆ�r   ©rG  N©r   r   r   r   r   r   r    r   r   r`  r`  M  s   † õ r   r`  c                   ó   • \ rS rSrS rSrg)rb  iR  c                 ó   • Xl         g r   rd  )r   rG  s     r   r   ÚClassB.__init__S  s   € Ø�r   rd  Nre  r    r   r   rb  rb  R  s   † õr   rb  c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚCircularReferenceTestsiW  zF
Tests for circular references handling in the jelly/unjelly process.
c                 ó2  • [         R                  " [        [        5        [         R                  " [        [        5        [         R                  " [         R                   " [        5       5      5      nU R                  UR                  R                  US5        g )Nú,Identity not preserved in circular reference)r   r  r`  rb  r^   r†   rG  )r   r|   s     r   Útest_simpleCircleÚ(CircularReferenceTests.test_simpleCircle\  sT   € Ü×$Ò$¤V¬VÔ4Ü×$Ò$¤V¬VÔ4Ü�MŠMœ%Ÿ+š+¤f£hÓ/Ó0ˆØ�‰�a—e‘e—i‘i Ð$RÕSr   c                 óf  •  " S S5      nU" 5       nS Ul         [        5       n[        R                  " [        [        5        [        R                  " [        [        5        [        R                  " X2S9n[        R
                  " U5      nU R                  UR                  R                  US5        g )Nc                   ó   • \ rS rSrSrg)ÚHCircularReferenceTests.test_circleWithInvoker.<locals>.DummyInvokerClassic  r    Nr  r    r   r   ÚDummyInvokerClassrq  c  r  r   rr  r?  rl  )ÚserializingPerspectiver`  r   r  rb  r^   ÚfailUnlessIdenticalrG  )r   rr  ÚdummyInvokerÚa0rI  Úa1s         r   Útest_circleWithInvokerÚ-CircularReferenceTests.test_circleWithInvokerb  s   € ÷	ñ 	ñ )Ó*ˆØ.2ˆÔ+Ü‹XˆÜ×$Ò$¤V¬VÔ4Ü×$Ò$¤V¬VÔ4Ü�KŠK˜Ñ1ˆÜ�]Š]˜1ÓˆØ× Ñ Ø�F‰F�J‰J˜ÐJõ	
r   c                 ó2  • [        5       n[        US5      nUR                  U5        [        R                  " [        R                  " U5      5      nU R                  UR                  [         5        U R                  [        UR                  5      U/5        g)zw
Check that a C{set} can contain a circular reference and be serialized
and unserialized without losing the reference.
N)	ÚsetrQ   Úaddr   r^   r…   rA   r_   rá   )r   r×   r|   Úress       r   rÄ   ÚCircularReferenceTests.test_setq  sf   € ô
 ‹EˆÜ˜A˜tÓ$ˆØ	�‰ˆaŒÜ�mŠmœEŸKšK¨›NÓ+ˆØ×Ñ˜cŸe™e¤SÔ)Ø×Ñœ˜cŸe™e› s eÕ,r   c                 ó   • [        SS5      n[        U/5      nX!l        [        R                  " [        R                  " U5      5      nU R                  UR                  [        5        U R                  [        UR                  5      U/5        g)z}
Check that a L{frozenset} can contain a circular reference and be
serialized and unserialized without losing the reference.
N)rQ   rÈ   rA   r   r^   r…   r_   rá   )r   r|   r×   r}  s       r   rÉ   Ú%CircularReferenceTests.test_frozenset}  sd   € ô
 ˜D $Ó'ˆÜ�q�c‹NˆØŒÜ�mŠmœEŸKšK¨›NÓ+ˆØ×Ñ˜cŸe™e¤YÔ/Ø×Ñœ˜cŸe™e› s eÕ,r   r    N)
r   r   r   r   r   rm  rx  rÄ   rÉ   r   r    r   r   rj  rj  W  s   † ñòTò
ò
-õ
-r   rj  )r   r™   r³   Útwisted.internet.testingr   Útwisted.spreadr   r   r   Útwisted.trialr   Útwisted.trial.unittestr   r  r
   r"   r-   r/   r5   r;   r>   rQ   rf   rh   rN  ÚCopyableÚ
RemoteCopyr`  rb  rj  r    r   r   Ú<module>r‡     sÍ   ðñó
 Û å 4ß ,Ñ ,Ý "Ý +ôˆu�‰ô ÷"ñ ò÷ñ ÷ñ ÷ñ ÷ñ ÷&/ñ /ò	1ôn9�ô n9ôb!F˜Hô !FôH ˆR�[‰[˜"Ÿ-™-ô  ô
ˆR�[‰[˜"Ÿ-™-ô ô
0-˜Xõ 0-r   