+
    üÐjñ7  ã                   ót  € R t ^ RIHt ^ RIHtHtHt ^ RIHt ^ RI	H
t
HtHt ^ RIHt ^ RIHtHt ^ RIHt  ! R R	]P(                  4      t ! R
 R]4      t ! R R4      t ! R R]]P0                  4      t ! R R]]P0                  4      t ! R R]]P0                  4      t ! R R]P0                  4      tR# )z.
Test case for L{twisted.protocols.loopback}.
)Úimplementer)ÚdeferÚ
interfacesÚreactor)ÚDeferred)ÚIAddressÚIPullProducerÚIPushProducer)ÚProtocol)ÚbasicÚloopback)Úunittestc                   ó8   a € ] tR t^t o R tR tR tR tRtV t	R# )ÚSimpleProtocolc                óV   € \         P                  ! 4       V n        . V n        . V n        R # ©N)r   r   ÚconnÚlinesÚconnLost©Úselfs   &Ú</usr/lib/python3/dist-packages/twisted/test/test_loopback.pyÚ__init__ÚSimpleProtocol.__init__   s   € Ü—N’NÓ$ˆŒ	ØˆŒ
ØˆŽó    c                ó<   € V P                   P                  R 4       R # r   )r   Úcallbackr   s   &r   ÚconnectionMadeÚSimpleProtocol.connectionMade   s   € Ø�	‰	×Ñ˜4Ö r   c                ó<   € V P                   P                  V4       R # r   )r   Úappend©r   Úlines   &&r   ÚlineReceivedÚSimpleProtocol.lineReceived   s   € Ø�
‰
×Ñ˜$Ör   c                ó<   € V P                   P                  V4       R # r   )r   r    )r   Úreasons   &&r   ÚconnectionLostÚSimpleProtocol.connectionLost   s   € Ø�‰×Ñ˜VÖ$r   )r   r   r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r#   r'   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s   ø‡ € òò
!ò ÷%ð %r   r   c                   ó*   a € ] tR t^#t o ^ tR tRtV tR# )ÚDoomProtocolc                ó2  € V ;P                   ^,          un         V P                   ^8  d$   V P                  RV P                   3,          4       \        P                  W4       V P                  R,          R8X  d   V P
                  P                  4        R# R# )é   s   Hello %dó   Hello 3Néÿÿÿÿ)ÚiÚsendLiner   r#   r   Ú	transportÚloseConnectionr!   s   &&r   r#   ÚDoomProtocol.lineReceived&   sf   € Ø�Š�!��Ø�6‰6�AŒ:ð �M‰M˜+¨¯©¨	Õ1Ô2Ü×#Ñ# DÔ/Ø�:‰:�b�>˜ZÔ'Ø�N‰N×)Ñ)Ö+ñ (r   © N)r)   r*   r+   r,   r7   r#   r-   r.   r/   s   @r   r2   r2   #   s   ø‡ € Ø	€A÷,ð ,r   r2   c                   ó,   a € ] tR t^1t o R tR tRtV tR# )ÚLoopbackTestCaseMixinc                óì   a aa€ \        4       o\        4       oV3R  lpSP                  P                  V4       VVV 3R lp\        P                  ! S P
                  SS4      pVP                  V4       V# )c                 ó^   <€ SP                  R 4       SP                  P                  4        R# ©s   THIS IS LINE ONE!N)r8   r9   r:   ©ÚresultÚss   &€r   Ú	sendALineÚ<LoopbackTestCaseMixin.testRegularFunction.<locals>.sendALine6   s    ø€ Ø�J‰JÐ+Ô,Ø�K‰K×&Ñ&Ö(r   c                 óÖ   <€ SP                  SP                  R .4       SP                  \        SP                  4      ^4       SP                  \        SP                  4      ^4       R# rA   ©ÚassertEqualr   Úlenr   ©ÚignoredÚcrD   r   s   &€€€r   ÚcheckÚ8LoopbackTestCaseMixin.testRegularFunction.<locals>.check<   sK   ø€ Ø×Ñ˜QŸW™WÐ';Ð&<Ô=Ø×ÑœS §¡›_¨aÔ0Ø×ÑœS §¡›_¨aÖ0r   )r   r   ÚaddCallbackr   ÚmaybeDeferredÚloopbackFunc©r   rE   rN   ÚdrM   rD   s   f   @@r   ÚtestRegularFunctionÚ)LoopbackTestCaseMixin.testRegularFunction2   s^   ú€ ÜÓˆÜÓˆõ	)ð 	
�‰×Ñ˜9Ô%÷	1ô
 ×Ò × 1Ñ 1°1°aÓ8ˆØ	�‰�eÔØˆr   c                óì   a aa€ \        4       o\        4       oV3R  lpSP                  P                  V4       VVV 3R lp\        P                  ! S P
                  SS4      pVP                  V4       V# )c                 ó*   <€ SP                  R 4       R# )ó	   DOOM LINEN)r8   rB   s   &€r   rE   Ú=LoopbackTestCaseMixin.testSneakyHiddenDoom.<locals>.sendALineI   s   ø€ Ø�J‰J�|Ö$r   c                 ó  <€ SP                  SP                  . RO4       SP                  SP                  . RO4       SP                  \        SP                  4      ^4       SP                  \        SP                  4      ^4       R# )ó   Hello 1N)r\   ó   Hello 2r5   )rY   r\   r]   r5   rH   rK   s   &€€€r   rN   Ú9LoopbackTestCaseMixin.testSneakyHiddenDoom.<locals>.checkN   sb   ø€ Ø×Ñ˜QŸW™WÒ&JÔKØ×ÑØ—‘ÒKôð ×ÑœS §¡›_¨aÔ0Ø×ÑœS §¡›_¨aÖ0r   )r2   r   rP   r   rQ   rR   rS   s   f   @@r   ÚtestSneakyHiddenDoomÚ*LoopbackTestCaseMixin.testSneakyHiddenDoomE   s\   ú€ Ü‹NˆÜ‹Nˆõ	%ð 	
�‰×Ñ˜9Ô%÷	1ô ×Ò × 1Ñ 1°1°aÓ8ˆØ	�‰�eÔØˆr   r<   N)r)   r*   r+   r,   rU   r_   r-   r.   r/   s   @r   r>   r>   1   s   ø‡ € ò÷&ð r   r>   c                   ó¸   a € ] tR t^[t o ]! ]P                  4      tR tR t	R t
R tRR l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V tR# )ÚLoopbackAsyncTestsc                óØ   €  ! R R\         4      pV! 4       pV! 4       p\        P                  ! W#4       V P                  VP                  4       V P                  VP                  4       R# )ze
Test that the client and server protocol both have makeConnection
invoked on them by loopbackAsync.
c                   ó*   a € ] tR t^dt o RtR tRtV tR# )Ú<LoopbackAsyncTests.test_makeConnection.<locals>.TestProtocolNc                ó   € Wn         R # r   ©r9   ©r   r9   s   &&r   ÚmakeConnectionÚKLoopbackAsyncTests.test_makeConnection.<locals>.TestProtocol.makeConnectiong   ó   € Ø!*–r   rg   )r)   r*   r+   r,   r9   ri   r-   r.   r/   s   @r   ÚTestProtocolre   d   s   ø‡ € ØˆI÷+ð +r   rl   N)r
   r   ÚloopbackAsyncÚassertIsNotNoner9   )r   rl   ÚserverÚclients   &   r   Útest_makeConnectionÚ&LoopbackAsyncTests.test_makeConnection^   sT   € ô	+œ8ô 	+ñ “ˆÙ“ˆÜ×Ò˜vÔ.Ø×Ñ˜V×-Ñ-Ô.Ø×Ñ˜V×-Ñ-Ö.r   c                ó  a a€  ! R R\         4      pV'       d#   V! 4       p\        4       ;qTn        \        4       pM!\        4       pV! 4       p\        4       ;qVn        \        P                  ! WF4       VV 3R lpVP                  V4      # )z:
Test one of the permutations of client/server host/peer.
c                   ó&   a € ] tR t^ut o R tRtV tR# )Ú6LoopbackAsyncTests._hostpeertest.<locals>.TestProtocolc                óh   € \         P                  ! W4       V P                  P                  V4       R # r   )r
   ri   ÚonConnectionr   rh   s   &&r   ri   ÚELoopbackAsyncTests._hostpeertest.<locals>.TestProtocol.makeConnectionv   s$   € Ü×'Ò'¨Ô8Ø×!Ñ!×*Ñ*¨9Ö5r   r<   N)r)   r*   r+   r,   ri   r-   r.   r/   s   @r   rl   ru   u   s   ø‡ € ÷6ð 6r   rl   c                 ót   <€ \        V S4      ! 4       pSP                  \        P                  ! V4      4       R # r   )ÚgetattrÚ
assertTruer   Ú
providedBy)r9   ÚhostÚgetr   s   & €€r   Ú	connectedÚ3LoopbackAsyncTests._hostpeertest.<locals>.connected…   s)   ø€ Ü˜9 cÔ*Ó,ˆDØ�O‰OœH×/Ò/°Ó5Ö6r   )r
   r   rw   r   rm   rP   )r   r~   Ú
testServerrl   ro   rT   rp   r   s   ff&     r   Ú_hostpeertestÚ LoopbackAsyncTests._hostpeertestp   sn   ù€ ô
	6œ8ô 	6÷
 Ù!“^ˆFÜ&.£jÐ0ˆAÔ#Ü“Z‰Fä“ZˆFÙ!“^ˆFÜ&.£jÐ0ˆAÔ#ä×Ò˜vÔ.ö	7ð �}‰}˜YÓ'Ð'r   c                ó&   € V P                  RR4      # )zl
Test that the server gets a transport with a properly functioning
implementation of L{ITransport.getHost}.
ÚgetHostT©r‚   r   s   &r   Útest_serverHostÚ"LoopbackAsyncTests.test_serverHost‹   s   € ð
 ×!Ñ! )¨TÓ2Ð2r   c                ó&   € V P                  RR4      # )z7
Like C{test_serverHost} but for L{ITransport.getPeer}
ÚgetPeerTr†   r   s   &r   Útest_serverPeerÚ"LoopbackAsyncTests.test_serverPeer’   s   € ð ×!Ñ! )¨TÓ2Ð2r   c                ó&   € V P                  RR4      # )zl
Test that the client gets a transport with a properly functioning
implementation of L{ITransport.getHost}.
r…   Fr†   )r   r~   s   &&r   Útest_clientHostÚ"LoopbackAsyncTests.test_clientHost˜   s   € ð
 ×!Ñ! )¨UÓ3Ð3r   c                ó&   € V P                  RR4      # )z8
Like C{test_clientHost} but for L{ITransport.getPeer}.
rŠ   Fr†   r   s   &r   Útest_clientPeerÚ"LoopbackAsyncTests.test_clientPeerŸ   s   € ð ×!Ñ! )¨UÓ3Ð3r   c                ó   a€  ! R R\         4      p ! V3R lR\         4      pV'       d    V! 4       pV! 4       p\        4       ;qvn        MV! 4       p\        4       ;qun        V! 4       p\        P                  ! WV4       V# )z™
Test one of the permutations of write/writeSequence client/server.

@param write: The name of the method to test, C{"write"} or
    C{"writeSequence"}.
c                   ó*   a € ] tR t^­t o RtR tRtV tR# )Ú9LoopbackAsyncTests._greetingtest.<locals>.GreeteeProtocolr   c                ó”   € V ;P                   V,          un         V P                   R 8X  d   V P                  P                  R4       R# R# ©ó   bytesN)ÚbytesÚreceivedr   ©r   r™   s   &&r   ÚdataReceivedÚFLoopbackAsyncTests._greetingtest.<locals>.GreeteeProtocol.dataReceived°   s3   € Ø—
’
˜eÕ#•
Ø—:‘: Ô)Ø—M‘M×*Ñ*¨4Ö0ñ *r   r<   N©r)   r*   r+   r,   r™   rœ   r-   r.   r/   s   @r   ÚGreeteeProtocolr•   ­   s   ø‡ € ØˆE÷1ð 1r   rŸ   c                   ó.   <a € ] tR t^µt o V3R ltRtV tR# )Ú9LoopbackAsyncTests._greetingtest.<locals>.GreeterProtocolc                óŠ   <€ SR 8X  d   V P                   P                  R4       R# V P                   P                  RR.4       R# )Úwriter˜   s   byts   esN)r9   r£   ÚwriteSequence©r   r£   s   &€r   r   ÚHLoopbackAsyncTests._greetingtest.<locals>.GreeterProtocol.connectionMade¶   s3   ø€ Ø˜GÔ#Ø—N‘N×(Ñ(¨Ö2à—N‘N×0Ñ0°&¸%°ÖAr   r<   N©r)   r*   r+   r,   r   r-   r.   )r0   r£   s   @€r   ÚGreeterProtocolr¡   µ   s   ù‡ € ÷Bó Br   r¨   )r
   r   rš   r   rm   )r   r£   r�   rŸ   r¨   ro   rp   rT   s   &f&     r   Ú_greetingtestÚ LoopbackAsyncTests._greetingtest¥   sm   ø€ ô	1œhô 	1÷	Bœhô 	B÷ Ù$Ó&ˆFÙ$Ó&ˆFÜ"*£*Ð,ˆA•á$Ó&ˆFÜ"*£*Ð,ˆA”Ù$Ó&ˆFä×Ò˜vÔ.Øˆr   c                ó&   € V P                  RR4      # )zl
Test that on a connection where the client speaks first, the server
receives the bytes sent by the client.
r£   F©r©   r   s   &r   Útest_clientGreetingÚ&LoopbackAsyncTests.test_clientGreetingÈ   s   € ð
 ×!Ñ! '¨5Ó1Ð1r   c                ó&   € V P                  RR4      # )zb
Like C{test_clientGreeting}, but use C{writeSequence} instead of
C{write} to issue the greeting.
r¤   Fr¬   r   s   &r   Útest_clientGreetingSequenceÚ.LoopbackAsyncTests.test_clientGreetingSequenceÏ   s   € ð
 ×!Ñ! /°5Ó9Ð9r   c                ó&   € V P                  RR4      # )zl
Test that on a connection where the server speaks first, the client
receives the bytes sent by the server.
r£   Tr¬   r¥   s   &&r   Útest_serverGreetingÚ&LoopbackAsyncTests.test_serverGreetingÖ   s   € ð
 ×!Ñ! '¨4Ó0Ð0r   c                ó&   € V P                  RR4      # )zb
Like C{test_serverGreeting}, but use C{writeSequence} instead of
C{write} to issue the greeting.
r¤   Tr¬   r   s   &r   Útest_serverGreetingSequenceÚ.LoopbackAsyncTests.test_serverGreetingSequenceÝ   s   € ð
 ×!Ñ! /°4Ó8Ð8r   c                ó*  aaaa€ \        ^ ^
4       Uu. uF  pRV3,          NK  	  upo ! VV3R lR\        4      p ! VVV3R lR\        4      pV! 4       oV! 4       o\        4       Sn        \        P
                  ! SS4       SP                  # u upi )é    s   %dc                   ó0   <a € ] tR t^çt o VV3R ltRtV tR# )Ú;LoopbackAsyncTests._producertest.<locals>.ProducingProtocolc                ó~   <€ S! \        S4      4      V n        V P                  P                  V P                  4       R # r   )ÚlistÚproducerÚstartr9   )r   ÚproducerClassÚ	toProduces   &€€r   r   ÚJLoopbackAsyncTests._producertest.<locals>.ProducingProtocol.connectionMadeè   s)   ø€ Ù -¬d°9«oÓ >�”Ø—‘×#Ñ# D§N¡NÖ3r   )r¾   Nr§   )r0   rÀ   rÁ   s   @€€r   ÚProducingProtocolr»   ç   s   ù‡ € ÷4ô 4r   rÃ   c                   ó6   <a € ] tR t^ìt o RtVVV3R ltRtV tR# )Ú;LoopbackAsyncTests._producertest.<locals>.ReceivingProtocolr   c                ó¸   <€ V ;P                   V,          un         V P                   R P                  S4      8X  d    V P                  P                  SS34       R# R# )r   N)r™   Újoinrš   r   )r   Údatarp   ro   rÁ   s   &&€€€r   rœ   ÚHLoopbackAsyncTests._producertest.<locals>.ReceivingProtocol.dataReceivedï   sB   ø€ Ø—
’
˜dÕ"•
Ø—:‘: §¡¨)Ó!4Ô4Ø—M‘M×*Ñ*¨F°FÐ+;Ö<ñ 5r   r<   Nrž   )r0   rp   ro   rÁ   s   @€€€r   ÚReceivingProtocolrÅ   ì   s   ù‡ € ØˆE÷=õ =r   rÊ   )Úranger
   r   rš   r   rm   )r   rÀ   r7   rÃ   rÊ   rp   ro   rÁ   s   &f   @@@r   Ú_producertestÚ LoopbackAsyncTests._producertestä   s�   û€ Ü+0°°B¬<Ó8©< a�U˜a˜T—\�\©<Ñ8ˆ	÷	4ð 	4¤ô 	4÷
	=ñ 	=¤ô 	=ñ #Ó$ˆÙ"Ó$ˆÜ"›*ˆŒä×Ò˜v vÔ.Ø�‰Ðùò) 9s   “Bc                ó�   a € \        \        4       ! R R4      4       pS P                  V4      pV 3R lpVP                  V4       V# )z?
Test a push producer registered against a loopback transport.
c                   ó<   a € ] tR tRt o RtR tR tR tR tRt	V t
R# )	Ú:LoopbackAsyncTests.test_pushProducer.<locals>.PushProduceré   Fc                ó   € Wn         R # r   ©rÁ   ©r   rÁ   s   &&r   r   ÚCLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.__init__  rk   r   c                ó   € R V n         R# ©TN)Úresumedr   s   &r   ÚresumeProducingÚJLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.resumeProducing  s	   € Ø#�–r   c                óV   € Wn         VP                  V R 4       V P                  4        R# r×   )ÚconsumerÚregisterProducerÚ_produceAndSchedule©r   rÜ   s   &&r   r¿   Ú@LoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.start
  s#   € Ø (”Ø×)Ñ)¨$°Ô5Ø×(Ñ(Ö*r   c                ó  € V P                   '       dX   V P                  P                  V P                   P                  ^ 4      4       \        P
                  ! ^ V P                  4       R# V P                  P                  4        R# ©r¹   N)rÁ   rÜ   r£   Úpopr   Ú	callLaterrÞ   ÚunregisterProducerr   s   &r   rÞ   ÚNLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer._produceAndSchedule  sR   € Ø—>—>�>Ø—M‘M×'Ñ'¨¯©×(:Ñ(:¸1Ó(=Ô>Ü×%Ò% a¨×)AÑ)AÖBà—M‘M×4Ñ4Ö6r   )rÜ   rØ   rÁ   N)r)   r*   r+   r,   rØ   r   rÙ   r¿   rÞ   r-   r.   r/   s   @r   ÚPushProducerrÐ      s#   ø‡ € àˆGò+ò$ò+÷
7ð 7r   rç   c                 ó\   <€ V w  rSP                  VP                  P                  R 4       R# )z0Streaming producer should not have been resumed.N)ÚassertFalser¾   rØ   )Úresultsrp   ro   r   s   &  €r   ÚfinishedÚ6LoopbackAsyncTests.test_pushProducer.<locals>.finished  s)   ø€ Ø&ÑˆVØ×ÑØ—‘×'Ñ'ØBör   )r   r	   rÌ   rP   )r   rç   rT   rë   s   f   r   Útest_pushProducerÚ$LoopbackAsyncTests.test_pushProducerû   sK   ø€ ô
 
”]Ó	#÷	7ð 	7ó 
$ð	7ð* ×Ñ˜|Ó,ˆõ	ð 	
�‰�hÔØˆr   c                ó\   € \        \        4       ! R R4      4       pV P                  V4      # )z?
Test a pull producer registered against a loopback transport.
c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )Ú:LoopbackAsyncTests.test_pullProducer.<locals>.PullProduceri'  c                ó   € Wn         R # r   rÓ   rÔ   s   &&r   r   ÚCLoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.__init__)  rk   r   c                óJ   € Wn         V P                   P                  V R 4       R# )FN)rÜ   rÝ   rß   s   &&r   r¿   Ú@LoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.start,  s   € Ø (”Ø—‘×.Ñ.¨t°UÖ;r   c                óÊ   € V P                   P                  V P                  P                  ^ 4      4       V P                  '       g   V P                   P	                  4        R# R# râ   )rÜ   r£   rÁ   rã   rå   r   s   &r   rÙ   ÚJLoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.resumeProducing0  sA   € Ø—‘×#Ñ# D§N¡N×$6Ñ$6°qÓ$9Ô:Ø—~—~�~Ø—M‘M×4Ñ4Ö6ñ &r   )rÜ   rÁ   N)	r)   r*   r+   r,   r   r¿   rÙ   r-   r.   r/   s   @r   ÚPullProducerrñ   '  s   ø‡ € ò+ò<÷7ð 7r   rø   )r   r   rÌ   )r   rø   s   & r   Útest_pullProducerÚ$LoopbackAsyncTests.test_pullProducer"  s3   € ô
 
”]Ó	#÷	7ð 	7ó 
$ð	7ð ×!Ñ! ,Ó/Ð/r   c                óÀ   a a€  ! R R\         4      p ! R R\         4      pV! 4       pV! 4       o\        P                  ! SV4      pVV 3R lpVP                  V4       V# )zš
L{loopback.loopbackAsync} does not call a protocol's C{dataReceived}
method while that protocol's transport's C{write} method is higher up
on the stack.
c                   ó&   a € ] tR tRt o R tRtV tR# )Ú9LoopbackAsyncTests.test_writeNotReentrant.<locals>.Serveri>  c                ó<   € V P                   P                  R 4       R# r—   )r9   r£   r›   s   &&r   rœ   ÚFLoopbackAsyncTests.test_writeNotReentrant.<locals>.Server.dataReceived?  s   € Ø—‘×$Ñ$ XÖ.r   r<   N)r)   r*   r+   r,   rœ   r-   r.   r/   s   @r   ÚServerrý   >  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# )Ú9LoopbackAsyncTests.test_writeNotReentrant.<locals>.ClientiB  Fc                óH   € \         P                  ! ^ V P                  4       R# râ   )r   rä   Úgor   s   &r   r   ÚHLoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.connectionMadeE  s   € Ü×!Ò! ! T§W¡WÖ-r   c                óJ   € V P                   P                  R 4       RV n        R# )ó   fooTN)r9   r£   Úreadyr   s   &r   r  Ú<LoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.goH  s   € Ø—‘×$Ñ$ VÔ,Ø!�–
r   c                ó\   € V P                   V n        V P                  P                  4        R # r   )r  ÚwasReadyr9   r:   r›   s   &&r   rœ   ÚFLoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.dataReceivedL  s   € Ø $§
¡
�”Ø—‘×-Ñ-Ö/r   )r  r  N)
r)   r*   r+   r,   r  r   r  rœ   r-   r.   r/   s   @r   ÚClientr  B  s   ø‡ € ØˆEò.ò"÷0ð 0r   r  c                 ó>   <€ SP                  SP                  4       R # r   )r{   r  )rL   rp   r   s   &€€r   Ú
cbFinishedÚ=LoopbackAsyncTests.test_writeNotReentrant.<locals>.cbFinishedT  s   ø€ Ø�O‰O˜FŸO™OÖ,r   )r
   r   rm   rP   )r   r   r  ro   rT   r  rp   s   f     @r   Útest_writeNotReentrantÚ)LoopbackAsyncTests.test_writeNotReentrant7  sU   ù€ ô	/”Xô 	/ô	0”Xô 	0ñ “ˆÙ“ˆÜ×"Ò" 6¨6Ó2ˆö	-ð 	
�‰�jÔ!Øˆr   c                óÚ  a aaa€ . oV3R lp\        4       o\        4       o\        P                  ! SSV4      pS P                  S. 4       SP                  P                  R4       SP                  P                  R4       SP                  P                  R4       SP                  P                  R4       SP                  P                  4        VVV V3R lpVP                  V4       V# )z¼
The callable passed as the value for the C{pumpPolicy} parameter to
L{loopbackAsync} is called with a L{_LoopbackQueue} of pending bytes
and a protocol to which they should be delivered.
c                 ó‚   <€ . pV '       d"   VP                  V P                  4       4       K)  SP                  W34       R # r   )r    r~   )ÚqueueÚtargetr™   Ú	pumpCallss   && €r   ÚdummyPolicyÚ7LoopbackAsyncTests.test_pumpPolicy.<locals>.dummyPolicyb  s-   ø€ ØˆEßØ—‘˜UŸY™Y›[Ö)Ø×Ñ˜f˜_Ö-r   r  ó   baró   bazó   quuxc                 ó@   <€ SP                  SS. RO3SRR.3.4       R# )r  Nr  r  )r  r  N)rI   )rL   rp   r  r   ro   s   &€€€€r   Ú
cbCompleteÚ6LoopbackAsyncTests.test_pumpPolicy.<locals>.cbCompletet  s.   ø€ Ø×ÑØð Ò1Ð2°V¸fÀfÐ=MÐ4NÐOö	r   )r
   r   rm   rI   r9   r£   r:   rP   )r   r  rë   r  rp   r  ro   s   f   @@@r   Útest_pumpPolicyÚ"LoopbackAsyncTests.test_pumpPolicyZ  sÄ   û€ ð ˆ	õ	.ô “ˆÜ“ˆä×)Ò)¨&°&¸+ÓFˆØ×Ñ˜ BÔ'à×Ñ×Ñ˜vÔ&Ø×Ñ×Ñ˜vÔ&Ø×Ñ×Ñ˜vÔ&Ø×Ñ×Ñ˜wÔ'Ø×Ñ×'Ñ'Ô)÷	ð 	ð 	×Ñ˜ZÔ(Øˆr   c                ó$  € . p\        4       pVP                  Vn        \        P                  ! 4       pVP                  R4       VP                  R4       VP                  R4       \        P                  ! W24       V P                  VRR.4       R# )z‡
L{identityPumpPolicy} is a pump policy which calls the target's
C{dataReceived} method one for each string in the queue passed to it.
r  r  N)r
   r    rœ   r   Ú_LoopbackQueueÚputÚidentityPumpPolicyrI   ©r   r™   rp   r  s   &   r   Útest_identityPumpPolicyÚ*LoopbackAsyncTests.test_identityPumpPolicy  sp   € ð
 ˆÜ“ˆØ#Ÿl™lˆÔÜ×'Ò'Ó)ˆØ�	‰	�&ÔØ�	‰	�&ÔØ�	‰	�$Œä×#Ò# EÔ2à×Ñ˜ ¨Ð 0Ö1r   c                ó"  € . p\        4       pVP                  Vn        \        P                  ! 4       pVP                  R4       VP                  R4       VP                  R4       \        P                  ! W24       V P                  VR.4       R# )z 
L{collapsingPumpPolicy} is a pump policy which calls the target's
C{dataReceived} only once with all of the strings in the queue passed
to it joined together.
r  r  Ns   foobar)r
   r    rœ   r   r#  r$  ÚcollapsingPumpPolicyrI   r&  s   &   r   Útest_collapsingPumpPolicyÚ,LoopbackAsyncTests.test_collapsingPumpPolicy�  sm   € ð ˆÜ“ˆØ#Ÿl™lˆÔÜ×'Ò'Ó)ˆØ�	‰	�&ÔØ�	‰	�&ÔØ�	‰	�$Œä×%Ò% eÔ4à×Ñ˜  Ö,r   r<   N)r…   )r£   )r)   r*   r+   r,   Ústaticmethodr   rm   rR   rq   r‚   r‡   r‹   rŽ   r‘   r©   r­   r°   r³   r¶   rÌ   rí   rù   r  r   r'  r+  r-   r.   r/   s   @r   rb   rb   [   sx   ø‡ € Ù × 6Ñ 6Ó7€Lò/ò$(ò63ò3ô4ò4ò!òF2ò:ô1ò9òò.%òN0ò*!òF#òJ2÷"-ð -r   rb   c                   ó:   € ] tR tRt]! ]P                  4      tRtR# )ÚLoopbackTCPTestsi£  r<   N)	r)   r*   r+   r,   r-  r   ÚloopbackTCPrR   r-   r<   r   r   r/  r/  £  s   † Ù × 4Ñ 4Ó5„Lr   r/  c                   óp   € ] tR tRt]! ]P                  4      t]P                  ! ]
R4      f   RtRtR# RtR# )ÚLoopbackUNIXTestsi§  Nz-Current reactor does not support UNIX socketsr<   )r)   r*   r+   r,   r-  r   ÚloopbackUNIXrR   r   ÚIReactorUNIXr   Úskipr-   r<   r   r   r2  r2  §  s/   † Ù × 5Ñ 5Ó6€Là×Ò˜w¨Ó-Ò5Ø>Œó 6r   r2  c                   óF   a € ] tR tRt o Rt ! R R]4      tR tR tRt	V t
R# )	ÚLoopbackRelayTesti®  z6
Test for L{twisted.protocols.loopback.LoopbackRelay}
c                   ó.   a € ] tR tRt o RtRtR tRtV tR# )ÚLoopbackRelayTest.Receiveri³  z6
Simple Receiver class used for testing LoopbackRelay
r   c                ó8   € V ;P                   V,          un         R# )z)Accumulate received data for verificationN)rÈ   )r   rÈ   s   &&r   rœ   Ú'LoopbackRelayTest.Receiver.dataReceivedº  s   € à�IŠI˜Õ�Ir   r<   N)	r)   r*   r+   r,   Ú__doc__rÈ   rœ   r-   r.   r/   s   @r   ÚReceiverr9  ³  s   ø‡ € ñ	ð ˆ÷	ð 	r   r=  c                ó&  € V P                  4       p\        P                  ! V4      pVP                  R4       VP                  R4       V P	                  VP
                  R4       VP                  4        V P	                  VP
                  R4       R# )z8Test to verify that the write function works as expecteds   abcs   defr   s   abcdefN)r=  r   ÚLoopbackRelayr£   rI   rÈ   ÚclearBuffer©r   ÚreceiverÚrelays   &  r   Ú
test_writeÚLoopbackRelayTest.test_write¾  si   € à—=‘=“?ˆÜ×&Ò& xÓ0ˆØ�‰�FÔØ�‰�FÔØ×Ñ˜Ÿ™¨Ô,Ø×ÑÔØ×Ñ˜Ÿ™¨	Ö2r   c                ó.  € V P                  4       p\        P                  ! V4      pVP                  . RO4       VP                  . RO4       V P	                  VP
                  R4       VP                  4        V P	                  VP
                  R4       R# )z@Test to verify that the writeSequence function works as expectedr   s+   The quick brown fox jumps over the lazy dogN)s   The s   quick s   brown s   fox )s   jumps s   over s   the lazy dog)r=  r   r?  r¤   rI   rÈ   r@  rA  s   &  r   Útest_writeSequenceÚ$LoopbackRelayTest.test_writeSequenceÈ  sp   € à—=‘=“?ˆÜ×&Ò& xÓ0ˆØ×ÑÒDÔEØ×ÑÒBÔCØ×Ñ˜Ÿ™¨Ô,Ø×ÑÔØ×Ñ˜Ÿ™Ð(VÖWr   r<   N)r)   r*   r+   r,   r<  r
   r=  rD  rG  r-   r.   r/   s   @r   r7  r7  ®  s'   ø‡ € ñô	�8ô 	ò3÷Xð Xr   r7  N)r<  Úzope.interfacer   Útwisted.internetr   r   r   Útwisted.internet.deferr   Útwisted.internet.interfacesr   r   r	   Útwisted.internet.protocolr
   Útwisted.protocolsr   r   Útwisted.trialr   ÚLineReceiverr   r2   r>   ÚTestCaserb   r/  r2  r7  r<   r   r   Ú<module>rR     s¦   ðñõ
 'ç 7Ñ 7Ý +ß NÑ NÝ .ß -Ý "ô%�U×'Ñ'ô %ô ,�>ô ,÷'ñ 'ôTE-Ð.°×0AÑ0Aô E-ôP
6Ð,¨h×.?Ñ.?ô 6ô?Ð-¨x×/@Ñ/@ô ?ô"X˜×)Ñ)ö "Xr   