Ë
    ojñ7  ã                   ór  — d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZ  G d	„ d
ej(                  «      Z G d„ de«      Z G d„ d«      Z G d„ deej0                  «      Z G d„ deej0                  «      Z G d„ deej0                  «      Z G d„ dej0                  «      Zy)z.
Test case for L{twisted.protocols.loopback}.
é    )Úimplementer)ÚdeferÚ
interfacesÚreactor)ÚDeferred)ÚIAddressÚIPullProducerÚIPushProducer)ÚProtocol)ÚbasicÚloopback)Úunittestc                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚSimpleProtocolc                 óR   — t        j                  «       | _        g | _        g | _        y ©N)r   r   ÚconnÚlinesÚconnLost©Úselfs    ú</usr/lib/python3/dist-packages/twisted/test/test_loopback.pyÚ__init__zSimpleProtocol.__init__   s   € Ü—N‘NÓ$ˆŒ	ØˆŒ
Øˆ�ó    c                 ó:   — | j                   j                  d «       y r   )r   Úcallbackr   s    r   ÚconnectionMadezSimpleProtocol.connectionMade   s   € Ø�	‰	×Ñ˜4Õ r   c                 ó:   — | j                   j                  |«       y r   )r   Úappend©r   Úlines     r   ÚlineReceivedzSimpleProtocol.lineReceived   s   € Ø�
‰
×Ñ˜$Õr   c                 ó:   — | j                   j                  |«       y r   )r   r   )r   Úreasons     r   ÚconnectionLostzSimpleProtocol.connectionLost   s   € Ø�‰×Ñ˜VÕ$r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r"   r%   © r   r   r   r      s   „ òò
!ò ó%r   r   c                   ó   — e Zd ZdZd„ Zy)ÚDoomProtocolr   c                 ó  — | xj                   dz  c_         | j                   dk  r| j                  d| j                   fz  «       t        j                  | |«       | j                  d   dk(  r| j
                  j                  «        y y )Né   é   s   Hello %déÿÿÿÿó   Hello 3)ÚiÚsendLiner   r"   r   Ú	transportÚloseConnectionr    s     r   r"   zDoomProtocol.lineReceived&   sh   € Ø�Š�!‰�Ø�6‰6�AŠ:ð �M‰M˜+¨¯©¨	Ñ1Ô2Ü×#Ñ# D¨$Ô/Ø�:‰:�b‰>˜ZÒ'Ø�N‰N×)Ñ)Õ+ð (r   N)r&   r'   r(   r1   r"   r)   r   r   r+   r+   #   s   „ Ø	€Aó,r   r+   c                   ó   — e Zd Zd„ Zd„ Zy)ÚLoopbackTestCaseMixinc                 óæ   ‡ ‡‡— t        «       Št        «       Šˆfd„}‰j                  j                  |«       ˆˆˆ fd„}t        j                  ‰ j
                  ‰‰«      }|j                  |«       |S )Nc                 ó\   •— ‰j                  d«       ‰j                  j                  «        y )Nó   THIS IS LINE ONE!)r2   r3   r4   ©ÚresultÚss    €r   Ú	sendALinez<LoopbackTestCaseMixin.testRegularFunction.<locals>.sendALine6   s    ø€ Ø�J‰JÐ+Ô,Ø�K‰K×&Ñ&Õ(r   c                 óÔ   •— ‰j                  ‰j                  dg«       ‰j                  t        ‰j                  «      d«       ‰j                  t        ‰j                  «      d«       y )Nr9   r-   ©ÚassertEqualr   Úlenr   ©ÚignoredÚcr<   r   s    €€€r   Úcheckz8LoopbackTestCaseMixin.testRegularFunction.<locals>.check<   sK   ø€ Ø×Ñ˜QŸW™WÐ';Ð&<Ô=Ø×ÑœS §¡›_¨aÔ0Ø×ÑœS §¡›_¨aÕ0r   )r   r   ÚaddCallbackr   ÚmaybeDeferredÚloopbackFunc©r   r=   rE   ÚdrD   r<   s   `   @@r   ÚtestRegularFunctionz)LoopbackTestCaseMixin.testRegularFunction2   s^   ú€ ÜÓˆÜÓˆô	)ð 	
�‰×Ñ˜9Ô%ö	1ô
 ×Ñ × 1Ñ 1°1°aÓ8ˆØ	�‰�eÔØˆr   c                 óæ   ‡ ‡‡— t        «       Št        «       Šˆfd„}‰j                  j                  |«       ˆˆˆ fd„}t        j                  ‰ j
                  ‰‰«      }|j                  |«       |S )Nc                 ó(   •— ‰j                  d«       y )Nó	   DOOM LINE)r2   r:   s    €r   r=   z=LoopbackTestCaseMixin.testSneakyHiddenDoom.<locals>.sendALineI   s   ø€ Ø�J‰J�|Õ$r   c                 ó  •— ‰j                  ‰j                  g d¢«       ‰j                  ‰j                  g d¢«       ‰j                  t        ‰j                  «      d«       ‰j                  t        ‰j                  «      d«       y )N)ó   Hello 1ó   Hello 2r0   )rN   rP   rQ   r0   r-   r?   rB   s    €€€r   rE   z9LoopbackTestCaseMixin.testSneakyHiddenDoom.<locals>.checkN   sb   ø€ Ø×Ñ˜QŸW™WÒ&JÔKØ×ÑØ—‘ÒKôð ×ÑœS §¡›_¨aÔ0Ø×ÑœS §¡›_¨aÕ0r   )r+   r   rF   r   rG   rH   rI   s   `   @@r   ÚtestSneakyHiddenDoomz*LoopbackTestCaseMixin.testSneakyHiddenDoomE   s\   ú€ Ü‹NˆÜ‹Nˆô	%ð 	
�‰×Ñ˜9Ô%ö	1ô ×Ñ × 1Ñ 1°1°aÓ8ˆØ	�‰�eÔØˆr   N)r&   r'   r(   rK   rR   r)   r   r   r6   r6   1   s   „ òó&r   r6   c                   ó    — e Zd Z eej
                  «      Zd„ Zd„ Zd„ Z	d„ Z
dd„Zd„ Zd„ Zd„ Zd	„ Zdd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚLoopbackAsyncTestsc                 óÖ   —  G d„ dt         «      } |«       } |«       }t        j                  ||«       | j                  |j                  «       | j                  |j                  «       y)z}
        Test that the client and server protocol both have makeConnection
        invoked on them by loopbackAsync.
        c                   ó   — e Zd ZdZd„ Zy)ú<LoopbackAsyncTests.test_makeConnection.<locals>.TestProtocolNc                 ó   — || _         y r   )r3   ©r   r3   s     r   ÚmakeConnectionzKLoopbackAsyncTests.test_makeConnection.<locals>.TestProtocol.makeConnectiong   ó	   € Ø!*�•r   )r&   r'   r(   r3   rZ   r)   r   r   ÚTestProtocolrW   d   s   „ ØˆIó+r   r\   N)r   r   ÚloopbackAsyncÚassertIsNotNoner3   )r   r\   ÚserverÚclients       r   Útest_makeConnectionz&LoopbackAsyncTests.test_makeConnection^   sV   € ô	+œ8ô 	+ñ “ˆÙ“ˆÜ×Ñ˜v vÔ.Ø×Ñ˜V×-Ñ-Ô.Ø×Ñ˜V×-Ñ-Õ.r   c                 ó  ‡ ‡—  G d„ dt         «      }|r# |«       }t        «       x}|_        t        «       }n"t        «       } |«       }t        «       x}|_        t        j                  ||«       ˆˆ fd„}|j                  |«      S )zJ
        Test one of the permutations of client/server host/peer.
        c                   ó   — e Zd Zd„ Zy)ú6LoopbackAsyncTests._hostpeertest.<locals>.TestProtocolc                 óf   — t        j                  | |«       | j                  j                  |«       y r   )r   rZ   ÚonConnectionr   rY   s     r   rZ   zELoopbackAsyncTests._hostpeertest.<locals>.TestProtocol.makeConnectionv   s&   € Ü×'Ñ'¨¨iÔ8Ø×!Ñ!×*Ñ*¨9Õ5r   N)r&   r'   r(   rZ   r)   r   r   r\   rd   u   s   „ ó6r   r\   c                 óp   •—  t        | ‰«      «       }‰j                  t        j                  |«      «       y r   )ÚgetattrÚ
assertTruer   Ú
providedBy)r3   ÚhostÚgetr   s     €€r   Ú	connectedz3LoopbackAsyncTests._hostpeertest.<locals>.connected…   s+   ø€ Ø*”7˜9 cÓ*Ó,ˆDØ�O‰OœH×/Ñ/°Ó5Õ6r   )r   r   rf   r   r]   rF   )r   rl   Ú
testServerr\   r_   rJ   r`   rm   s   ``      r   Ú_hostpeertestz LoopbackAsyncTests._hostpeertestp   st   ù€ ô
	6œ8ô 	6ñ
 Ù!“^ˆFÜ&.£jÐ0ˆA�Ô#Ü“Z‰Fä“ZˆFÙ!“^ˆFÜ&.£jÐ0ˆA�Ô#ä×Ñ˜v vÔ.õ	7ð �}‰}˜YÓ'Ð'r   c                 ó&   — | j                  dd«      S )z„
        Test that the server gets a transport with a properly functioning
        implementation of L{ITransport.getHost}.
        ÚgetHostT©ro   r   s    r   Útest_serverHostz"LoopbackAsyncTests.test_serverHost‹   s   € ð
 ×!Ñ! )¨TÓ2Ð2r   c                 ó&   — | j                  dd«      S )zG
        Like C{test_serverHost} but for L{ITransport.getPeer}
        ÚgetPeerTrr   r   s    r   Útest_serverPeerz"LoopbackAsyncTests.test_serverPeer’   s   € ð ×!Ñ! )¨TÓ2Ð2r   c                 ó&   — | j                  dd«      S )z„
        Test that the client gets a transport with a properly functioning
        implementation of L{ITransport.getHost}.
        rq   Frr   )r   rl   s     r   Útest_clientHostz"LoopbackAsyncTests.test_clientHost˜   s   € ð
 ×!Ñ! )¨UÓ3Ð3r   c                 ó&   — | j                  dd«      S )zH
        Like C{test_clientHost} but for L{ITransport.getPeer}.
        ru   Frr   r   s    r   Útest_clientPeerz"LoopbackAsyncTests.test_clientPeerŸ   s   € ð ×!Ñ! )¨UÓ3Ð3r   c                 óö   ‡—  G d„ dt         «      } G ˆfd„dt         «      }|r  |«       } |«       }t        «       x}|_        n |«       }t        «       x}|_         |«       }t        j                  ||«       |S )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                   ó   — e Zd ZdZd„ Zy)ú9LoopbackAsyncTests._greetingtest.<locals>.GreeteeProtocolr   c                 ó„   — | xj                   |z  c_         | j                   dk(  r| j                  j                  d «       y y ©Nó   bytes)ÚbytesÚreceivedr   ©r   r�   s     r   ÚdataReceivedzFLoopbackAsyncTests._greetingtest.<locals>.GreeteeProtocol.dataReceived°   s3   € Ø—
’
˜eÑ#•
Ø—:‘: Ò)Ø—M‘M×*Ñ*¨4Õ0ð *r   N©r&   r'   r(   r�   r„   r)   r   r   ÚGreeteeProtocolr}   ­   s   „ ØˆEó1r   r†   c                   ó   •— e Zd Zˆ fd„Zy)ú9LoopbackAsyncTests._greetingtest.<locals>.GreeterProtocolc                 ó‚   •— ‰dk(  r| j                   j                  d«       y | j                   j                  ddg«       y )NÚwriter€   s   byts   es)r3   rŠ   ÚwriteSequence©r   rŠ   s    €r   r   zHLoopbackAsyncTests._greetingtest.<locals>.GreeterProtocol.connectionMade¶   s3   ø€ Ø˜GÒ#Ø—N‘N×(Ñ(¨Õ2à—N‘N×0Ñ0°&¸%°ÕAr   N©r&   r'   r(   r   ©rŠ   s   €r   ÚGreeterProtocolrˆ   µ   s	   ø„ õBr   r�   )r   r   r‚   r   r]   )r   rŠ   rn   r†   r�   r_   r`   rJ   s    `      r   Ú_greetingtestz LoopbackAsyncTests._greetingtest¥   ss   ø€ ô	1œhô 	1ö	Bœhô 	Bñ Ù$Ó&ˆFÙ$Ó&ˆFÜ"*£*Ð,ˆA�•á$Ó&ˆFÜ"*£*Ð,ˆA�”Ù$Ó&ˆFä×Ñ˜v vÔ.Øˆr   c                 ó&   — | j                  dd«      S )z„
        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_clientGreetingz&LoopbackAsyncTests.test_clientGreetingÈ   s   € ð
 ×!Ñ! '¨5Ó1Ð1r   c                 ó&   — | j                  dd«      S )zz
        Like C{test_clientGreeting}, but use C{writeSequence} instead of
        C{write} to issue the greeting.
        r‹   Fr’   r   s    r   Útest_clientGreetingSequencez.LoopbackAsyncTests.test_clientGreetingSequenceÏ   s   € ð
 ×!Ñ! /°5Ó9Ð9r   c                 ó&   — | j                  dd«      S )z„
        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_serverGreetingz&LoopbackAsyncTests.test_serverGreetingÖ   s   € ð
 ×!Ñ! '¨4Ó0Ð0r   c                 ó&   — | j                  dd«      S )zz
        Like C{test_serverGreeting}, but use C{writeSequence} instead of
        C{write} to issue the greeting.
        r‹   Tr’   r   s    r   Útest_serverGreetingSequencez.LoopbackAsyncTests.test_serverGreetingSequenceÝ   s   € ð
 ×!Ñ! /°4Ó8Ð8r   c                 ó  ‡‡‡‡— t        dd«      D �cg c]  }d|fz  ‘Œ
 c}Š G ˆˆfd„dt        «      } G ˆˆˆfd„dt        «      } |«       Š |«       Št        «       ‰_        t	        j
                  ‰‰«       ‰j                  S c c}w )Nr   é
   s   %dc                   ó   •— e Zd Zˆ ˆfd„Zy)ú;LoopbackAsyncTests._producertest.<locals>.ProducingProtocolc                 ó|   •—  ‰t        ‰«      «      | _        | j                  j                  | j                  «       y r   )ÚlistÚproducerÚstartr3   )r   ÚproducerClassÚ	toProduces    €€r   r   zJLoopbackAsyncTests._producertest.<locals>.ProducingProtocol.connectionMadeè   s)   ø€ Ù -¬d°9«oÓ >�”Ø—‘×#Ñ# D§N¡NÕ3r   Nr�   )r¢   r£   s   €€r   ÚProducingProtocolr�   ç   s   ø„ ö4r   r¤   c                   ó    •— e Zd ZdZˆ ˆˆfd„Zy)ú;LoopbackAsyncTests._producertest.<locals>.ReceivingProtocolr   c                 ó¨   •— | xj                   |z  c_         | j                   dj                  ‰«      k(  r| j                  j                  ‰‰f«       y y )Nr   )r�   Újoinr‚   r   )r   Údatar`   r_   r£   s     €€€r   r„   zHLoopbackAsyncTests._producertest.<locals>.ReceivingProtocol.dataReceivedï   sB   ø€ Ø—
’
˜dÑ"•
Ø—:‘: §¡¨)Ó!4Ò4Ø—M‘M×*Ñ*¨F°FÐ+;Õ<ð 5r   Nr…   )r`   r_   r£   s   €€€r   ÚReceivingProtocolr¦   ì   s   ø„ ØˆE÷=r   rª   )Úranger   r   r‚   r   r]   )r   r¢   r1   r¤   rª   r`   r_   r£   s    `   @@@r   Ú_producertestz LoopbackAsyncTests._producertestä   sv   û€ Ü+0°°B«<Ö8 a�U˜a˜T“\Ò8ˆ	÷	4¤ô 	4÷
	=ð 	=¤ô 	=ñ #Ó$ˆÙ"Ó$ˆÜ"›*ˆŒä×Ñ˜v vÔ.Ø�‰Ðùò) 9s   “Bc                 óŽ   ‡ — t        t        «       G d„ d«      «       }‰ j                  |«      }ˆ fd„}|j                  |«       |S )zO
        Test a push producer registered against a loopback transport.
        c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ú:LoopbackAsyncTests.test_pushProducer.<locals>.PushProducerFc                 ó   — || _         y r   ©r£   ©r   r£   s     r   r   zCLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.__init__  r[   r   c                 ó   — d| _         y ©NT)Úresumedr   s    r   ÚresumeProducingzJLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.resumeProducing  s	   € Ø#�•r   c                 óV   — || _         |j                  | d«       | j                  «        y r´   )ÚconsumerÚregisterProducerÚ_produceAndSchedule©r   r¸   s     r   r¡   z@LoopbackAsyncTests.test_pushProducer.<locals>.PushProducer.start
  s%   € Ø (�”Ø×)Ñ)¨$°Ô5Ø×(Ñ(Õ*r   c                 óú   — | j                   rU| j                  j                  | j                   j                  d«      «       t	        j
                  d| j                  «       y | j                  j                  «        y ©Nr   )r£   r¸   rŠ   Úpopr   Ú	callLaterrº   ÚunregisterProducerr   s    r   rº   zNLoopbackAsyncTests.test_pushProducer.<locals>.PushProducer._produceAndSchedule  sP   € Ø—>’>Ø—M‘M×'Ñ'¨¯©×(:Ñ(:¸1Ó(=Ô>Ü×%Ñ% a¨×)AÑ)AÕBà—M‘M×4Ñ4Õ6r   N)r&   r'   r(   rµ   r   r¶   r¡   rº   r)   r   r   ÚPushProducerr¯      s   „ àˆGò+ò$ò+ó
7r   rÁ   c                 ó\   •— | \  }}‰j                  |j                  j                  d«       y )Nz0Streaming producer should not have been resumed.)ÚassertFalser    rµ   )Úresultsr`   r_   r   s      €r   Úfinishedz6LoopbackAsyncTests.test_pushProducer.<locals>.finished  s+   ø€ Ø&ÑˆV�VØ×ÑØ—‘×'Ñ'ØBõr   )r   r
   r¬   rF   )r   rÁ   rJ   rÅ   s   `   r   Útest_pushProducerz$LoopbackAsyncTests.test_pushProducerû   sK   ø€ ô
 
”]Ó	#÷	7ð 	7ó 
$ð	7ð* ×Ñ˜|Ó,ˆô	ð 	
�‰�hÔØˆr   c                 ó\   — t        t        «       G d„ d«      «       }| j                  |«      S )zO
        Test a pull producer registered against a loopback transport.
        c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ú:LoopbackAsyncTests.test_pullProducer.<locals>.PullProducerc                 ó   — || _         y r   r±   r²   s     r   r   zCLoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.__init__)  r[   r   c                 óJ   — || _         | j                   j                  | d«       y )NF)r¸   r¹   r»   s     r   r¡   z@LoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.start,  s   € Ø (�”Ø—‘×.Ñ.¨t°UÕ;r   c                 óº   — | j                   j                  | j                  j                  d«      «       | j                  s| j                   j	                  «        y y r½   )r¸   rŠ   r£   r¾   rÀ   r   s    r   r¶   zJLoopbackAsyncTests.test_pullProducer.<locals>.PullProducer.resumeProducing0  s?   € Ø—‘×#Ñ# D§N¡N×$6Ñ$6°qÓ$9Ô:Ø—~’~Ø—M‘M×4Ñ4Õ6ð &r   N)r&   r'   r(   r   r¡   r¶   r)   r   r   ÚPullProducerrÉ   '  s   „ ò+ò<ó7r   rÍ   )r   r	   r¬   )r   rÍ   s     r   Útest_pullProducerz$LoopbackAsyncTests.test_pullProducer"  s3   € ô
 
”]Ó	#÷	7ð 	7ó 
$ð	7ð ×!Ñ! ,Ó/Ð/r   c                 ó¼   ‡ ‡—  G d„ dt         «      } G d„ dt         «      } |«       } |«       Št        j                  ‰|«      }ˆˆ fd„}|j                  |«       |S )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                   ó   — e Zd Zd„ Zy)ú9LoopbackAsyncTests.test_writeNotReentrant.<locals>.Serverc                 ó:   — | j                   j                  d«       y r   )r3   rŠ   rƒ   s     r   r„   zFLoopbackAsyncTests.test_writeNotReentrant.<locals>.Server.dataReceived?  s   € Ø—‘×$Ñ$ XÕ.r   N)r&   r'   r(   r„   r)   r   r   ÚServerrÑ   >  s   „ ó/r   rÓ   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ú9LoopbackAsyncTests.test_writeNotReentrant.<locals>.ClientFc                 óD   — t        j                  d| j                  «       y r½   )r   r¿   Úgor   s    r   r   zHLoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.connectionMadeE  s   € Ü×!Ñ! ! T§W¡WÕ-r   c                 óH   — | j                   j                  d«       d| _        y )Nó   fooT)r3   rŠ   Úreadyr   s    r   r×   z<LoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.goH  s   € Ø—‘×$Ñ$ VÔ,Ø!�•
r   c                 óZ   — | j                   | _        | j                  j                  «        y r   )rÚ   ÚwasReadyr3   r4   rƒ   s     r   r„   zFLoopbackAsyncTests.test_writeNotReentrant.<locals>.Client.dataReceivedL  s   € Ø $§
¡
�”Ø—‘×-Ñ-Õ/r   N)r&   r'   r(   rÚ   r   r×   r„   r)   r   r   ÚClientrÕ   B  s   „ ØˆEò.ò"ó0r   rÝ   c                 ó<   •— ‰j                  ‰j                  «       y r   )ri   rÜ   )rC   r`   r   s    €€r   Ú
cbFinishedz=LoopbackAsyncTests.test_writeNotReentrant.<locals>.cbFinishedT  s   ø€ Ø�O‰O˜FŸO™OÕ,r   )r   r   r]   rF   )r   rÓ   rÝ   r_   rJ   rß   r`   s   `     @r   Útest_writeNotReentrantz)LoopbackAsyncTests.test_writeNotReentrant7  sU   ù€ ô	/”Xô 	/ô	0”Xô 	0ñ “ˆÙ“ˆÜ×"Ñ" 6¨6Ó2ˆõ	-ð 	
�‰�jÔ!Øˆr   c                 óÔ  ‡ ‡‡‡— g Šˆfd„}t        «       Št        «       Št        j                  ‰‰|«      }‰ j                  ‰g «       ‰j                  j                  d«       ‰j                  j                  d«       ‰j                  j                  d«       ‰j                  j                  d«       ‰j                  j                  «        ˆˆˆ ˆfd„}|j                  |«       |S )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                 óx   •— g }| r"|j                  | j                  «       «       | rŒ"‰j                  ||f«       y r   )r   rl   )ÚqueueÚtargetr�   Ú	pumpCallss      €r   ÚdummyPolicyz7LoopbackAsyncTests.test_pumpPolicy.<locals>.dummyPolicyb  s4   ø€ ØˆEÙØ—‘˜UŸY™Y›[Ô)ò à×Ñ˜f e˜_Õ-r   rÙ   ó   baró   bazó   quuxc                 ó>   •— ‰j                  ‰‰g d¢f‰ddgfg«       y )N)rè   ré   NrÙ   rç   )r@   )rC   r`   rå   r   r_   s    €€€€r   Ú
cbCompletez6LoopbackAsyncTests.test_pumpPolicy.<locals>.cbCompletet  s.   ø€ Ø×ÑØð Ò1Ð2°V¸fÀfÐ=MÐ4NÐOõ	r   )r   r   r]   r@   r3   rŠ   r4   rF   )r   ræ   rÅ   rë   r`   rå   r_   s   `   @@@r   Útest_pumpPolicyz"LoopbackAsyncTests.test_pumpPolicyZ  s¿   û€ ð ˆ	ô	.ô “ˆÜ“ˆä×)Ñ)¨&°&¸+ÓFˆØ×Ñ˜ BÔ'à×Ñ×Ñ˜vÔ&Ø×Ñ×Ñ˜vÔ&Ø×Ñ×Ñ˜vÔ&Ø×Ñ×Ñ˜wÔ'Ø×Ñ×'Ñ'Ô)÷	ð 	×Ñ˜ZÔ(Øˆr   c                 ó   — g }t        «       }|j                  |_        t        j                  «       }|j                  d«       |j                  d«       |j                  d«       t        j                  ||«       | j                  |ddg«       y)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ÚidentityPumpPolicyr@   ©r   r�   r`   rã   s       r   Útest_identityPumpPolicyz*LoopbackAsyncTests.test_identityPumpPolicy  sr   € ð
 ˆÜ“ˆØ#Ÿl™lˆÔÜ×'Ñ'Ó)ˆØ�	‰	�&ÔØ�	‰	�&ÔØ�	‰	�$Œä×#Ñ# E¨6Ô2à×Ñ˜ ¨Ð 0Õ1r   c                 ó  — g }t        «       }|j                  |_        t        j                  «       }|j                  d«       |j                  d«       |j                  d«       t        j                  ||«       | j                  |dg«       y)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ï   ÚcollapsingPumpPolicyr@   rñ   s       r   Útest_collapsingPumpPolicyz,LoopbackAsyncTests.test_collapsingPumpPolicy�  so   € ð ˆÜ“ˆØ#Ÿl™lˆÔÜ×'Ñ'Ó)ˆØ�	‰	�&ÔØ�	‰	�&ÔØ�	‰	�$Œä×%Ñ% e¨VÔ4à×Ñ˜  Õ,r   N)rq   rŽ   )r&   r'   r(   Ústaticmethodr   r]   rH   ra   ro   rs   rv   rx   rz   r�   r“   r•   r—   r™   r¬   rÆ   rÎ   rà   rì   rò   rõ   r)   r   r   rT   rT   [   sp   „ Ù × 6Ñ 6Ó7€Lò/ò$(ò63ò3ó4ò4ò!òF2ò:ó1ò9òò.%òN0ò*!òF#òJ2ó"-r   rT   c                   ó0   — e Zd Z eej
                  «      Zy)ÚLoopbackTCPTestsN)r&   r'   r(   rö   r   ÚloopbackTCPrH   r)   r   r   rø   rø   £  s   „ Ù × 4Ñ 4Ó5�Lr   rø   c                   ó\   — e Zd Z eej
                  «      Z ej                  e	d«      €dZ
yy)ÚLoopbackUNIXTestsNz-Current reactor does not support UNIX sockets)r&   r'   r(   rö   r   ÚloopbackUNIXrH   r   ÚIReactorUNIXr   Úskipr)   r   r   rû   rû   §  s1   „ Ù × 5Ñ 5Ó6€Là€z×Ñ˜w¨Ó-Ð5Ø>‰ð 6r   rû   c                   ó2   — e Zd ZdZ G d„ de«      Zd„ Zd„ Zy)ÚLoopbackRelayTestz>
    Test for L{twisted.protocols.loopback.LoopbackRelay}
    c                   ó   — e Zd ZdZdZd„ Zy)úLoopbackRelayTest.ReceiverzF
        Simple Receiver class used for testing LoopbackRelay
        r   c                 ó.   — | xj                   |z  c_         y)z)Accumulate received data for verificationN)r©   )r   r©   s     r   r„   z'LoopbackRelayTest.Receiver.dataReceivedº  s   € à�IŠI˜ÑŽIr   N)r&   r'   r(   Ú__doc__r©   r„   r)   r   r   ÚReceiverr  ³  s   „ ñ	ð ˆó	r   r  c                 ó"  — | j                  «       }t        j                  |«      }|j                  d«       |j                  d«       | j	                  |j
                  d«       |j                  «        | j	                  |j
                  d«       y)z8Test to verify that the write function works as expecteds   abcs   defr   s   abcdefN)r  r   ÚLoopbackRelayrŠ   r@   r©   ÚclearBuffer©r   ÚreceiverÚrelays      r   Ú
test_writezLoopbackRelayTest.test_write¾  si   € à—=‘=“?ˆÜ×&Ñ& xÓ0ˆØ�‰�FÔØ�‰�FÔØ×Ñ˜Ÿ™¨Ô,Ø×ÑÔØ×Ñ˜Ÿ™¨	Õ2r   c                 ó*  — | j                  «       }t        j                  |«      }|j                  g d¢«       |j                  g d¢«       | j	                  |j
                  d«       |j                  «        | j	                  |j
                  d«       y)z@Test to verify that the writeSequence function works as expected)s   The s   quick s   brown s   fox )s   jumps s   over s   the lazy dogr   s+   The quick brown fox jumps over the lazy dogN)r  r   r  r‹   r@   r©   r  r	  s      r   Útest_writeSequencez$LoopbackRelayTest.test_writeSequenceÈ  sp   € à—=‘=“?ˆÜ×&Ñ& xÓ0ˆØ×ÑÒDÔEØ×ÑÒBÔCØ×Ñ˜Ÿ™¨Ô,Ø×ÑÔØ×Ñ˜Ÿ™Ð(VÕWr   N)r&   r'   r(   r  r   r  r  r  r)   r   r   r   r   ®  s   „ ñô	�8ô 	ò3óXr   r   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   r+   r6   ÚTestCaserT   rø   rû   r   r)   r   r   ú<module>r     s¦   ðñõ
 'ç 7Ñ 7Ý +ß NÑ NÝ .ß -Ý "ô%�U×'Ñ'ô %ô ,�>ô ,÷'ñ 'ôTE-Ð.°×0AÑ0Aô E-ôP
6Ð,¨h×.?Ñ.?ô 6ô?Ð-¨x×/@Ñ/@ô ?ô"X˜×)Ñ)õ "Xr   