+
    üÐjƒ9  ã                   óæ  € R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
HtHt ^ RIHt ^ RIHt  ! R R	]4      t ! R
 R]4      t ! R R]P(                  4      t ! R R]P(                  4      t ! R R]
P.                  ]P(                  ]P0                  4      t ! R R]P(                  ]P0                  4      t]P6                  ! ]]4       ]P6                  ! ]]4       ]P8                  P;                  ]4        ! R R]P<                  4      t ! R R]P@                  4      t! ! R R]PD                  4      t# ! R R]#4      t$ ! R R]$4      t% ! R R4      t& ! R  R!]PD                  4      t'R"# )#z!
Tests for error handling in PB.
)ÚStringIO)Údefer)Úlog)Úqual)ÚflavorsÚjellyÚpb)ÚconnectedServerAndClient)Úunittestc                   ó   € ] tR t^tRtRtR# )ÚAsynchronousExceptionz|
Helper used to test remote methods which return Deferreds which fail with
exceptions which are not L{pb.Error} subclasses.
© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚD/usr/lib/python3/dist-packages/twisted/spread/test/test_pbfailure.pyr   r      ó   † õr   r   c                   ó   € ] tR t^tRtRtR# )ÚSynchronousExceptionza
Helper used to test remote methods which raise exceptions which are not
L{pb.Error} subclasses.
r   Nr   r   r   r   r   r      r   r   r   c                   ó   € ] tR t^"tRtRtR# )ÚAsynchronousErrorzx
Helper used to test remote methods which return Deferreds which fail with
exceptions which are L{pb.Error} subclasses.
r   Nr   r   r   r   r   r   "   r   r   r   c                   ó   € ] tR t^)tRtRtR# )ÚSynchronousErrorz]
Helper used to test remote methods which raise exceptions which are
L{pb.Error} subclasses.
r   Nr   r   r   r   r   r   )   r   r   r   c                   ó   € ] tR t^0tRtR# )Ú
JellyErrorr   N©r   r   r   r   r   r   r   r   r   r   0   ó   † Ûr   r   c                   ó   € ] tR t^4tRtR# )ÚSecurityErrorr   Nr    r   r   r   r#   r#   4   r!   r   r#   c                   ój   a € ] tR t^>t o R tR tR tR tR tR t	R t
R tR	 tRR ltRR ltRtV tR
# )Ú
SimpleRootc                ó@   € \         P                  ! \        R4      4      # )z4
Fail asynchronously with a non-pb.Error exception.
zremote asynchronous exception)r   Úfailr   ©Úselfs   &r   Úremote_asynchronousExceptionÚ'SimpleRoot.remote_asynchronousException?   s   € ô �zŠzÔ/Ð0OÓPÓQÐQr   c                ó   € \        R4      h)z3
Fail synchronously with a non-pb.Error exception.
zremote synchronous exception)r   r(   s   &r   Úremote_synchronousExceptionÚ&SimpleRoot.remote_synchronousExceptionE   s   € ô #Ð#AÓBÐBr   c                ó@   € \         P                  ! \        R4      4      # )z0
Fail asynchronously with a pb.Error exception.
zremote asynchronous error)r   r'   r   r(   s   &r   Úremote_asynchronousErrorÚ#SimpleRoot.remote_asynchronousErrorK   s   € ô �zŠzÔ+Ð,GÓHÓIÐIr   c                ó   € \        R4      h)z/
Fail synchronously with a pb.Error exception.
zremote synchronous error)r   r(   s   &r   Úremote_synchronousErrorÚ"SimpleRoot.remote_synchronousErrorQ   s   € ô Ð9Ó:Ð:r   c                óD   €  ! R R\         P                  4      pV! R4      h)z.
Fail with error that is not known to client.
c                   ó   € ] tR t^\tRtR# )Ú4SimpleRoot.remote_unknownError.<locals>.UnknownErrorr   Nr    r   r   r   ÚUnknownErrorr7   \   s   † Ûr   r8   zI'm not known to client!)r   ÚError)r)   r8   s   & r   Úremote_unknownErrorÚSimpleRoot.remote_unknownErrorW   s    € ô
	œ2Ÿ8™8ô 	ñ Ð5Ó6Ð6r   c                ó&   € V P                  4        R # ©N)Ú
raiseJellyr(   s   &r   Úremote_jellyÚSimpleRoot.remote_jellya   s   € Ø�‰Ör   c                ó&   € V P                  4        R # r=   )ÚraiseSecurityr(   s   &r   Úremote_securityÚSimpleRoot.remote_securityd   s   € Ø×ÑÖr   c                óˆ   € \         P                  ! 4       pVP                  V P                  4       VP	                  R 4       V# r=   )r   ÚDeferredÚaddCallbackr>   Úcallback©r)   Úds   & r   Úremote_deferredJellyÚSimpleRoot.remote_deferredJellyg   s/   € Ü�NŠNÓˆØ	�‰�d—o‘oÔ&Ø	�
‰
�4ÔØˆr   c                óˆ   € \         P                  ! 4       pVP                  V P                  4       VP	                  R 4       V# r=   )r   rF   rG   rB   rH   rI   s   & r   Úremote_deferredSecurityÚ"SimpleRoot.remote_deferredSecuritym   s1   € Ü�NŠNÓˆØ	�‰�d×(Ñ(Ô)Ø	�
‰
�4ÔØˆr   Nc                ó   € \        R 4      h)zI'm jellyable!)r   ©r)   Úresultss   &&r   r>   ÚSimpleRoot.raiseJellys   s   € ÜÐ)Ó*Ð*r   c                ó   € \        R 4      h)zI'm secure!)r#   rQ   s   &&r   rB   ÚSimpleRoot.raiseSecurityv   s   € Ü˜MÓ*Ð*r   r   r=   )r   r   r   r   r*   r-   r0   r3   r:   r?   rC   rK   rN   r>   rB   r   Ú__classdictcell__©Ú__classdict__s   @r   r%   r%   >   sD   ø‡ € òRòCòJò;ò7òòòòô+÷+ò +r   r%   c                   ó.   a € ] tR t^zt o RtRtR tRtV tR# )ÚSaveProtocolServerFactoryzX
A L{pb.PBServerFactory} that saves the latest connected client in
C{protocolInstance}.
Nc                ó   € Wn         R# )z#
Keep track of the given protocol.
N©ÚprotocolInstance)r)   Úprotocols   &&r   ÚclientConnectionMadeÚ.SaveProtocolServerFactory.clientConnectionMade‚   s
   € ð !)Ör   r\   )	r   r   r   r   r   r]   r_   r   rV   rW   s   @r   rZ   rZ   z   s   ø‡ € ñð
 Ð÷)ð )r   rZ   c                   ó*   a € ] tR t^‰t o ^ tR tRtV tR# )ÚPBConnTestCasec                óð   a € \        \        4       4      S n        S P                  S P                  n        \        P
                  ! 4       S n        \        V 3R  lV 3R l4      w  S n        S n	        S n
        R# )c                  ó:   <€ S P                   P                  R 4      # r=   )ÚserverFactoryÚbuildProtocolr(   s   €r   Ú<lambda>Ú&PBConnTestCase.setUp.<locals>.<lambda>•   ó   ø€ �D×&Ñ&×4Ñ4°TÔ:r   c                  ó:   <€ S P                   P                  R 4      # r=   )ÚclientFactoryrf   r(   s   €r   rg   rh   –   ri   r   N)rZ   r%   re   ÚunsafeTracebacksr   ÚPBClientFactoryrk   r	   ÚconnectedServerÚconnectedClientÚpumpr(   s   fr   ÚsetUpÚPBConnTestCase.setUpŒ   s]   ø€ Ü6´z³|ÓDˆÔØ.2×.CÑ.Cˆ×ÑÔ+Ü×/Ò/Ó1ˆÔô
 %Ü:Ü:ó
ñ		
ØÔ ØÔ ØŽIr   )rk   ro   rn   rp   re   N)r   r   r   r   rl   rq   r   rV   rW   s   @r   rb   rb   ‰   s   ø‡ € ØÐ÷
ð 
r   rb   c                   ó¶   a € ] tR t^št o ]P
                  P                  tR tR t	R t
R tR tR tR tRR	 ltR
 tR tR tR tR tR tR tR tR tRtV tR# )ÚPBFailureTestsc                ó¸   a aaaa€ VVV 3R  loS P                   P                  4       pVV3R lpVP                  V4       S P                  P	                  4        R# )c                 ó  <€ V P                  S4       SP                  V P                  R 4       S'       d-   SP                  S4      pSP	                  \        V4      ^4       V P                  V P                  V P                  3# )úTraceback unavailable
)ÚtrapÚcompareÚ	tracebackÚflushLoggedErrorsÚassertEqualÚlenÚtypeÚvalue)ÚerrÚerrsÚexceptionTypeÚflushr)   s   & €€€r   ÚebÚ)PBFailureTests._exceptionTest.<locals>.ebž   sb   ø€ Ø�H‰H�]Ô#Ø�L‰L˜Ÿ™Ð(AÔBßØ×-Ñ-¨mÓ<�Ø× Ñ ¤ T£¨AÔ.Ø—H‘H˜cŸi™i¨¯©Ð7Ð7r   c                 óL   <€ V P                  S4      pVP                  S4       V# r=   )Ú
callRemoteÚ
addErrback)ÚrootrJ   r„   Úmethods   & €€r   ÚgotRootObjectÚ4PBFailureTests._exceptionTest.<locals>.gotRootObject¨   s"   ø€ Ø—‘ Ó'ˆAØ�L‰L˜ÔØˆHr   N©rk   ÚgetRootObjectrG   rp   rƒ   )r)   rŠ   r‚   rƒ   rJ   r‹   r„   s   ffff  @r   Ú_exceptionTestÚPBFailureTests._exceptionTest�   s?   ü€ ÷	8ð ×Ñ×,Ñ,Ó.ˆö	ð
 	
�‰�mÔ$Ø�	‰	�‰Ör   c                ó0   € V P                  R\        R4      # )zˆ
Test that a Deferred returned by a remote method which already has a
Failure correctly has that error passed back to the calling side.
ÚasynchronousExceptionT)r�   r   r(   s   &r   Útest_asynchronousExceptionÚ)PBFailureTests.test_asynchronousException°   s   € ð
 ×"Ñ"Ð#:Ô<QÐSWÓXÐXr   c                ó0   € V P                  R\        R4      # )z_
Like L{test_asynchronousException}, but for a method which raises an
exception synchronously.
ÚsynchronousExceptionT)r�   r   r(   s   &r   Útest_synchronousExceptionÚ(PBFailureTests.test_synchronousException·   s   € ð
 ×"Ñ"Ð#9Ô;OÐQUÓVÐVr   c                ó0   € V P                  R\        R4      # )zu
Like L{test_asynchronousException}, but for a method which returns a
Deferred failing with an L{pb.Error} subclass.
ÚasynchronousErrorF)r�   r   r(   s   &r   Útest_asynchronousErrorÚ%PBFailureTests.test_asynchronousError¾   s   € ð
 ×"Ñ"Ð#6Ô8IÈ5ÓQÐQr   c                ó0   € V P                  R\        R4      # )ze
Like L{test_asynchronousError}, but for a method which synchronously
raises a L{pb.Error} subclass.
ÚsynchronousErrorF)r�   r   r(   s   &r   Útest_synchronousErrorÚ$PBFailureTests.test_synchronousErrorÅ   s   € ð
 ×"Ñ"Ð#5Ô7GÈÓOÐOr   c                ó(   € V P                  W4       V# r=   )r|   )r)   ÚresultÚexpectedResults   &&&r   Ú_successÚPBFailureTests._successÌ   s   € Ø×Ñ˜Ô0Øˆr   c                óB   € VP                  V P                  W23R 7       V# ))ÚcallbackArgs)ÚaddCallbacksr¤   )r)   Ú
remoteCallr£   r„   s   &&&&r   Ú_addFailingCallbacksÚ#PBFailureTests._addFailingCallbacksÐ   s"   € Ø×Ñ §¡¨rÐ@QÐÔRØÐr   Nc                ó®   a aaaa€ S P                   P                  4       pVVVVV 3R lpVP                  V4       S P                  P	                  4        R# )z¦
Call the given remote method and attach the given errback to the
resulting Deferred.  If C{exc} is not None, also assert that one
exception of that type was logged.
c                 ó„   <€ SP                  V P                  S4      SS4      pSe   VV3R lpVP                  V4       V# )Nc                 ó\   <€ SP                  \        SP                  S4      4      ^4       V # )é   )r|   r}   r{   )r€   Úexcr)   s   &€€r   Ú
gotFailureÚ@PBFailureTests._testImpl.<locals>.gotRootObj.<locals>.gotFailureâ   s(   ø€ Ø×$Ñ$¤S¨×)?Ñ)?ÀÓ)DÓ%EÀqÔIØ�Jr   )rª   r‡   ÚaddBoth)ÚobjÚfailureDeferredr±   r„   r°   ÚexpectedrŠ   r)   s   &  €€€€€r   Ú
gotRootObjÚ,PBFailureTests._testImpl.<locals>.gotRootObjÜ   sE   ø€ Ø"×7Ñ7Ø—‘˜vÓ&¨°"óˆOð Šöð  ×'Ñ'¨
Ô3Ø"Ð"r   Nr�   )r)   rŠ   r¶   r„   r°   ÚrootDeferredr·   s   fffff  r   Ú	_testImplÚPBFailureTests._testImplÔ   sA   ü€ ð ×)Ñ)×7Ñ7Ó9ˆ÷	#ñ 	#ð 	× Ñ  Ô,Ø�	‰	�‰Ör   c                ó6   a € V 3R lpS P                  R^+V4      # )z
Test that an exception which is a subclass of L{pb.Error} has more
information passed across the network to the calling side.
c                 ó¾   <€ V P                  \        4       SP                  V P                  \        4       SP                  V P                  V P                  4       ^+# )é+   ©rx   r   ÚassertNotIsInstancer~   ÚstrÚassertIsInstancer   ©r'   r)   s   &€r   ÚfailureJellyÚ6PBFailureTests.test_jellyFailure.<locals>.failureJellyò   s>   ø€ Ø�I‰I”jÔ!Ø×$Ñ$ T§Y¡Y´Ô4Ø×!Ñ! $§*¡*¨d¯i©iÔ8Ùr   r   ©rº   )r)   rÄ   s   f r   Útest_jellyFailureÚ PBFailureTests.test_jellyFailureì   s   ø€ õ	ð �~‰~˜g r¨<Ó8Ð8r   c                ó6   a € V 3R lpS P                  RRV4      # )zw
Test that a Deferred which fails with a L{pb.Error} is treated in
the same way as a synchronously raised L{pb.Error}.
c                 ó¾   <€ V P                  \        4       SP                  V P                  \        4       SP                  V P                  V P                  4       R # )é®  r¿   rÃ   s   &€r   ÚfailureDeferredJellyÚFPBFailureTests.test_deferredJellyFailure.<locals>.failureDeferredJelly   s>   ø€ Ø�I‰I”jÔ!Ø×$Ñ$ T§Y¡Y´Ô4Ø×!Ñ! $§*¡*¨d¯i©iÔ8Ùr   ÚdeferredJellyrË   rÆ   )r)   rÌ   s   f r   Útest_deferredJellyFailureÚ(PBFailureTests.test_deferredJellyFailureú   s   ø€ õ	ð �~‰~˜o¨sÐ4HÓIÐIr   c                ó6   a € V 3R lpS P                  RRV4      # )zŒ
A non-jellyable L{pb.Error} subclass raised by a remote method is
turned into a Failure with a type set to the FQPN of the exception
type.
c                 ó@   <€ SP                  V P                  R 4       R# )s3   twisted.spread.test.test_pbfailure.SynchronousErroré¯  ©r|   r~   rÃ   s   &€r   ÚfailureUnjellyableÚBPBFailureTests.test_unjellyableFailure.<locals>.failureUnjellyable  s    ø€ Ø×ÑØ—	‘	ÐQôñ r   rž   rÓ   rÆ   )r)   rÕ   s   f r   Útest_unjellyableFailureÚ&PBFailureTests.test_unjellyableFailure  s   ø€ õ	ð �~‰~Ð0°#Ð7IÓJÐJr   c                ó6   a € V 3R lpS P                  RRV4      # )zw
Test that an exception which is a subclass of L{pb.Error} but not
known on the client side has its type set properly.
c                 ó@   <€ SP                  V P                  R 4       R# )s/   twisted.spread.test.test_pbfailure.UnknownErroréÖ  rÔ   rÃ   s   &€r   ÚfailureUnknownÚ:PBFailureTests.test_unknownFailure.<locals>.failureUnknown  s    ø€ Ø×ÑØ—	‘	ÐMôñ r   ÚunknownErrorrÛ   rÆ   )r)   rÜ   s   f r   Útest_unknownFailureÚ"PBFailureTests.test_unknownFailure  s   ø€ õ	ð �~‰~˜n¨d°NÓCÐCr   c                ó6   a € V 3R lpS P                  RRV4      # )z´
Test that even if an exception is not explicitly jellyable (by being
a L{pb.Jellyable} subclass), as long as it is an L{pb.Error}
subclass it receives the same special treatment.
c                 ó¾   <€ V P                  \        4       SP                  V P                  \        4       SP                  V P                  V P                  4       R # )éÌ  ©rx   r#   rÀ   r~   rÁ   rÂ   r   rÃ   s   &€r   ÚfailureSecurityÚ<PBFailureTests.test_securityFailure.<locals>.failureSecurity,  s>   ø€ Ø�I‰I”mÔ$Ø×$Ñ$ T§Y¡Y´Ô4Ø×!Ñ! $§*¡*¨d¯i©iÔ8Ùr   Úsecurityrã   rÆ   )r)   rå   s   f r   Útest_securityFailureÚ#PBFailureTests.test_securityFailure%  s   ø€ õ	ð �~‰~˜j¨$°Ó@Ð@r   c                ó6   a € V 3R lpS P                  RRV4      # )zª
Test that a Deferred which fails with a L{pb.Error} which is not
also a L{pb.Jellyable} is treated in the same way as a synchronously
raised exception of the same type.
c                 ó¾   <€ V P                  \        4       SP                  V P                  \        4       SP                  V P                  V P                  4       R # )éø§  rä   rÃ   s   &€r   ÚfailureDeferredSecurityÚEPBFailureTests.test_deferredSecurity.<locals>.failureDeferredSecurity;  s>   ø€ Ø�I‰I”mÔ$Ø×$Ñ$ T§Y¡Y´Ô4Ø×!Ñ! $§*¡*¨d¯i©iÔ8Ùr   ÚdeferredSecurityrì   rÆ   )r)   rí   s   f r   Útest_deferredSecurityÚ$PBFailureTests.test_deferredSecurity4  s   ø€ õ	ð �~‰~Ð0°%Ð9PÓQÐQr   c                ó@   a € V 3R lpS P                  RRV\        4      # )zx
Test that attempting to call a method which is not defined correctly
results in an AttributeError on the calling side.
c                 ó~   <€ V P                  \        P                  4       SP                  V P                  R 4       R# )rw   é¤  )rx   r   ÚNoSuchMethodry   rz   rÃ   s   &€r   ÚfailureNoSuchÚ>PBFailureTests.test_noSuchMethodFailure.<locals>.failureNoSuchI  s)   ø€ Ø�I‰I”b—o‘oÔ&Ø�L‰L˜Ÿ™Ð)BÔCÙr   Únosuchrô   )rº   ÚAttributeError)r)   rö   s   f r   Útest_noSuchMethodFailureÚ'PBFailureTests.test_noSuchMethodFailureC  s   ø€ õ	ð
 �~‰~˜h¨¨}¼nÓMÐMr   c                óÆ   a € S P                   P                  4       pR pVP                  V4       V 3R lpVP                  V4       S P                  P                  4        R# )zÄ
Test that a copied failure received from a PB call can be logged
locally.

Note: this test needs some serious help: all it really tests is that
log.err(copiedFailure) doesn't raise an exception.
c                 ó$   € V P                  R 4      # )r–   )r‡   )ÚrootObjs   &r   Ú	connectedÚ;PBFailureTests.test_copiedFailureLogging.<locals>.connectedZ  s   € Ø×%Ñ%Ð&<Ó=Ð=r   c                 ó”   <€ \         P                  ! V 4       SP                  \        4      pSP	                  \        V4      ^4       R# )é   N)r   r€   r{   r   r|   r}   )Úfailurer�   r)   s   & €r   Ú	exceptionÚ;PBFailureTests.test_copiedFailureLogging.<locals>.exception_  s4   ø€ Ü�GŠG�GÔØ×)Ñ)Ô*>Ó?ˆDØ×ÑœS ›Y¨Ö*r   N)rk   rŽ   rG   rˆ   rp   rƒ   )r)   rJ   rÿ   r  s   f   r   Útest_copiedFailureLoggingÚ(PBFailureTests.test_copiedFailureLoggingP  sM   ø€ ð ×Ñ×,Ñ,Ó.ˆò	>ð 	
�‰�iÔ õ	+ð
 	
�‰�YÔØ�	‰	�‰Ör   c                ó\  a a€ \         P                  ! \        R4      4      p\        P                  ! \        P                  ! V\        4       R7      4      p. oVV 3R lpV! 4       pVP                  R4       S P                  \        VP                  V4       S P                  \        S4      ^4       S^ ,          pS P                  VP                  \        \        4      P                  R4      4       S P                  VP                  R4       S P                  VP                   R4       R# )z‘
L{pb.CopiedFailure.throwExceptionIntoGenerator} will throw a
L{RemoteError} into the given paused generator at the point where it
last yielded.
Úfoo©Úinvokerc               3   ó¤   <"  €  R x € SP                  R4       R #   \        P                   d   p SP                  T 4        R p ? R # R p ? ii ; i5i)NzRemoteError not raised)r'   r   ÚRemoteErrorÚappend)r°   r  r)   s    €€r   ÚgeneratorFuncÚFPBFailureTests.test_throwExceptionIntoGenerator.<locals>.generatorFuncq  sE   øé € ð4Ø’
ð —	‘	Ð2Ö3øô —>‘>ô &Ø× Ñ  ×%Ò%ûð&üs*   ƒA… ‰AœA±AÁAÁAÁANÚasciirw   )r	  )r   ÚCopyableFailurerù   r   ÚunjellyÚDummyInvokerÚsendÚassertRaisesÚStopIterationÚthrowExceptionIntoGeneratorr|   r}   Ú
remoteTyper   ÚencodeÚargsÚremoteTraceback)r)   ÚoriginalÚcopyr  Úgenr°   r  s   f     @r   Ú test_throwExceptionIntoGeneratorÚ/PBFailureTests.test_throwExceptionIntoGeneratorg  s×   ù€ ô ×%Ò%¤n°UÓ&;Ó<ˆÜ�}Š}œUŸ[š[¨¼<»>ÔJÓKˆØˆ	ö	4ñ ‹oˆØ�‰�ŒØ×Ñœ-¨×)IÑ)IÈ3ÔOØ×Ñœ˜Y›¨Ô+Ø˜�lˆØ×Ñ˜Ÿ™¬¬nÓ)=×)DÑ)DÀWÓ)MÔNØ×Ñ˜Ÿ™ 8Ô,Ø×Ñ˜×,Ñ,Ð.GÖHr   r   r=   )r   r   r   r   r
   ÚTestCaser|   ry   r�   r“   r—   r›   rŸ   r¤   rª   rº   rÇ   rÏ   r×   rß   rè   rð   rú   r  r   r   rV   rW   s   @r   rt   rt   š   s|   ø‡ € Ø×Ñ×+Ñ+€Gòò&YòWòRòPòòôò09òJòKòDòAòRòNò÷.Ið Ir   rt   c                   óF   € ] tR tRt]P
                  P                  t^tRt	R# )ÚPBFailureUnsafeTestsiƒ  r   N)
r   r   r   r   r
   r"  ÚfailIfEqualsry   rl   r   r   r   r   r$  r$  ƒ  s   † Ø×Ñ×,Ñ,€GØÔr   r$  c                   ó   € ] tR tRtRtRtRtR# )r  iˆ  zN
A behaviorless object to be used as the invoker parameter to
L{jelly.jelly}.
Nr   )r   r   r   r   r   ÚserializingPerspectiver   r   r   r   r  r  ˆ  s   † ñð
 "Ôr   r  c                   ó6   a € ] tR tRt o RtR tR tR tRtV t	R# )ÚFailureJellyingTestsi‘  z2
Tests for the interaction of jelly and failures.
c                óò  € \         P                  ! \        4       4      pV P                  VP	                  \        4      \        4       V P                  VP	                  \
        4      \
        4       \        P                  ! \        P                  ! V\        4       R7      4      pV P                  VP	                  \        4      \        4       V P                  VP	                  \
        4      \
        4       R# )z‚
An unjellied L{CopyableFailure} has a check method which behaves the
same way as the original L{CopyableFailure}'s check method.
r
  N©	r   r  ÚZeroDivisionErrorÚassertIsÚcheckÚArithmeticErrorr   r  r  )r)   r  Úcopieds   &  r   Útest_unjelliedFailureCheckÚ/FailureJellyingTests.test_unjelliedFailureCheck–  s“   € ô
 ×%Ò%Ô&7Ó&9Ó:ˆØ�‰�h—n‘nÔ%6Ó7Ô9JÔKØ�‰�h—n‘n¤_Ó5´ÔGÜ—’œuŸ{š{¨8¼\»^ÔLÓMˆØ�‰�f—l‘lÔ#4Ó5Ô7HÔIØ�‰�f—l‘l¤?Ó3´_ÖEr   c                ó†  € \         P                  ! \        4       4      pV P                  VP	                  \        4      \        4       V P                  VP	                  \
        4      \
        4       \        P                  ! \        P                  ! V\        4       R7      4      p\         P                  ! V4      p\        P                  ! \        P                  ! V\        4       R7      4      pV P                  VP	                  \        4      \        4       V P                  VP	                  \
        4      \
        4       R# )a(  
The object which results from jellying a L{CopyableFailure}, unjellying
the result, creating a new L{CopyableFailure} from the result of that,
jellying it, and finally unjellying the result of that has a check
method which behaves the same way as the original L{CopyableFailure}'s
check method.
r
  Nr+  )r)   r  Ú
copiedOnceÚ
derivativeÚcopiedTwices   &    r   Útest_twiceUnjelliedFailureCheckÚ4FailureJellyingTests.test_twiceUnjelliedFailureCheck¢  sÂ   € ô ×%Ò%Ô&7Ó&9Ó:ˆØ�‰�h—n‘nÔ%6Ó7Ô9JÔKØ�‰�h—n‘n¤_Ó5´ÔGÜ—]’]¤5§;¢;¨xÄÃÔ#PÓQˆ
Ü×'Ò'¨
Ó3ˆ
Ü—m’m¤E§K¢K°
ÄLÃNÔ$SÓTˆØ�‰�k×'Ñ'Ô(9Ó:Ô<MÔNØ�‰�k×'Ñ'¬Ó8¼/ÖJr   c                ó`  € \         P                  ! \        R4      4      p\        P                  ! \        P                  ! V\        4       R7      4      p\        4       pVP                  V4       \        \        4      pRP                  V4      pV P                  WSP                  4       4       R# )zì
When L{CopiedFailure.printTraceback} is used to print a copied failure
which was unjellied from a L{CopyableFailure} with C{unsafeTracebacks}
set to C{False}, the string representation of the exception value is
included in the output.
zsome reasonr
  z.Traceback from remote host -- {}: some reason
N)r   r  Ú	Exceptionr   r  r  r   ÚprintTracebackr   Úformatr|   Úgetvalue)r)   r  r0  Úoutputr  ÚexpectedOutputs   &     r   Ú test_printTracebackIncludesValueÚ5FailureJellyingTests.test_printTracebackIncludesValue³  s|   € ô ×%Ò%¤i°Ó&>Ó?ˆÜ—’œuŸ{š{¨8¼\»^ÔLÓMˆÜ“ˆØ×Ñ˜fÔ%Üœ“Oˆ	ØM×TÑTØó
ˆð 	×Ñ˜¯©Ó):Ö;r   r   N)
r   r   r   r   r   r1  r7  r@  r   rV   rW   s   @r   r)  r)  ‘  s    ø‡ € ñò
FòK÷"<ð <r   r)  N)(r   Úior   Útwisted.internetr   Útwisted.pythonr   Útwisted.python.reflectr   Útwisted.spreadr   r   r   Útwisted.test.iosimr	   Útwisted.trialr
   r:  r   r   r9   r   r   Ú	JellyableÚ
RemoteCopyr   r#   ÚsetUnjellyableForClassÚglobalSecurityÚallowInstancesOfÚRootr%   ÚPBServerFactoryrZ   r"  rb   rt   r$  r  r)  r   r   r   Ú<module>rP     s4  ðñõ å "Ý Ý 'ß -Ñ -Ý 7Ý "ô
˜Iô ô˜9ô ô˜Ÿ™ô ô�r—x‘xô ô	�×"Ñ" B§H¡H¨b¯m©mô 	ô	�B—H‘H˜bŸm™mô 	ð × Ò ˜* jÔ 1Ø × Ò ˜-¨Ô 7Ø × Ñ × "Ñ " =Ô 1ô9+�—‘ô 9+ôx) × 2Ñ 2ô )ô
�X×&Ñ&ô 
ô"fI�^ô fIôR˜>ô ÷
"ñ "ô1<˜8×,Ñ,ö 1<r   