§
    Ètºfó§  ã                   óð  — d Z ddlZddl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 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ  G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z  G d„ dej!        ¦  «        Z" G d„ dej        ¦  «        Z# G d„ dej!        ¦  «        Z$ G d„ dej!        ¦  «        Z% G d„ d¦  «        Z& G d„ de&ej'        ¦  «        Z( G d „ d!¦  «        Z) G d"„ d#ej!        e)¦  «        Z* G d$„ d%e)¦  «        Z+ G d&„ d'¦  «        Z, G d(„ d)e&ej-        ¦  «        Z. G d*„ d+ej!        e+e,¦  «        Z/ G d,„ d-e&ej0        ¦  «        Z1 G d.„ d/ej!        e+e,¦  «        Z2 G d0„ d1e&ej3        ¦  «        Z4 G d2„ d3ej!        e+e,¦  «        Z5 G d4„ d5¦  «        Z6 G d6„ d7ej        ¦  «        Z7 G d8„ d9ej!        ¦  «        Z8 G d:„ d;ej9        ¦  «        Z:dS )<z,
Test cases for L{twisted.protocols.basic}.
é    N)ÚBytesIO)ÚListÚOptionalÚType)ÚverifyObject)ÚprotocolÚtask)Ú	IProducer)ÚconnectionDone)Úbasic)Ú	iterbytes)ÚFailure)Úproto_helpers)Úunittestc                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )ÚFlippingLineTesterzT
    A line receiver that flips between line and raw data modes after one byte.
    ó   
c                 ó   — g | _         d S ©N)Úlines©Úselfs    ú`/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/protocols/test/test_basic.pyÚ__init__zFlippingLineTester.__init__!   s   € ØˆŒ
ˆ
ˆ
ó    c                 ób   — | j                              |¦  «         |                      ¦   «          dS )z&
        Set the mode to raw.
        N)r   ÚappendÚ
setRawMode©r   Úlines     r   ÚlineReceivedzFlippingLineTester.lineReceived$   s0   € ð 	Œ
×Ò˜$ÑÔÐØ�ŠÑÔÐÐÐr   c                 ó@   — |                       |dd…         ¦  «         dS )z,
        Set the mode back to line.
        é   N)ÚsetLineMode©r   Údatas     r   ÚrawDataReceivedz"FlippingLineTester.rawDataReceived+   s&   € ð 	×Ò˜˜a˜b˜bœÑ"Ô"Ð"Ð"Ð"r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	delimiterr   r!   r'   © r   r   r   r      sR   € € € € € ðð ð €Iðð ð ðð ð ð#ð #ð #ð #ð #r   r   c                   ó:   — e Zd ZdZdZdZd
d„Zd„ Zd„ Zd„ Z	d	„ Z
dS )Ú
LineTestera×  
    A line receiver that parses data received and make actions on some tokens.

    @type delimiter: C{bytes}
    @ivar delimiter: character used between received lines.
    @type MAX_LENGTH: C{int}
    @ivar MAX_LENGTH: size of a line when C{lineLengthExceeded} will be called.
    @type clock: L{twisted.internet.task.Clock}
    @ivar clock: clock simulating reactor callLater. Pass it to constructor if
        you want to use the pause/rawpause functionalities.
    r   é@   Nc                 ó   — || _         dS )z@
        If given, use a clock to make callLater calls.
        N)Úclock)r   r2   s     r   r   zLineTester.__init__B   s   € ð ˆŒ
ˆ
ˆ
r   c                 ó   — g | _         dS ©z;
        Create/clean data received on connection.
        N©Úreceivedr   s    r   ÚconnectionMadezLineTester.connectionMadeH   ó   € ð ˆŒˆˆr   c                 ó  — | j                              |¦  «         |dk    r|                      ¦   «          dS |dk    r6|                      ¦   «          | j                             d| j        ¦  «         dS |dk    rd|                      ¦   «          |                      ¦   «          | j                              d¦  «         | j                             d| j        ¦  «         dS |dk    r|                      ¦   «          dS |dd…         dk    rt          |dd…         ¦  «        | _	        dS | 
                    d	¦  «        r| j                             | d
¦  «         dS | 
                    d¦  «        r| j                             ¦   «          dS dS )z|
        Receive line and make some action for some tokens: pause, rawpause,
        stop, len, produce, unproduce.
        r   ó   pauser   ó   rawpauseó   stopNé   s   len ó   produceFó	   unproduce)r6   r   r   ÚpauseProducingr2   Ú	callLaterÚresumeProducingÚstopProducingÚintÚlengthÚ
startswithÚ	transportÚregisterProducerÚunregisterProducerr   s     r   r!   zLineTester.lineReceivedN   s’  € ð
 	Œ×Ò˜TÑ"Ô"Ð"Ø�3Š;ˆ;Ø�OŠOÑÔÐÐÐØ�XÒÐØ×ÒÑ!Ô!Ð!ØŒJ× Ò   DÔ$8Ñ9Ô9Ð9Ð9Ð9Ø�[Ò Ð Ø×ÒÑ!Ô!Ð!Ø�OŠOÑÔÐØŒM× Ò  Ñ%Ô%Ð%ØŒJ× Ò   DÔ$8Ñ9Ô9Ð9Ð9Ð9Ø�WŠ_ˆ_Ø×ÒÑ Ô Ð Ð Ð Ø�"�1�"ŒX˜Ò Ð Ý˜d 1 2 2œh™-œ-ˆDŒKˆKˆKØ�_Š_˜ZÑ(Ô(ð 	0ØŒN×+Ò+¨D°%Ñ8Ô8Ð8Ð8Ð8Ø�_Š_˜\Ñ*Ô*ð 	0ØŒN×-Ò-Ñ/Ô/Ð/Ð/Ð/ð	0ð 	0r   c                 óî   — |d| j         …         || j         d…         }}| j         t          |¦  «        z
  | _         | j        d         |z   | j        d<   | j         dk    r|                      |¦  «         dS dS )zj
        Read raw data, until the quantity specified by a previous 'len' line is
        reached.
        Néÿÿÿÿr   )rE   Úlenr6   r$   )r   r&   Úrests      r   r'   zLineTester.rawDataReceivedg   s~   € ð
 ˜-˜DœK˜-Ô(¨$¨t¬{¨}¨}Ô*=ˆdˆØ”k¥C¨¡I¤IÑ-ˆŒØ œM¨"Ô-°Ñ4ˆŒ�bÑØŒ;˜!ÒÐØ×Ò˜TÑ"Ô"Ð"Ð"Ð"ð Ðr   c                 óŠ   — t          |¦  «        | j        dz   k    r'|                      || j        dz   d…         ¦  «         dS dS )z<
        Adjust line mode when long lines received.
        r#   N)rL   Ú
MAX_LENGTHr$   r   s     r   ÚlineLengthExceededzLineTester.lineLengthExceededr   sP   € õ ˆt‰9Œ9�t”¨Ñ*Ò*Ð*Ø×Ò˜T $¤/°AÑ"5Ð"7Ð"7Ô8Ñ9Ô9Ð9Ð9Ð9ð +Ð*r   r   )r(   r)   r*   r+   r,   rO   r   r7   r!   r'   rP   r-   r   r   r/   r/   2   sz   € € € € € ð
ð 
ð €IØ€Jðð ð ð ðð ð ð0ð 0ð 0ð2	#ð 	#ð 	#ð:ð :ð :ð :ð :r   r/   c                   ó&   — e Zd ZdZdZdZd„ Zd„ ZdS )ÚLineOnlyTesterz)
    A buffering line only receiver.
    r   r0   c                 ó   — g | _         dS r4   r5   r   s    r   r7   zLineOnlyTester.connectionMade‚   r8   r   c                 ó:   — | j                              |¦  «         dS )z%
        Save received data.
        N©r6   r   r   s     r   r!   zLineOnlyTester.lineReceivedˆ   s    € ð 	Œ×Ò˜TÑ"Ô"Ð"Ð"Ð"r   N)r(   r)   r*   r+   r,   rO   r7   r!   r-   r   r   rR   rR   z   sH   € € € € € ðð ð €IØ€Jðð ð ð#ð #ð #ð #ð #r   rR   c                   ó¤   — e Zd ZdZdZg d¢Zd„ ZdZg d¢Zedgz   Z	d„ Z
d	Zg d
¢Zg d¢Zd„ ZdZg d¢Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚLineReceiverTestsz\
    Test L{twisted.protocols.basic.LineReceiver}, using the C{LineTester}
    wrapper.
    sž   len 10

0123456789len 5

1234
len 20
foo 123

0123456789
012345678len 0
foo 5

1234567890123456789012345678901234567890123456789012345678901234567890
len 1

a)s   len 10ó
   0123456789ó   len 5s   1234
s   len 20s   foo 123s   0123456789
012345678s   len 0s   foo 5r   s   67890s   len 1ó   ac                 óª  — t          dd¦  «        D ]Á}t          j        ¦   «         }t          ¦   «         }|                     t          j        |¦  «        ¦  «         t          t          | j        ¦  «        |z  dz   ¦  «        D ]/}| j        ||z  |dz   |z  …         }| 	                    |¦  «         Œ0|  
                    | j        |j        ¦  «         ŒÂdS )zl
        Test buffering for different packet size, checking received matches
        expected data.
        r#   é
   N)Úranger   ÚStringIOWithoutClosingr/   ÚmakeConnectionr   ÚFileWrapperrL   ÚbufferÚdataReceivedÚassertEqualÚoutputr6   ©r   Úpacket_sizeÚtÚaÚiÚss         r   Útest_bufferzLineReceiverTests.test_buffer·   sÖ   € õ
 !  B™<œ<ð 	6ð 	6ˆKÝÔ4Ñ6Ô6ˆAÝ‘”ˆAØ×Ò�XÔ1°!Ñ4Ô4Ñ5Ô5Ð5Ý�3˜tœ{Ñ+Ô+¨{Ñ:¸QÑ>Ñ?Ô?ð "ð "�Ø”K  K¡°1°q±5¸KÑ2GÐ GÔH�Ø—’˜qÑ!Ô!Ð!Ð!Ø×Ò˜Tœ[¨!¬*Ñ5Ô5Ð5Ð5ð	6ð 	6r   s!   twiddle1
twiddle2
pause
twiddle3
)ó   twiddle1ó   twiddle2r:   ó   twiddle3c                 ó@  — t          dd¦  «        D �]}t          j        ¦   «         }t          j        ¦   «         }t          |¦  «        }|                     t          j        |¦  «        ¦  «         t          t          | j
        ¦  «        |z  dz   ¦  «        D ]/}| j
        ||z  |dz   |z  …         }|                     |¦  «         Œ0|                      | j        |j        ¦  «         |                     d¦  «         |                      | j        |j        ¦  «         �ŒdS )zo
        Test pause inside data receiving. It uses fake clock to see if
        pausing/resuming work.
        r#   r\   r   N)r]   r   r^   r	   ÚClockr/   r_   r   r`   rL   ÚpauseBufrb   rc   ÚpauseOutput1r6   ÚadvanceÚpauseOutput2©r   rf   rg   r2   rh   ri   rj   s          r   Útest_pausingzLineReceiverTests.test_pausingÊ   s  € õ
 !  B™<œ<ð 
	<ñ 
	<ˆKÝÔ4Ñ6Ô6ˆAÝ”J‘L”LˆEÝ˜5Ñ!Ô!ˆAØ×Ò�XÔ1°!Ñ4Ô4Ñ5Ô5Ð5Ý�3˜tœ}Ñ-Ô-°Ñ<¸qÑ@ÑAÔAð "ð "�Ø”M ! k¡/°Q¸±U¸kÑ4IÐ"IÔJ�Ø—’˜qÑ!Ô!Ð!Ð!Ø×Ò˜TÔ.°´
Ñ;Ô;Ð;Ø�MŠM˜!ÑÔÐØ×Ò˜TÔ.°´
Ñ;Ô;Ð;Ñ;ð
	<ð 
	<r   s/   twiddle1
twiddle2
len 5
rawpause
12345twiddle3
)rl   rm   rY   r;   r   )rl   rm   rY   r;   s   12345rn   c                 ó@  — t          dd¦  «        D �]}t          j        ¦   «         }t          j        ¦   «         }t          |¦  «        }|                     t          j        |¦  «        ¦  «         t          t          | j
        ¦  «        |z  dz   ¦  «        D ]/}| j
        ||z  |dz   |z  …         }|                     |¦  «         Œ0|                      | j        |j        ¦  «         |                     d¦  «         |                      | j        |j        ¦  «         �ŒdS )z7
        Test pause inside raw date receiving.
        r#   r\   r   N)r]   r   r^   r	   rp   r/   r_   r   r`   rL   ÚrawpauseBufrb   rc   ÚrawpauseOutput1r6   rs   ÚrawpauseOutput2ru   s          r   Útest_rawPausingz!LineReceiverTests.test_rawPausingç   s  € õ !  B™<œ<ð 
	?ñ 
	?ˆKÝÔ4Ñ6Ô6ˆAÝ”J‘L”LˆEÝ˜5Ñ!Ô!ˆAØ×Ò�XÔ1°!Ñ4Ô4Ñ5Ô5Ð5Ý�3˜tÔ/Ñ0Ô0°KÑ?À!ÑCÑDÔDð "ð "�ØÔ$ Q¨¡_¸¸A¹ÀÑ7LÐ%LÔM�Ø—’˜qÑ!Ô!Ð!Ð!Ø×Ò˜TÔ1°1´:Ñ>Ô>Ð>Ø�MŠM˜!ÑÔÐØ×Ò˜TÔ1°1´:Ñ>Ô>Ð>Ñ>ð
	?ð 
	?r   s"   twiddle1
twiddle2
stop
more
stuff
)rl   rm   r<   c                 óª  — t          dd¦  «        D ]Á}t          j        ¦   «         }t          ¦   «         }|                     t          j        |¦  «        ¦  «         t          t          | j        ¦  «        |z  dz   ¦  «        D ]/}| j        ||z  |dz   |z  …         }| 	                    |¦  «         Œ0|  
                    | j        |j        ¦  «         ŒÂdS )z-
        Test stop inside producing.
        r#   r\   N)r]   r   r^   r/   r_   r   r`   rL   Ústop_bufrb   rc   Ústop_outputr6   re   s         r   Útest_stopProducingz$LineReceiverTests.test_stopProducingû   s×   € õ !  B™<œ<ð 	;ð 	;ˆKÝÔ4Ñ6Ô6ˆAÝ‘”ˆAØ×Ò�XÔ1°!Ñ4Ô4Ñ5Ô5Ð5Ý�3˜tœ}Ñ-Ô-°Ñ<¸qÑ@ÑAÔAð "ð "�Ø”M ! k¡/°Q¸±U¸kÑ4IÐ"IÔJ�Ø—’˜qÑ!Ô!Ð!Ð!Ø×Ò˜TÔ-¨q¬zÑ:Ô:Ð:Ð:ð	;ð 	;r   c                 óú   — t          ¦   «         }t          j        ¦   «         }|                     t	          j        |¦  «        ¦  «         |                     d¦  «         |                      |j        g d¢¦  «         dS )z6
        Test produce/unproduce in receiving.
        s&   produce
hello world
unproduce
goodbye
)r>   s   hello worldr?   ó   goodbyeN)	r/   r   r^   r_   r   r`   rb   rc   r6   )r   rh   rg   s      r   Útest_lineReceiverAsProducerz-LineReceiverTests.test_lineReceiverAsProducer  s}   € õ ‰LŒLˆÝÔ0Ñ2Ô2ˆØ	×Ò�Ô-¨aÑ0Ô0Ñ1Ô1Ð1Ø	�ŠÐDÑEÔEÐEØ×ÒØŒJÐNÐNÐNñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ób  —  G d„ dt           j        ¦  «        } |¦   «         } |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «          |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         d	S )
z 
        L{LineReceiver.clearLineBuffer} removes all buffered data and returns
        it as a C{bytes} and can be called from beneath C{dataReceived}.
        c                   ó   — e Zd Zd„ ZdS )ú@LineReceiverTests.test_clearLineBuffer.<locals>.ClearingReceiverc                 óF   — || _         |                      ¦   «         | _        d S r   )r    ÚclearLineBufferrM   r   s     r   r!   zMLineReceiverTests.test_clearLineBuffer.<locals>.ClearingReceiver.lineReceived  s    € Ø �”	Ø ×0Ò0Ñ2Ô2�”	�	�	r   N)r(   r)   r*   r!   r-   r   r   ÚClearingReceiverr…     s#   € € € € € ð3ð 3ð 3ð 3ð 3r   rˆ   s   foo
bar
bazó   foos   bar
bazs   quux
s   quuxr   N)r   ÚLineReceiverrb   rc   r    rM   )r   rˆ   r   s      r   Útest_clearLineBufferz&LineReceiverTests.test_clearLineBuffer  sÎ   € ð	3ð 	3ð 	3ð 	3ð 	3�uÔ1ñ 	3ô 	3ð 	3ð
 $Ð#Ñ%Ô%ˆØˆÔÐ2Ñ3Ô3Ð3Ø×Ò˜œ¨Ñ/Ô/Ð/Ø×Ò˜œ¨Ñ6Ô6Ð6ð 	ˆÔ˜kÑ*Ô*Ð*Ø×Ò˜œ¨Ñ0Ô0Ð0Ø×Ò˜œ¨Ñ,Ô,Ð,Ð,Ð,r   c                 óN  — t          ¦   «         }t          j        ¦   «         }|                     t	          j        |¦  «        ¦  «         t          j        ¦   «         }|                     d|z  ¦  «         |  	                    d|z  d 
                    |j        ¦  «        ¦  «         dS )zC
        Test switching modes many times on the same data.
        s   x
xó   xr   N)r   r   r^   r_   r   r`   ÚsysÚgetrecursionlimitrb   rc   Újoinr   )r   ÚprotorG   Úlimits       r   Útest_stackRecursionz%LineReceiverTests.test_stackRecursion*  s�   € õ #Ñ$Ô$ˆÝ!Ô8Ñ:Ô:ˆ	Ø×Ò�XÔ1°)Ñ<Ô<Ñ=Ô=Ð=ÝÔ%Ñ'Ô'ˆØ×Ò˜7 U™?Ñ+Ô+Ð+Ø×Ò˜ ™ s§x¢x°´Ñ'<Ô'<Ñ=Ô=Ð=Ð=Ð=r   c                 óö   — t          j        ¦   «         }t          j        ¦   «         }|                     |¦  «         |                     d|j        dz   z  dz   ¦  «         |                      |j        ¦  «         dS ©zx
        C{LineReceiver} disconnects the transport if it receives a line longer
        than its C{MAX_LENGTH}.
        r�   r#   ó   
rN©	r   rŠ   r   ÚStringTransportr_   rb   rO   Ú
assertTrueÚdisconnecting©r   r‘   rG   s      r   Útest_maximumLineLengthz(LineReceiverTests.test_maximumLineLength5  óu   € õ
 Ô"Ñ$Ô$ˆÝ!Ô1Ñ3Ô3ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜4 5Ô#3°aÑ#7Ñ8¸8ÑCÑDÔDÐDØ�Š˜	Ô/Ñ0Ô0Ð0Ð0Ð0r   c                 ó  — t          ¦   «         }d|_        t          j        ¦   «         }|                     |¦  «         d|j        dz
  z  }|                     |¦  «         |                     |j        dd…         ¦  «         |                     |j        dd…         |z   ¦  «         |                      |j        ¦  «         |  	                    t          |j        ¦  «        d¦  «         |  	                    ||j        d         ¦  «         dS )a~  
        C{LineReceiver} doesn't disconnect the transport when it
        receives a finished line as long as its C{MAX_LENGTH}, when
        the second-to-last packet ended with a pattern that could have
        been -- and turns out to have been -- the start of a
        delimiter, and that packet causes the total input to exceed
        C{MAX_LENGTH} + len(delimiter).
        r=   r�   r#   NrK   r   )r/   rO   r   r˜   r_   rb   r,   ÚassertFalserš   rc   rL   r6   )r   r‘   rg   r    s       r   Ú&test_maximumLineLengthPartialDelimiterz8LineReceiverTests.test_maximumLineLengthPartialDelimiter@  sù   € õ ‘”ˆØˆÔÝÔ)Ñ+Ô+ˆØ×Ò˜QÑÔÐà�uÔ'¨!Ñ+Ñ,ˆØ×Ò˜4Ñ Ô Ð Ø×Ò˜5œ?¨3¨B¨3Ô/Ñ0Ô0Ð0Ø×Ò˜5œ?¨2¨3¨3Ô/°$Ñ6Ñ7Ô7Ð7Ø×Ò˜œÑ)Ô)Ð)Ø×Ò�˜Uœ^Ñ,Ô,¨aÑ0Ô0Ð0Ø×Ò˜˜uœ~¨aÔ0Ñ1Ô1Ð1Ð1Ð1r   c                 óB  — t          j        ¦   «         }d|_        t          j        ¦   «         }|                     |¦  «         |                     d|j        z  |j        dt          |j        ¦  «        dz
  …         z   ¦  «         |  	                    |j
        ¦  «         dS )aO  
        C{LineReceiver} doesn't disconnect the transport it if
        receives a non-finished line whose length, counting the
        delimiter, is longer than its C{MAX_LENGTH} but shorter than
        its C{MAX_LENGTH} + len(delimiter). (When the first part that
        exceeds the max is the beginning of the delimiter.)
        s   
r�   Nr#   )r   rŠ   r,   r   r˜   r_   rb   rO   rL   rŸ   rš   r›   s      r   Ú(test_notQuiteMaximumLineLengthUnfinishedz:LineReceiverTests.test_notQuiteMaximumLineLengthUnfinishedV  s¡   € õ Ô"Ñ$Ô$ˆð "ˆŒÝ!Ô1Ñ3Ô3ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×ÒØ�EÔ$Ñ$¨¬Ð8R½#¸e¼oÑ:NÔ:NÐQRÑ:RÐ8RÔ(SÑSñ	
ô 	
ð 	
ð 	×Ò˜Ô0Ñ1Ô1Ð1Ð1Ð1r   c                 ó  — t          j        ¦   «         }d„ |_        t          j        ¦   «         }|                     |¦  «         |                     ¦   «          |                     d¦  «        }|                      |t          ¦  «         dS )zf
        C{LineReceiver.dataReceived} forwards errors returned by
        C{rawDataReceived}.
        c                 ó    — t          d¦  «        S )NÚoops)ÚRuntimeError©r&   s    r   ú<lambda>z5LineReceiverTests.test_rawDataError.<locals>.<lambda>o  s   € ­\¸&Ñ-AÔ-A€ r   s   dataN)
r   rŠ   r'   r   r˜   r_   r   rb   ÚassertIsInstancer¦   )r   r‘   rG   Úwhys       r   Útest_rawDataErrorz#LineReceiverTests.test_rawDataErrori  s€   € õ
 Ô"Ñ$Ô$ˆØ AÐ AˆÔÝ!Ô1Ñ3Ô3ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×ÒÑÔÐØ× Ò  Ñ)Ô)ˆØ×Ò˜c¥<Ñ0Ô0Ð0Ð0Ð0r   c                 ón   — t          j        ¦   «         }|                      t          |j        d¦  «         dS )z‰
        When L{LineReceiver.rawDataReceived} is not overridden in a
        subclass, calling it raises C{NotImplementedError}.
        ÚfooN)r   rŠ   ÚassertRaisesÚNotImplementedErrorr'   ©r   r‘   s     r   Ú"test_rawDataReceivedNotImplementedz4LineReceiverTests.test_rawDataReceivedNotImplementedv  s4   € õ
 Ô"Ñ$Ô$ˆØ×ÒÕ-¨uÔ/DÀeÑLÔLÐLÐLÐLr   c                 ón   — t          j        ¦   «         }|                      t          |j        d¦  «         dS )z†
        When L{LineReceiver.lineReceived} is not overridden in a subclass,
        calling it raises C{NotImplementedError}.
        r­   N)r   rŠ   r®   r¯   r!   r°   s     r   Útest_lineReceivedNotImplementedz1LineReceiverTests.test_lineReceivedNotImplemented~  s4   € õ
 Ô"Ñ$Ô$ˆØ×ÒÕ-¨uÔ/AÀ5ÑIÔIÐIÐIÐIr   N)r(   r)   r*   r+   ra   rd   rk   rq   rr   rt   rv   rx   ry   rz   r{   r}   r~   r   r‚   r‹   r“   rœ   r    r¢   r«   r±   r³   r-   r   r   rW   rW   �   sU  € € € € € ðð ð
€Fð$ð ð €Fð 6ð 6ð 6ð 8€Hà7Ð7Ð7€LØ ; -Ñ/€Lð<ð <ð <ð" J€KàLÐLÐL€Oðð ð €Oð?ð ?ð ?ð  :€Hà5Ð5Ð5€Kð;ð ;ð ;ð

ð 

ð 

ð-ð -ð -ð,	>ð 	>ð 	>ð	1ð 	1ð 	1ð2ð 2ð 2ð,2ð 2ð 2ð&1ð 1ð 1ðMð Mð MðJð Jð Jð Jð Jr   rW   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚExcessivelyLargeLineCatcherz®
    Helper for L{LineReceiverLineLengthExceededTests}.

    @ivar longLines: A L{list} of L{bytes} giving the values
        C{lineLengthExceeded} has been called with.
    c                 ó   — g | _         d S r   )Ú	longLinesr   s    r   r7   z*ExcessivelyLargeLineCatcher.connectionMade�  s   € ØˆŒˆˆr   c                 ó   — dS )z/
        Disregard any received lines.
        Nr-   r   s     r   r!   z(ExcessivelyLargeLineCatcher.lineReceived’  s   € € € r   c                 ó:   — | j                              |¦  «         dS )zF
        Record any data that exceeds the line length limits.
        N)r·   r   r%   s     r   rP   z.ExcessivelyLargeLineCatcher.lineLengthExceeded—  s    € ð 	Œ×Ò˜dÑ#Ô#Ð#Ð#Ð#r   N)r(   r)   r*   r+   r7   r!   rP   r-   r   r   rµ   rµ   ‡  sK   € € € € € ðð ðð ð ðð ð ð
$ð $ð $ð $ð $r   rµ   c                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
Ú#LineReceiverLineLengthExceededTestszO
    Tests for L{twisted.protocols.basic.LineReceiver.lineLengthExceeded}.
    c                 ó²   — t          ¦   «         | _        d| j        _        t          j        ¦   «         | _        | j                             | j        ¦  «         d S )Né   )rµ   r‘   rO   r   r˜   rG   r_   r   s    r   ÚsetUpz)LineReceiverLineLengthExceededTests.setUp£  sG   € Ý0Ñ2Ô2ˆŒ
Ø !ˆŒ
ÔÝ&Ô6Ñ8Ô8ˆŒØŒ
×!Ò! $¤.Ñ1Ô1Ð1Ð1Ð1r   c                 ó¦   — d| j         j        dz  dz   z  }| j                              |¦  «         |                      |g| j         j        ¦  «         dS )zÊ
        If more bytes than C{LineReceiver.MAX_LENGTH} arrive containing no line
        delimiter, all of the bytes are passed as a single string to
        L{LineReceiver.lineLengthExceeded}.
        r�   é   N)r‘   rO   rb   rc   r·   ©r   Ú	excessives     r   Útest_longUnendedLinez8LineReceiverLineLengthExceededTests.test_longUnendedLine©  sV   € ð ˜DœJÔ1°AÑ5¸Ñ9Ñ:ˆ	ØŒ
×Ò 	Ñ*Ô*Ð*Ø×Ò˜)˜ d¤jÔ&:Ñ;Ô;Ð;Ð;Ð;r   c                 óÆ   — d| j         j        dz  dz   z  }| j                              d| j         j        z   |z   ¦  «         |                      |g| j         j        ¦  «         dS )a*  
        If L{LineReceiver.dataReceived} is called with bytes representing a
        short line followed by bytes that exceed the length limit without a
        line delimiter, L{LineReceiver.lineLengthExceeded} is called with all
        of the bytes following the short line's delimiter.
        r�   rÀ   N)r‘   rO   rb   r,   rc   r·   rÁ   s     r   Útest_longLineAfterShortLinez?LineReceiverLineLengthExceededTests.test_longLineAfterShortLine³  se   € ð ˜DœJÔ1°AÑ5¸Ñ9Ñ:ˆ	ØŒ
×Ò  t¤zÔ';Ñ ;¸iÑ GÑHÔHÐHØ×Ò˜)˜ d¤jÔ&:Ñ;Ô;Ð;Ð;Ð;r   c                 óè   — | j         j                             d| j         j        dz  dz   z  gdz  ¦  «        }| j                              |¦  «         |                      |g| j         j        ¦  «         dS )a  
        If L{LineReceiver.dataReceived} is called with more than
        C{LineReceiver.MAX_LENGTH} bytes containing a line delimiter somewhere
        not in the first C{MAX_LENGTH} bytes, the entire byte string is passed
        to L{LineReceiver.lineLengthExceeded}.
        r�   rÀ   N)r‘   r,   r�   rO   rb   rc   r·   rÁ   s     r   Útest_longLineWithDelimiterz>LineReceiverLineLengthExceededTests.test_longLineWithDelimiter¾  sx   € ð ”JÔ(×-Ò-Ø�T”ZÔ*¨QÑ.°Ñ2Ñ3Ð4°qÑ8ñ
ô 
ˆ	ð 	Œ
×Ò 	Ñ*Ô*Ð*Ø×Ò˜)˜ d¤jÔ&:Ñ;Ô;Ð;Ð;Ð;r   c                 óÆ   — d| j         j        dz  dz   z  | j         j        z   dz  }| j                              |¦  «         |                      |g| j         j        ¦  «         dS )a  
        If L{LineReceiver.dataReceived} is called with more than
        C{LineReceiver.MAX_LENGTH} bytes containing multiple line delimiters
        somewhere not in the first C{MAX_LENGTH} bytes, the entire byte string
        is passed to L{LineReceiver.lineLengthExceeded}.
        r�   rÀ   N)r‘   rO   r,   rb   rc   r·   rÁ   s     r   Útest_multipleLongLinesz:LineReceiverLineLengthExceededTests.test_multipleLongLinesË  sf   € ð ˜TœZÔ2°QÑ6¸Ñ:Ñ;¸d¼jÔ>RÑRÐVWÑWˆ	ØŒ
×Ò 	Ñ*Ô*Ð*Ø×Ò˜)˜ d¤jÔ&:Ñ;Ô;Ð;Ð;Ð;r   c                 óö   — t          j        ¦   «         }t          j        ¦   «         }|                     |¦  «         |                     d|j        dz   z  dz   ¦  «         |                      |j        ¦  «         dS r•   r—   r›   s      r   rœ   z:LineReceiverLineLengthExceededTests.test_maximumLineLengthÖ  r�   r   c                 ó  — t          j        ¦   «         }t          j        ¦   «         }|                     |¦  «         |                     d|j        t          |j        ¦  «        z   z  ¦  «         |  	                    |j
        ¦  «         dS )z…
        C{LineReceiver} disconnects the transport it if receives a non-finished
        line longer than its C{MAX_LENGTH}.
        r�   N)r   rŠ   r   r˜   r_   rb   rO   rL   r,   r™   rš   r›   s      r   Útest_maximumLineLengthRemainingzCLineReceiverLineLengthExceededTests.test_maximumLineLengthRemainingá  sz   € õ
 Ô"Ñ$Ô$ˆÝ!Ô1Ñ3Ô3ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜4 5Ô#3µc¸%¼/Ñ6JÔ6JÑ#JÑKÑLÔLÐLØ�Š˜	Ô/Ñ0Ô0Ð0Ð0Ð0r   N)r(   r)   r*   r+   r¾   rÃ   rÅ   rÇ   rÉ   rœ   rÌ   r-   r   r   r»   r»   ž  s‡   € € € € € ðð ð2ð 2ð 2ð<ð <ð <ð	<ð 	<ð 	<ð<ð <ð <ð	<ð 	<ð 	<ð	1ð 	1ð 	1ð	1ð 	1ð 	1ð 	1ð 	1r   r»   c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )ÚLineOnlyReceiverTestsz@
    Tests for L{twisted.protocols.basic.LineOnlyReceiver}.
    s7   foo
    bleakness
    desolation
    plastic forks
    c                 ó@  — t          j        ¦   «         }t          ¦   «         }|                     |¦  «         t	          | j        ¦  «        D ]}|                     |¦  «         Œ|                      |j        | j         	                    d¦  «        dd…         ¦  «         dS )zW
        Test buffering over line protocol: data received should match buffer.
        r   NrK   )
r   r˜   rR   r_   r   ra   rb   rc   r6   Úsplit)r   rg   rh   Úcs       r   rk   z!LineOnlyReceiverTests.test_bufferø  s–   € õ Ô)Ñ+Ô+ˆÝÑÔˆØ	×Ò˜ÑÔÐÝ˜4œ;Ñ'Ô'ð 	ð 	ˆAØ�NŠN˜1ÑÔÐÐØ×Ò˜œ T¤[×%6Ò%6°uÑ%=Ô%=¸c¸r¸cÔ%BÑCÔCÐCÐCÐCr   c                 ó  — t          ¦   «         }t          j        ¦   «         }|                     |¦  «         |                     d|j        t          |j        ¦  «        z   dz   z  dz   ¦  «         |                      |j	        ¦  «         dS )z�
        C{LineOnlyReceiver} disconnects the transport if it receives a
        line longer than its C{MAX_LENGTH} + len(delimiter).
        r�   r#   r–   N)
rR   r   r˜   r_   rb   rO   rL   r,   r™   rš   r›   s      r   Ú!test_greaterThanMaximumLineLengthz7LineOnlyReceiverTests.test_greaterThanMaximumLineLength  sŠ   € õ
 Ñ Ô ˆÝ!Ô1Ñ3Ô3ˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×ÒØ�EÔ$¥s¨5¬?Ñ';Ô';Ñ;¸aÑ?Ñ@À8ÑKñ	
ô 	
ð 	
ð 	�Š˜	Ô/Ñ0Ô0Ð0Ð0Ð0r   c                 ón   — t          j        ¦   «         }|                      t          |j        d¦  «         dS )zŠ
        When L{LineOnlyReceiver.lineReceived} is not overridden in a subclass,
        calling it raises C{NotImplementedError}.
        r­   N)r   ÚLineOnlyReceiverr®   r¯   r!   r°   s     r   r³   z5LineOnlyReceiverTests.test_lineReceivedNotImplemented  s4   € õ
 Ô&Ñ(Ô(ˆØ×ÒÕ-¨uÔ/AÀ5ÑIÔIÐIÐIÐIr   N)r(   r)   r*   r+   ra   rk   rÓ   r³   r-   r   r   rÎ   rÎ   í  sZ   € € € € € ðð ð€Fð	Dð 	Dð 	Dð1ð 1ð 1ðJð Jð Jð Jð Jr   rÎ   c                   ó6   — e Zd Zd„ Zd„ ZdZdZefdeddfd„Z	dS )	Ú	TestMixinc                 ó   — g | _         d S r   r5   r   s    r   r7   zTestMixin.connectionMade  s   € ØˆŒˆˆr   c                 ó:   — | j                              |¦  «         d S r   rU   ©r   rj   s     r   ÚstringReceivedzTestMixin.stringReceived  s   € ØŒ×Ò˜QÑÔÐÐÐr   é2   r   ÚreasonÚreturnNc                 ó   — d| _         d S )Nr#   )Úclosed)r   rÝ   s     r   ÚconnectionLostzTestMixin.connectionLost#  s   € ØˆŒˆˆr   )
r(   r)   r*   r7   rÛ   rO   rà   r   r   rá   r-   r   r   r×   r×     sh   € € € € € ðð ð ð ð  ð  ð €JØ€Fà/=ð ð  Wð À$ð ð ð ð ð ð r   r×   c                   ó   — e Zd Zd„ ZdS )ÚTestNetstringc                 ón   — | j                              |¦  «         | j                             |¦  «         d S r   )r6   r   rG   ÚwriterÚ   s     r   rÛ   zTestNetstring.stringReceived(  s4   € ØŒ×Ò˜QÑÔÐØŒ×Ò˜QÑÔÐÐÐr   N)r(   r)   r*   rÛ   r-   r   r   rã   rã   '  s#   € € € € € ð ð  ð  ð  ð  r   rã   c                   óP   — e Zd ZU g Zeee                  ed<   dZded<   d„ Z	d„ Z
dS )ÚLPTestCaseMixinÚillegalStringsNú!Optional[Type[protocol.Protocol]]r   c                 ó~   — t          j        ¦   «         }|                      ¦   «         }|                     |¦  «         |S )z„
        Return a new instance of C{self.protocol} connected to a new instance
        of L{proto_helpers.StringTransport}.
        )r   r˜   r   r_   )r   rg   rh   s      r   ÚgetProtocolzLPTestCaseMixin.getProtocol1  s8   € õ
 Ô)Ñ+Ô+ˆØ�MŠM‰OŒOˆØ	×Ò˜ÑÔÐØˆr   c                 óÎ   — | j         D ]\}|                      ¦   «         }t          |¦  «        D ]}|                     |¦  «         Œ|                      |j        j        ¦  «         Œ]dS )zO
        Assert that illegal strings cause the transport to be closed.
        N)rè   rë   r   rb   r™   rG   rš   ©r   rj   ÚrrÑ   s       r   Útest_illegalzLPTestCaseMixin.test_illegal;  su   € ð Ô$ð 	7ð 	7ˆAØ× Ò Ñ"Ô"ˆAÝ˜q‘\”\ð "ð "�Ø—’˜qÑ!Ô!Ð!Ð!Ø�OŠO˜AœKÔ5Ñ6Ô6Ð6Ð6ð		7ð 	7r   )r(   r)   r*   rè   r   r   ÚbytesÚ__annotations__r   rë   rï   r-   r   r   rç   rç   -  s^   € € € € € € Ø,.€N�H˜T %œ[Ô)Ð.Ð.Ñ.Ø48€HÐ1Ð8Ð8Ñ8ðð ð ð7ð 7ð 7ð 7ð 7r   rç   c                   óª   — e Zd ZdZg d¢Zg d¢ZeZd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚNetstringReceiverTestszA
    Tests for L{twisted.protocols.basic.NetstringReceiver}.
    )ó   helloó   worlds   hows   ares   you123s   :todays  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)s   9999999999999999999999s   abcs   4:abcdes7   51:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab,c                 óš   — t          j        ¦   «         | _        t          ¦   «         | _        | j                             | j        ¦  «         d S r   )r   r˜   rG   rã   ÚnetstringReceiverr_   r   s    r   r¾   zNetstringReceiverTests.setUpV  s=   € Ý&Ô6Ñ8Ô8ˆŒÝ!.¡¤ˆÔØÔ×-Ò-¨d¬nÑ=Ô=Ð=Ð=Ð=r   c                 óê  — t          dd¦  «        D ]á}t          j        ¦   «         }t          ¦   «         }d|_        |                     |¦  «         | j        D ]}|                     |¦  «         Œ|                     ¦   «         }t          t          |¦  «        |z  dz   ¦  «        D ],}|||z  |dz   |z  …         }|r| 
                    |¦  «         Œ-|                      |j        | j        ¦  «         ŒâdS )zI
        Strings can be received in chunks of different lengths.
        r#   r\   i»  N)r]   r   r˜   rã   rO   r_   ÚstringsÚ
sendStringÚvaluerL   rb   rc   r6   )r   rf   rg   rh   rj   Úoutri   s          r   rk   z"NetstringReceiverTests.test_buffer[  s  € õ !  B™<œ<ð 	7ð 	7ˆKÝÔ-Ñ/Ô/ˆAÝ‘”ˆAØˆAŒLØ×Ò˜QÑÔÐØ”\ð  ð  �Ø—’˜Q‘”��Ø—'’'‘)”)ˆCÝ�3˜s™8œ8 {Ñ2°QÑ6Ñ7Ô7ð &ð &�Ø˜˜K™¨1¨q©5°KÑ*?Ð?Ô@�Øð &Ø—N’N 1Ñ%Ô%Ð%øØ×Ò˜QœZ¨¬Ñ6Ô6Ð6Ð6ð	7ð 	7r   c                 ó|   — | j                              d¦  «         |                      | j         j        dg¦  «         dS )zE
        Empty netstrings (with length '0') can be received.
        s   0:,r   N©r÷   rb   rc   r6   r   s    r   Útest_receiveEmptyNetstringz1NetstringReceiverTests.test_receiveEmptyNetstringm  s?   € ð 	Ô×+Ò+¨FÑ3Ô3Ð3Ø×Ò˜Ô/Ô8¸3¸%Ñ@Ô@Ð@Ð@Ð@r   c                 ó|   — | j                              d¦  «         |                      | j         j        dg¦  «         dS )z;
        One-character netstrings can be received.
        ó   1:a,rZ   Nrþ   r   s    r   Útest_receiveOneCharacterz/NetstringReceiverTests.test_receiveOneCharactert  s?   € ð 	Ô×+Ò+¨GÑ4Ô4Ð4Ø×Ò˜Ô/Ô8¸4¸&ÑAÔAÐAÐAÐAr   c                 ó|   — | j                              d¦  «         |                      | j         j        dg¦  «         dS )z;
        Two-character netstrings can be received.
        s   2:ab,ó   abNrþ   r   s    r   Útest_receiveTwoCharactersz0NetstringReceiverTests.test_receiveTwoCharacters{  s?   € ð 	Ô×+Ò+¨HÑ5Ô5Ð5Ø×Ò˜Ô/Ô8¸5¸'ÑBÔBÐBÐBÐBr   c                 ó|   — | j                              d¦  «         |                      | j         j        dg¦  «         dS )zÙ
        Netstrings with embedded netstrings. This test makes sure that
        the parser does not become confused about the ',' and ':'
        characters appearing inside the data portion of the netstring.
        s   4:1:a,,r  Nrþ   r   s    r   Útest_receiveNestedNetstringz2NetstringReceiverTests.test_receiveNestedNetstring‚  s?   € ð 	Ô×+Ò+¨JÑ7Ô7Ð7Ø×Ò˜Ô/Ô8¸7¸)ÑDÔDÐDÐDÐDr   c                 óx   — | j                              d¦  «         |                      | j        j        ¦  «         dS )zL
        Netstrings containing more data than expected are refused.
        s   2:aaa,N©r÷   rb   r™   rG   rš   r   s    r   Útest_moreDataThanSpecifiedz1NetstringReceiverTests.test_moreDataThanSpecified‹  s8   € ð 	Ô×+Ò+¨IÑ6Ô6Ð6Ø�Š˜œÔ4Ñ5Ô5Ð5Ð5Ð5r   c                 óx   — | j                              d¦  «         |                      | j        j        ¦  «         dS )zƒ
        Netstrings that should be empty according to their length
        specification are refused if they contain data.
        s   0:a,Nr	  r   s    r   Ú$test_moreDataThanSpecifiedBorderCasez;NetstringReceiverTests.test_moreDataThanSpecifiedBorderCase’  ó8   € ð
 	Ô×+Ò+¨GÑ4Ô4Ð4Ø�Š˜œÔ4Ñ5Ô5Ð5Ð5Ð5r   c                 óx   — | j                              d¦  «         |                      | j        j        ¦  «         dS )z`
        Netstrings without leading digits that specify the length
        are refused.
        s   :aaa,Nr	  r   s    r   Útest_missingNumberz)NetstringReceiverTests.test_missingNumberš  ó8   € ð
 	Ô×+Ò+¨HÑ5Ô5Ð5Ø�Š˜œÔ4Ñ5Ô5Ð5Ð5Ð5r   c                 óx   — | j                              d¦  «         |                      | j        j        ¦  «         dS )zg
        Netstrings without a colon between length specification and
        data are refused.
        s   3aaa,Nr	  r   s    r   Útest_missingColonz(NetstringReceiverTests.test_missingColon¢  r  r   c                 óx   — | j                              d¦  «         |                      | j        j        ¦  «         dS )zY
        Netstrings that have no leading digits nor a colon are
        refused.
        s   aaa,Nr	  r   s    r   Útest_missingNumberAndColonz1NetstringReceiverTests.test_missingNumberAndColonª  r  r   c                 óx   — | j                              d¦  «         |                      | j        j        ¦  «         dS )zA
        Netstrings consisting only of data are refused.
        s   aaaNr	  r   s    r   Útest_onlyDataz$NetstringReceiverTests.test_onlyData²  s8   € ð 	Ô×+Ò+¨FÑ3Ô3Ð3Ø�Š˜œÔ4Ñ5Ô5Ð5Ð5Ð5r   c                 ó  — | j                              d¦  «         | j                              d¦  «         |                      | j         j        dg¦  «         |                      | j                              ¦   «         ¦  «         dS )z=
        Netstrings can be received in two portions.
        s   4:aas   aa,s   aaaaN)r÷   rb   rc   r6   r™   Ú_payloadCompleter   s    r   Útest_receiveNetstringPortions_1z6NetstringReceiverTests.test_receiveNetstringPortions_1¹  sw   € ð 	Ô×+Ò+¨GÑ4Ô4Ð4ØÔ×+Ò+¨FÑ3Ô3Ð3Ø×Ò˜Ô/Ô8¸7¸)ÑDÔDÐDØ�Š˜Ô.×?Ò?ÑAÔAÑBÔBÐBÐBÐBr   c                 ó†   — dD ]}| j                              |¦  «         Œ|                      | j         j        dg¦  «         dS )zŽ
        Netstrings can be received in more than two portions, even if
        the length specification is split across two portions.
        )ó   1s   0:01234s   56789ó   ,rX   Nrþ   ©r   Úparts     r   Útest_receiveNetstringPortions_2z6NetstringReceiverTests.test_receiveNetstringPortions_2Â  sQ   € ð
 7ð 	6ð 	6ˆDØÔ"×/Ò/°Ñ5Ô5Ð5Ð5Ø×Ò˜Ô/Ô8¸=¸/ÑJÔJÐJÐJÐJr   c                 ó†   — dD ]}| j                              |¦  «         Œ|                      | j         j        dg¦  «         dS )zE
        Netstrings can be received one character at a time.
        )ó   2ó   :rZ   ó   br  r  Nrþ   r  s     r   Útest_receiveNetstringPortions_3z6NetstringReceiverTests.test_receiveNetstringPortions_3Ë  sQ   € ð 3ð 	6ð 	6ˆDØÔ"×/Ò/°Ñ5Ô5Ð5Ð5Ø×Ò˜Ô/Ô8¸5¸'ÑBÔBÐBÐBÐBr   c                 óL  — | j                              d¦  «         |                      | j                              ¦   «         ¦  «         |                      | j         j        dg¦  «         | j                              d¦  «         |                      | j         j        ddg¦  «         dS )zÑ
        A stream of two netstrings can be received in two portions,
        where the first portion contains the complete first netstring
        and the length specification of the second netstring.
        s   1:a,1rZ   s   :b,r#  N)r÷   rb   r™   r  rc   r6   r   s    r   Útest_receiveTwoNetstringsz0NetstringReceiverTests.test_receiveTwoNetstringsÓ  s—   € ð 	Ô×+Ò+¨HÑ5Ô5Ð5Ø�Š˜Ô.×?Ò?ÑAÔAÑBÔBÐBØ×Ò˜Ô/Ô8¸4¸&ÑAÔAÐAØÔ×+Ò+¨FÑ3Ô3Ð3Ø×Ò˜Ô/Ô8¸4À¸,ÑGÔGÐGÐGÐGr   c                 óâ   — | j         j        dz   }| j                              d                     t	          |¦  «        dd|z  f¦  «        ¦  «         |                      | j        j        ¦  «         dS )zs
        Netstrings with a length specification exceeding the specified
        C{MAX_LENGTH} are refused.
        r#   r   r"  rZ   N)r÷   rO   rb   r�   rð   r™   rG   rš   )r   ÚtooLongs     r   Útest_maxReceiveLimitz+NetstringReceiverTests.test_maxReceiveLimitß  sn   € ð
 Ô(Ô3°aÑ7ˆØÔ×+Ò+Ø�HŠH•e˜G‘n”n d¨D°7©NÐ;Ñ<Ô<ñ	
ô 	
ð 	
ð 	�Š˜œÔ4Ñ5Ô5Ð5Ð5Ð5r   c                 ó�   — d| j         _        | j                              ¦   «          |                      | j         j        d¦  «         dS )zw
        C{_consumeLength} returns the expected length of the
        netstring, including the trailing comma.
        ó   12:é   N)r÷   Ú_remainingDataÚ_consumeLengthrc   Ú_expectedPayloadSizer   s    r   Útest_consumeLengthz)NetstringReceiverTests.test_consumeLengthê  sF   € ð
 17ˆÔÔ-ØÔ×-Ò-Ñ/Ô/Ð/Ø×Ò˜Ô/ÔDÀbÑIÔIÐIÐIÐIr   c                 ó¨   — d| j         _        d| j         _        | j                              ¦   «          |                      | j         j        d¦  «         dS )zŒ
        C{_consumeLength} works as expected if the length specification
        contains the value of C{MAX_LENGTH} (border case).
        r+  é   r,  N)r÷   r-  rO   r.  rc   r/  r   s    r   Útest_consumeLengthBorderCase1z4NetstringReceiverTests.test_consumeLengthBorderCase1ó  sQ   € ð
 17ˆÔÔ-Ø,.ˆÔÔ)ØÔ×-Ò-Ñ/Ô/Ð/Ø×Ò˜Ô/ÔDÀbÑIÔIÐIÐIÐIr   c                 óŠ   — d| j         _        d| j         _        |                      t          j        | j         j        ¦  «         dS )z¬
        C{_consumeLength} raises a L{basic.NetstringParseError} if
        the length specification exceeds the value of C{MAX_LENGTH}
        by 1 (border case).
        r+  é   N©r÷   r-  rO   r®   r   ÚNetstringParseErrorr.  r   s    r   Útest_consumeLengthBorderCase2z4NetstringReceiverTests.test_consumeLengthBorderCase2ý  sJ   € ð 17ˆÔÔ-Ø,.ˆÔÔ)Ø×ÒÝÔ% tÔ'=Ô'Lñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óŠ   — d| j         _        d| j         _        |                      t          j        | j         j        ¦  «         dS )z¨
        C{_consumeLength} raises a L{basic.NetstringParseError} if
        the length specification exceeds the value of C{MAX_LENGTH}
        by more than 1.
        s   1000:r5  Nr6  r   s    r   Útest_consumeLengthBorderCase3z4NetstringReceiverTests.test_consumeLengthBorderCase3	  sJ   € ð 19ˆÔÔ-Ø,.ˆÔÔ)Ø×ÒÝÔ% tÔ'=Ô'Lñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ón   — t          j        ¦   «         }|                      t          |j        d¦  «         dS )z�
        When L{NetstringReceiver.stringReceived} is not overridden in a
        subclass, calling it raises C{NotImplementedError}.
        r­   N)r   ÚNetstringReceiverr®   r¯   rÛ   r°   s     r   Ú!test_stringReceivedNotImplementedz8NetstringReceiverTests.test_stringReceivedNotImplemented  s4   € õ
 Ô'Ñ)Ô)ˆØ×ÒÕ-¨uÔ/CÀUÑKÔKÐKÐKÐKr   N)r(   r)   r*   r+   rù   rè   rã   r   r¾   rk   rÿ   r  r  r  r
  r  r  r  r  r  r  r  r$  r&  r)  r0  r3  r8  r:  r=  r-   r   r   ró   ró   F  s±  € € € € € ðð ð UÐTÐT€Gðð ð €Nð €Hð>ð >ð >ð
7ð 7ð 7ð$Að Að AðBð Bð BðCð Cð CðEð Eð Eð6ð 6ð 6ð6ð 6ð 6ð6ð 6ð 6ð6ð 6ð 6ð6ð 6ð 6ð6ð 6ð 6ðCð Cð CðKð Kð KðCð Cð Cð
Hð 
Hð 
Hð	6ð 	6ð 	6ðJð Jð JðJð Jð Jð

ð 

ð 

ð

ð 

ð 

ðLð Lð Lð Lð Lr   ró   c                   ó¸   — e Zd ZU dZdZded<   dZeee	                  ed<   dZ
eee	                  ed<   dZeee	                  ed<   d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ ZdS )ÚIntNTestCaseMixinz4
    TestCase mixin for int-prefixed protocols.
    Nré   r   rù   rè   ÚpartialStringsc           	      ó   — |                       ¦   «         }| j        D ]Q}t          t          j        |j        t          |¦  «        ¦  «        |z   ¦  «        D ]}|                     |¦  «         ŒŒR|                      |j	        | j        ¦  «         dS )z>
        Test receiving data find the same data send.
        N)
rë   rù   r   ÚstructÚpackÚstructFormatrL   rb   rc   r6   )r   rî   rj   rÑ   s       r   Útest_receivezIntNTestCaseMixin.test_receive(  s�   € ð ×ÒÑÔˆØ”ð 	"ð 	"ˆAÝ�vœ{¨1¬>½3¸q¹6¼6ÑBÔBÀQÑFÑGÔGð "ð "�Ø—’˜qÑ!Ô!Ð!Ð!ð"à×Ò˜œ T¤\Ñ2Ô2Ð2Ð2Ð2r   c                 óÆ   — | j         D ]X}|                      ¦   «         }t          |¦  «        D ]}|                     |¦  «         Œ|                      |j        g ¦  «         ŒYdS )zK
        Send partial data, nothing should be definitely received.
        N)r@  rë   r   rb   rc   r6   rí   s       r   Útest_partialzIntNTestCaseMixin.test_partial2  sv   € ð Ô$ð 	-ð 	-ˆAØ× Ò Ñ"Ô"ˆAÝ˜q‘\”\ð "ð "�Ø—’˜qÑ!Ô!Ð!Ð!Ø×Ò˜QœZ¨Ñ,Ô,Ð,Ð,ð		-ð 	-r   c                 óè   — |                       ¦   «         }|                     d¦  «         |                      |j                             ¦   «         t          j        |j        d¦  «        dz   ¦  «         dS )z2
        Test sending data over protocol.
        ó   bbbbbbbbbbbbbbbbé   N)rë   rú   rc   rG   rû   rB  rC  rD  ©r   rî   s     r   Ú	test_sendzIntNTestCaseMixin.test_send<  so   € ð ×ÒÑÔˆØ	�Š�YÑÔÐØ×ÒØŒK×ÒÑÔ¥¤¨Q¬^¸RÑ!@Ô!@À9Ñ!Lñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óà   — g }|                       ¦   «         }|j        |_        d|_        |                     t          j        |j        d¦  «        ¦  «         |                      |dg¦  «         dS )zÍ
        When a length prefix is received which is greater than the protocol's
        C{MAX_LENGTH} attribute, the C{lengthLimitExceeded} method is called
        with the received length prefix.
        r\   r5  N)	rë   r   ÚlengthLimitExceededrO   rb   rB  rC  rD  rc   )r   rE   rî   s      r   Útest_lengthLimitExceededz*IntNTestCaseMixin.test_lengthLimitExceededF  si   € ð ˆØ×ÒÑÔˆØ &¤ˆÔØˆŒØ	�Š•v”{ 1¤>°2Ñ6Ô6Ñ7Ô7Ð7Ø×Ò˜ " Ñ&Ô&Ð&Ð&Ð&r   c                 óÒ   — |                       ¦   «         }d|_        |                     t          j        |j        d¦  «        dz   ¦  «         |                      |j        g ¦  «         dS )zÑ
        If a length prefix for a string longer than C{MAX_LENGTH} is delivered
        to C{dataReceived} at the same time as the entire string, the string is
        not passed to C{stringReceived}.
        r\   r5  s   xxxxxxxxxxxN)rë   rO   rb   rB  rC  rD  rc   r6   rK  s     r   Útest_longStringNotDeliveredz-IntNTestCaseMixin.test_longStringNotDeliveredS  s_   € ð ×ÒÑÔˆØˆŒØ	�Š•v”{ 1¤>°2Ñ6Ô6¸ÑBÑCÔCÐCØ×Ò˜œ RÑ(Ô(Ð(Ð(Ð(r   c                 ón   — t          j        ¦   «         }|                      t          |j        d¦  «         dS )zŽ
        When L{IntNStringReceiver.stringReceived} is not overridden in a
        subclass, calling it raises C{NotImplementedError}.
        r­   N)r   ÚIntNStringReceiverr®   r¯   rÛ   r°   s     r   r=  z3IntNTestCaseMixin.test_stringReceivedNotImplemented^  s4   € õ
 Ô(Ñ*Ô*ˆØ×ÒÕ-¨uÔ/CÀUÑKÔKÐKÐKÐKr   )r(   r)   r*   r+   r   rñ   rù   r   r   rð   rè   r@  rE  rG  rL  rO  rQ  r=  r-   r   r   r?  r?    sÝ   € € € € € € ðð ð 59€HÐ1Ð8Ð8Ñ8Ø%)€GˆX�d˜5”kÔ"Ð)Ð)Ñ)Ø,0€N�H˜T %œ[Ô)Ð0Ð0Ñ0Ø,0€N�H˜T %œ[Ô)Ð0Ð0Ñ0ð3ð 3ð 3ð-ð -ð -ð
ð 
ð 
ð'ð 'ð 'ð	)ð 	)ð 	)ðLð Lð Lð Lð Lr   r?  c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚRecvdAttributeMixinzÐ
    Mixin defining tests for string receiving protocols with a C{recvd}
    attribute which should be settable by application code, to be combined with
    L{IntNTestCaseMixin} on a L{TestCase} subclass
    c                 óV   — t          j        |j        t          |¦  «        ¦  «        |z   S )zg
        Return C{data} prefixed with message length in C{protocol.structFormat}
        form.
        )rB  rC  rD  rL   )r   r   r&   s      r   ÚmakeMessagezRecvdAttributeMixin.makeMessagen  s$   € õ
 Œ{˜8Ô0µ#°d±)´)Ñ<Ô<¸tÑCÐCr   c                 ó"  ‡‡— g Š|                       ¦   «         Šˆˆfd„}|‰_        t          j        ‰j        d¦  «        dz   }t          j        ‰j        d¦  «        dz   }‰                     ||z   ¦  «         |                      ‰|g¦  «         dS )z˜
        In stringReceived, recvd contains the remaining data that was passed to
        dataReceived that was not part of the current message.
        c                 ó<   •— ‰                      ‰j        ¦  «         d S r   ©r   Úrecvd)ÚreceivedStringrî   Úresults    €€r   rÛ   zKRecvdAttributeMixin.test_recvdContainsRemainingData.<locals>.stringReceived}  s   ø€ Ø�MŠM˜!œ'Ñ"Ô"Ð"Ð"Ð"r   é   ó   aaaaas   bbbbN)rë   rÛ   rB  rC  rD  rb   rc   )r   rÛ   ÚcompleteMessageÚincompleteMessagerî   r]  s       @@r   Útest_recvdContainsRemainingDataz3RecvdAttributeMixin.test_recvdContainsRemainingDatau  s­   øø€ ð
 ˆØ×ÒÑÔˆð	#ð 	#ð 	#ð 	#ð 	#ð 	#ð *ˆÔÝ œ+ a¤n°aÑ8Ô8¸HÑEˆÝ"œK¨¬¸Ñ:Ô:¸hÑGÐà	�Š�Ð):Ñ:Ñ;Ô;Ð;Ø×Ò˜Ð"3Ð!4Ñ5Ô5Ð5Ð5Ð5r   c                 óD  ‡‡‡	— |                       ¦   «         Šg Š	d}|                      ‰|¦  «        Šˆˆˆ	fd„}|‰_        d}d}|                      ‰|¦  «        }|                      ‰|¦  «        }‰                     ||z   ¦  «         |                      ‰	||g¦  «         dS )zŠ
        In stringReceived, if recvd is changed, messages should be parsed from
        it rather than the input to dataReceived.
        s   cccccc                 óD   •— ‰s‰‰_         ‰                     | ¦  «         d S r   )r[  r   )r\  ÚmessageCrî   r]  s    €€€r   rÛ   z=RecvdAttributeMixin.test_recvdChanged.<locals>.stringReceived‘  s*   ø€ Øð #Ø"�”Ø�MŠM˜.Ñ)Ô)Ð)Ð)Ð)r   r_  s   bbbbbN)rë   rW  rÛ   rb   rc   )
r   ÚpayloadCrÛ   ÚpayloadAÚpayloadBÚmessageAÚmessageBre  rî   r]  s
          @@@r   Útest_recvdChangedz%RecvdAttributeMixin.test_recvdChanged‡  sÐ   øøø€ ð
 ×ÒÑÔˆØˆØˆØ×#Ò# A xÑ0Ô0ˆð	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð
 *ˆÔØˆØˆØ×#Ò# A xÑ0Ô0ˆØ×#Ò# A xÑ0Ô0ˆØ	�Š�x (Ñ*Ñ+Ô+Ð+Ø×Ò˜ (¨HÐ!5Ñ6Ô6Ð6Ð6Ð6r   c                 óÒ  ‡‡‡— |                       ¦   «         Šg }dŠ| j        D ]@}|                     |                      ‰|¦  «        ¦  «         |                     ‰¦  «         ŒAg Šˆˆˆfd„}|‰_        ‰                     d                     |¦  «        ¦  «         ‰                     d¦  «         |                      ‰| j        ¦  «         |                      ‰j        d¦  «         dS )z¹
        Data already parsed by L{IntNStringReceiver.dataReceived} is not
        reparsed if C{stringReceived} consumes some of the
        L{IntNStringReceiver.recvd} buffer.
        s       c                 ót   •— ‰                      | ¦  «         ‰j        t          ‰¦  «        d …         ‰_        d S r   )r   r[  rL   )r\  ÚSWITCHr‘   r]  s    €€€r   rÛ   z:RecvdAttributeMixin.test_switching.<locals>.stringReceived­  s1   ø€ Ø�MŠM˜.Ñ)Ô)Ð)Øœ+¥c¨&¡k¤k m mÔ4ˆEŒKˆKˆKr   r   ó   N)	rë   rù   r   rW  rÛ   rb   r�   rc   r[  )r   Úmixrj   rÛ   rn  r‘   r]  s       @@@r   Útest_switchingz"RecvdAttributeMixin.test_switchingž  s  øøø€ ð × Ò Ñ"Ô"ˆØˆØ$ˆØ”ð 	ð 	ˆAØ�JŠJ�t×'Ò'¨¨qÑ1Ô1Ñ2Ô2Ð2Ø�JŠJ�vÑÔÐÐàˆð	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð  .ˆÔØ×Ò˜3Ÿ8š8 C™=œ=Ñ)Ô)Ð)ð 	×Ò˜7Ñ#Ô#Ð#Ø×Ò˜ ¤Ñ.Ô.Ð.à×Ò˜œ gÑ.Ô.Ð.Ð.Ð.r   c                 ób  ‡‡— |                       ¦   «         Šd}t          |¦  «        dz
  ‰_        |                      ‰|¦  «        }g Šˆˆfd„}|‰_        ‰                     |¦  «         |                      ‰d         t          |¦  «        ¦  «         |                      ‰d         |¦  «         dS )z¾
        The L{IntNStringReceiver.recvd} buffer contains all data not yet
        processed by L{IntNStringReceiver.dataReceived} if the
        C{lengthLimitExceeded} event occurs.
        s   too longr#   c                 óf   •— ‰                      | ¦  «         ‰                      ‰j        ¦  «         d S r   rZ  )rE   r‘   r]  s    €€r   rN  zPRecvdAttributeMixin.test_recvdInLengthLimitExceeded.<locals>.lengthLimitExceededÇ  s/   ø€ Ø�MŠM˜&Ñ!Ô!Ð!Ø�MŠM˜%œ+Ñ&Ô&Ð&Ð&Ð&r   r   N)rë   rL   rO   rW  rN  rb   rc   )r   ÚDATAÚmessagerN  r‘   r]  s       @@r   Útest_recvdInLengthLimitExceededz3RecvdAttributeMixin.test_recvdInLengthLimitExceededº  sÄ   øø€ ð × Ò Ñ"Ô"ˆØˆÝ˜t™9œ9 q™=ˆÔØ×"Ò" 5¨$Ñ/Ô/ˆàˆð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð %8ˆÔ!Ø×Ò˜7Ñ#Ô#Ð#Ø×Ò˜ œ¥C¨¡I¤IÑ.Ô.Ð.Ø×Ò˜ œ GÑ,Ô,Ð,Ð,Ð,r   N)	r(   r)   r*   r+   rW  rb  rk  rq  rv  r-   r   r   rU  rU  g  sl   € € € € € ðð ðDð Dð Dð6ð 6ð 6ð$7ð 7ð 7ð./ð /ð /ð8-ð -ð -ð -ð -r   rU  c                   ó   — e Zd ZdZdS )Ú	TestInt32zƒ
    A L{basic.Int32StringReceiver} storing received strings in an array.

    @ivar received: array holding received strings.
    N©r(   r)   r*   r+   r-   r   r   rx  rx  Ñ  ó   € € € € € ðð ð ð r   rx  c                   ó2   — e Zd ZdZeZddgZdgZg d¢Zd„ Z	dS )Ú
Int32Testsz/
    Test case for int32-prefixed protocol
    rZ   rI  s
      aaaaaa)s      ó   hello therer   c                 ó  — |                       ¦   «         }|                     d¦  «         |                      |j                             ¦   «         d¦  «         |                     d¦  «         |                      |j        dg¦  «         dS )z?
        Test specific behavior of the 32-bits length.
        r‰   s      foos      ubaró   ubarN©rë   rú   rc   rG   rû   rb   r6   rK  s     r   Ú	test_datazInt32Tests.test_dataã  s   € ð ×ÒÑÔˆØ	�Š�VÑÔÐØ×Ò˜œ×*Ò*Ñ,Ô,Ð.DÑEÔEÐEØ	�ŠÐ.Ñ/Ô/Ð/Ø×Ò˜œ g YÑ/Ô/Ð/Ð/Ð/r   N)
r(   r)   r*   r+   rx  r   rù   rè   r@  r�  r-   r   r   r|  r|  Ù  sQ   € € € € € ðð ð €HØ�YÐ€GØ/Ð0€NØ;Ð;Ð;€Nð0ð 0ð 0ð 0ð 0r   r|  c                   ó   — e Zd ZdZdS )Ú	TestInt16zƒ
    A L{basic.Int16StringReceiver} storing received strings in an array.

    @ivar received: array holding received strings.
    Nry  r-   r   r   rƒ  rƒ  î  rz  r   rƒ  c                   ó8   — e Zd ZdZeZddgZdgZg d¢Zd„ Z	d„ Z
dS )	Ú
Int16Testsz/
    Test case for int16-prefixed protocol
    rZ   rI  s    aaaaaa)ó    r}  r   c                 ó  — |                       ¦   «         }|                     d¦  «         |                      |j                             ¦   «         d¦  «         |                     d¦  «         |                      |j        dg¦  «         dS )z?
        Test specific behavior of the 16-bits length.
        r‰   s    foos    ubarr  Nr€  rK  s     r   r�  zInt16Tests.test_data   s}   € ð ×ÒÑÔˆØ	�Š�VÑÔÐØ×Ò˜œ×*Ò*Ñ,Ô,¨nÑ=Ô=Ð=Ø	�Š�Ñ'Ô'Ð'Ø×Ò˜œ g YÑ/Ô/Ð/Ð/Ð/r   c                 ó–   — |                       ¦   «         }dd|j        dz  z  dz   z  }|                      t          |j        |¦  «         dS ©zA
        Send too much data: that should cause an error.
        r#  rÀ   é   r#   N©rë   ÚprefixLengthr®   ÚAssertionErrorrú   ©r   rî   ÚtooSends      r   Útest_tooLongSendzInt16Tests.test_tooLongSend
  óP   € ð ×ÒÑÔˆØ˜! ¤°Ñ 2Ñ3°aÑ7Ñ8ˆØ×Ò�.¨!¬,¸Ñ@Ô@Ð@Ð@Ð@r   N)r(   r)   r*   r+   rƒ  r   rù   rè   r@  r�  r�  r-   r   r   r…  r…  ö  se   € € € € € ðð ð €HØ�YÐ€GØ'Ð(€NØ3Ð3Ð3€Nð0ð 0ð 0ðAð Að Að Að Ar   r…  c                   ó   — e Zd ZdZdS )ÚTestInt8z‚
    A L{basic.Int8StringReceiver} storing received strings in an array.

    @ivar received: array holding received strings.
    Nry  r-   r   r   r“  r“    rz  r   r“  c                   ó8   — e Zd ZdZeZddgZdgZg d¢Zd„ Z	d„ Z
dS )	Ú	Int8Testsz.
    Test case for int8-prefixed protocol
    rZ   rI  s     aaaaaa)ó   s   dzadzr   c                 ó  — |                       ¦   «         }|                     d¦  «         |                      |j                             ¦   «         d¦  «         |                     d¦  «         |                      |j        dg¦  «         dS )z>
        Test specific behavior of the 8-bits length.
        r‰   s   foos   ubarr  Nr€  rK  s     r   r�  zInt8Tests.test_data%  s}   € ð ×ÒÑÔˆØ	�Š�VÑÔÐØ×Ò˜œ×*Ò*Ñ,Ô,¨jÑ9Ô9Ð9Ø	�Š�{Ñ#Ô#Ð#Ø×Ò˜œ g YÑ/Ô/Ð/Ð/Ð/r   c                 ó–   — |                       ¦   «         }dd|j        dz  z  dz   z  }|                      t          |j        |¦  «         dS r‰  r‹  rŽ  s      r   r�  zInt8Tests.test_tooLongSend/  r‘  r   N)r(   r)   r*   r+   r“  r   rù   rè   r@  r�  r�  r-   r   r   r•  r•    se   € € € € € ðð ð €HØ�YÐ€GØ'Ð(€NØ-Ð-Ð-€Nð0ð 0ð 0ðAð Að Að Að Ar   r•  c                   ó2   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	dS )ÚOnlyProducerTransportzm
    Transport which isn't really a transport, just looks like one to
    someone not looking very hard.
    Fc                 ó   — g | _         d S r   r§   r   s    r   r   zOnlyProducerTransport.__init__A  s   € ØˆŒ	ˆ	ˆ	r   c                 ó   — d| _         d S )NT©Úpausedr   s    r   r@   z$OnlyProducerTransport.pauseProducingD  s   € ØˆŒˆˆr   c                 ó   — d| _         d S )NFr�  r   s    r   rB   z%OnlyProducerTransport.resumeProducingG  s   € ØˆŒˆˆr   c                 ó:   — | j                              |¦  «         d S r   )r&   r   )r   rð   s     r   rå   zOnlyProducerTransport.writeJ  s   € ØŒ	×Ò˜ÑÔÐÐÐr   N)
r(   r)   r*   r+   rž  rš   r   r@   rB   rå   r-   r   r   rš  rš  8  sf   € € € € € ðð ð
 €FØ€Mðð ð ðð ð ðð ð ð ð  ð  ð  ð  r   rš  c                   ó   — e Zd ZdZd„ ZdS )ÚConsumingProtocolzC
    Protocol that really, really doesn't want any more bytes.
    c                 ób   — | j                              |¦  «         |                      ¦   «          d S r   )rG   rå   r@   r   s     r   r!   zConsumingProtocol.lineReceivedS  s0   € ØŒ×Ò˜TÑ"Ô"Ð"Ø×ÒÑÔÐÐÐr   N)r(   r)   r*   r+   r!   r-   r   r   r¢  r¢  N  s-   € € € € € ðð ðð ð ð ð r   r¢  c                   ó   — e Zd ZdZd„ ZdS )ÚProducerTestszM
    Tests for L{basic._PausableMixin} and L{basic.LineReceiver.paused}.
    c                 ó¸  — t          ¦   «         }t          ¦   «         }|                     |¦  «         |                     d¦  «         |                      |j        g ¦  «         |                      |j        ¦  «         |                      |j        ¦  «         |                     d¦  «         |                      |j        dg¦  «         |                      |j        ¦  «         |                      |j        ¦  «         | 	                    ¦   «          |                      |j        dg¦  «         |                      |j        ¦  «         |                      |j        ¦  «         |                     d¦  «         |                      |j        ddg¦  «         |                      |j        ¦  «         |                      |j        ¦  «         | 	                    ¦   «          |                      |j        g d¢¦  «         |                      |j        ¦  «         |                      |j        ¦  «         |                     d¦  «         |                      |j        g d¢¦  «         |                      |j        ¦  «         |                      |j        ¦  «         | 	                    ¦   «          |                      |j        g d¢¦  «         |                      |j        ¦  «         |                      |j        ¦  «         | 	                    ¦   «          |                      |j        g d¢¦  «         |                      |j        ¦  «         |                      |j        ¦  «         d	S )
a?  
        When L{basic.LineReceiver} is paused, it doesn't deliver lines to
        L{basic.LineReceiver.lineReceived} and delivers them immediately upon
        being resumed.

        L{ConsumingProtocol} is a L{LineReceiver} that pauses itself after
        every line, and writes that line to its transport.
        s   hello, s   world
ó   hello, worlds   hello
world
rô   )r§  rô   rõ   s	   goodbye
)r§  rô   rõ   r�   N)
r¢  rš  r_   rb   rc   r&   rŸ   rž  r™   rB   )r   Úprg   s      r   Útest_pauseResumezProducerTests.test_pauseResume]  s  € õ ÑÔˆÝ!Ñ#Ô#ˆØ	×Ò˜ÑÔÐð 	
�Š�zÑ"Ô"Ð"Ø×Ò˜œ Ñ$Ô$Ð$Ø×Ò˜œÑ"Ô"Ð"Ø×Ò˜œÑ"Ô"Ð"ð 	
�Š�|Ñ$Ô$Ð$Ø×Ò˜œ /Ð!2Ñ3Ô3Ð3Ø�Š˜œÑ!Ô!Ð!Ø�Š˜œÑ!Ô!Ð!ð 	
×ÒÑÔÐØ×Ò˜œ /Ð!2Ñ3Ô3Ð3Ø×Ò˜œÑ"Ô"Ð"Ø×Ò˜œÑ"Ô"Ð"ð 	
�ŠÐ,Ñ-Ô-Ð-Ø×Ò˜œ /°8Ð!<Ñ=Ô=Ð=Ø�Š˜œÑ!Ô!Ð!Ø�Š˜œÑ!Ô!Ð!ð 	
×ÒÑÔÐØ×Ò˜œÐ!FÐ!FÐ!FÑGÔGÐGØ�Š˜œÑ!Ô!Ð!Ø�Š˜œÑ!Ô!Ð!ð 	
�Š�~Ñ&Ô&Ð&Ø×Ò˜œÐ!FÐ!FÐ!FÑGÔGÐGØ�Š˜œÑ!Ô!Ð!Ø�Š˜œÑ!Ô!Ð!ð 	
×ÒÑÔÐØ×Ò˜œÐ!RÐ!RÐ!RÑSÔSÐSØ�Š˜œÑ!Ô!Ð!Ø�Š˜œÑ!Ô!Ð!ð 	
×ÒÑÔÐØ×Ò˜œÐ!RÐ!RÐ!RÑSÔSÐSØ×Ò˜œÑ"Ô"Ð"Ø×Ò˜œÑ"Ô"Ð"Ð"Ð"r   N)r(   r)   r*   r+   r©  r-   r   r   r¥  r¥  X  s2   € € € € € ðð ðA#ð A#ð A#ð A#ð A#r   r¥  c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚFileSenderTestsz(
    Tests for L{basic.FileSender}.
    c                 ó|   — t          j        ¦   «         }|                      t          t          |¦  «        ¦  «         dS )zP
        L{basic.FileSender} implements the L{IPullProducer} interface.
        N)r   Ú
FileSenderr™   r   r
   )r   Úsenders     r   Útest_interfacezFileSenderTests.test_interface¦  s4   € õ Ô!Ñ#Ô#ˆØ�Š�¥Y°Ñ7Ô7Ñ8Ô8Ð8Ð8Ð8r   c                 ó  — t          d¦  «        }t          j        ¦   «         }t          j        ¦   «         }|                     ||¦  «         |                      |j        |¦  «         |                      |j	        ¦  «         dS )z˜
        When L{basic.FileSender.beginFileTransfer} is called, it registers
        itself with provided consumer, as a non-streaming producer.
        ó   Test contentN)
r   r   r˜   r   r­  ÚbeginFileTransferrc   ÚproducerrŸ   Ú	streaming)r   ÚsourceÚconsumerr®  s       r   Útest_producerRegisteredz'FileSenderTests.test_producerRegistered­  sy   € õ
 ˜Ñ)Ô)ˆÝ Ô0Ñ2Ô2ˆÝÔ!Ñ#Ô#ˆØ× Ò  ¨Ñ2Ô2Ð2Ø×Ò˜Ô*¨FÑ3Ô3Ð3Ø×Ò˜Ô+Ñ,Ô,Ð,Ð,Ð,r   c                 óÂ  — t          d¦  «        }t          j        ¦   «         }t          j        ¦   «         }|                     ||¦  «        }|                     ¦   «          |                     ¦   «          |                      |j        ¦  «         |  	                    d|  
                    |¦  «        ¦  «         |  	                    d|                     ¦   «         ¦  «         dS )zÐ
        L{basic.FileSender} sends the content of the given file using a
        C{IConsumer} interface via C{beginFileTransfer}. It returns a
        L{Deferred} which fires with the last byte sent.
        r±  ó   tN)r   r   r˜   r   r­  r²  rB   ÚassertIsNoner³  rc   ÚsuccessResultOfrû   ©r   rµ  r¶  r®  Úds        r   Útest_transferzFileSenderTests.test_transfer¹  sÇ   € õ ˜Ñ)Ô)ˆÝ Ô0Ñ2Ô2ˆÝÔ!Ñ#Ô#ˆØ×$Ò$ V¨XÑ6Ô6ˆØ×ÒÑ Ô Ð à×ÒÑ Ô Ð Ø×Ò˜(Ô+Ñ,Ô,Ð,à×Ò˜˜t×3Ò3°AÑ6Ô6Ñ7Ô7Ð7Ø×Ò˜¨(¯.ª.Ñ*:Ô*:Ñ;Ô;Ð;Ð;Ð;r   c                 óÜ  — t          d¦  «        }t          j        ¦   «         }t          j        ¦   «         }d|_        |                     ||¦  «        }|                     ¦   «          |                      d| 	                    ¦   «         ¦  «         |                     ¦   «          |                      d| 	                    ¦   «         ¦  «         |                     ¦   «          |                      d| 	                    ¦   «         ¦  «         |                     ¦   «          |                      d|  
                    |¦  «        ¦  «         |                      d| 	                    ¦   «         ¦  «         dS )zj
        L{basic.FileSender} reads at most C{CHUNK_SIZE} every time it resumes
        producing.
        r±  r=   s   Tests   Test conr¹  N)r   r   r˜   r   r­  Ú
CHUNK_SIZEr²  rB   rc   rû   r»  r¼  s        r   Útest_transferMultipleChunksz+FileSenderTests.test_transferMultipleChunksË  s<  € õ
 ˜Ñ)Ô)ˆÝ Ô0Ñ2Ô2ˆÝÔ!Ñ#Ô#ˆØˆÔØ×$Ò$ V¨XÑ6Ô6ˆà×ÒÑ Ô Ð Ø×Ò˜ (§.¢.Ñ"2Ô"2Ñ3Ô3Ð3Ø×ÒÑ Ô Ð Ø×Ò˜ h§n¢nÑ&6Ô&6Ñ7Ô7Ð7Ø×ÒÑ Ô Ð Ø×Ò˜¨(¯.ª.Ñ*:Ô*:Ñ;Ô;Ð;à×ÒÑ Ô Ð à×Ò˜˜t×3Ò3°AÑ6Ô6Ñ7Ô7Ð7Ø×Ò˜¨(¯.ª.Ñ*:Ô*:Ñ;Ô;Ð;Ð;Ð;r   c                 ó–  — d„ }t          d¦  «        }t          j        ¦   «         }t          j        ¦   «         }|                     |||¦  «        }|                     ¦   «          |                     ¦   «          |                      d|                      |¦  «        ¦  «         |                      d| 	                    ¦   «         ¦  «         dS )z�
        L{basic.FileSender.beginFileTransfer} takes a C{transform} argument
        which allows to manipulate the data on the fly.
        c                 ó*   — |                       ¦   «         S r   )Úswapcase)Úchunks    r   Ú	transformz=FileSenderTests.test_transferWithTransform.<locals>.transformè  s   € Ø—>’>Ñ#Ô#Ð#r   r±  ó   Ts   tEST CONTENTN)
r   r   r˜   r   r­  r²  rB   rc   r»  rû   )r   rÆ  rµ  r¶  r®  r½  s         r   Útest_transferWithTransformz*FileSenderTests.test_transferWithTransformâ  sÁ   € ð	$ð 	$ð 	$õ ˜Ñ)Ô)ˆÝ Ô0Ñ2Ô2ˆÝÔ!Ñ#Ô#ˆØ×$Ò$ V¨X°yÑAÔAˆØ×ÒÑ Ô Ð à×ÒÑ Ô Ð à×Ò˜˜t×3Ò3°AÑ6Ô6Ñ7Ô7Ð7Ø×Ò˜¨(¯.ª.Ñ*:Ô*:Ñ;Ô;Ð;Ð;Ð;r   c                 ór  — t          d¦  «        }t          j        ¦   «         }t          j        ¦   «         }|                     ||¦  «        }|                     ¦   «          |                      |¦  «        }|                     t          ¦  «         |  
                    dt          |j        ¦  «        ¦  «         dS )zµ
        The C{Deferred} returned by L{basic.FileSender.beginFileTransfer} fails
        with an C{Exception} if C{stopProducing} when the transfer is not
        complete.
        r±  z#Consumer asked us to stop producingN)r   r   r˜   r   r­  r²  rC   ÚfailureResultOfÚtrapÚ	Exceptionrc   Ústrrû   )r   rµ  r¶  r®  r½  Úfailures         r   Útest_abortedTransferz$FileSenderTests.test_abortedTransferö  s    € õ ˜Ñ)Ô)ˆÝ Ô0Ñ2Ô2ˆÝÔ!Ñ#Ô#ˆØ×$Ò$ V¨XÑ6Ô6ˆà×ÒÑÔÐà×&Ò& qÑ)Ô)ˆØ�Š•YÑÔÐØ×ÒÐ>ÅÀGÄMÑ@RÔ@RÑSÔSÐSÐSÐSr   N)
r(   r)   r*   r+   r¯  r·  r¾  rÁ  rÈ  rÏ  r-   r   r   r«  r«  ¡  s}   € € € € € ðð ð9ð 9ð 9ð
-ð 
-ð 
-ð<ð <ð <ð$<ð <ð <ð.<ð <ð <ð(Tð Tð Tð Tð Tr   r«  );r+   rB  rŽ   Úior   Útypingr   r   r   Úzope.interface.verifyr   Útwisted.internetr   r	   Útwisted.internet.interfacesr
   Útwisted.internet.protocolr   Útwisted.protocolsr   Útwisted.python.compatr   Útwisted.python.failurer   Útwisted.testr   Útwisted.trialr   rŠ   r   r/   rÕ   rR   ÚSynchronousTestCaserW   rµ   r»   rÎ   r×   r<  rã   rç   ró   r?  rU  ÚInt32StringReceiverrx  r|  ÚInt16StringReceiverrƒ  r…  ÚInt8StringReceiverr“  r•  rš  r¢  r¥  ÚTestCaser«  r-   r   r   ú<module>rà     s™  ððð ð
 €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à .Ð .Ð .Ð .Ð .Ð .à +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø #Ð #Ð #Ð #Ð #Ð #Ø +Ð +Ð +Ð +Ð +Ð +Ø *Ð *Ð *Ð *Ð *Ð *Ø &Ð &Ð &Ð &Ð &Ð &Ø "Ð "Ð "Ð "Ð "Ð "ð#ð #ð #ð #ð #˜Ô+ñ #ô #ð #ð0E:ð E:ð E:ð E:ð E:�Ô#ñ E:ô E:ð E:ðP#ð #ð #ð #ð #�UÔ+ñ #ô #ð #ð*uJð uJð uJð uJð uJ˜Ô4ñ uJô uJð uJðp$ð $ð $ð $ð $ %Ô"4ñ $ô $ð $ð.L1ð L1ð L1ð L1ð L1¨(Ô*Fñ L1ô L1ð L1ð^)Jð )Jð )Jð )Jð )J˜HÔ8ñ )Jô )Jð )JðXð ð ð ð ñ ô ð ð ð  ð  ð  ð  �I˜uÔ6ñ  ô  ð  ð7ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ð2ULð ULð ULð ULð UL˜XÔ9¸?ñ ULô ULð ULðpFLð FLð FLð FLð FL˜ñ FLô FLð FLðRg-ð g-ð g-ð g-ð g-ñ g-ô g-ð g-ðTð ð ð ð �	˜5Ô4ñ ô ð ð0ð 0ð 0ð 0ð 0�Ô-Ð/@ÐBUñ 0ô 0ð 0ð*ð ð ð ð �	˜5Ô4ñ ô ð ðAð Að Að Að A�Ô-Ð/@ÐBUñ Aô Að Að:ð ð ð ð ˆy˜%Ô2ñ ô ð ðAð Að Að Að A�Ô,Ð.?ÐATñ Aô Að Að: ð  ð  ð  ð  ñ  ô  ð  ð,ð ð ð ð ˜Ô*ñ ô ð ðF#ð F#ð F#ð F#ð F#�HÔ0ñ F#ô F#ð F#ðRdTð dTð dTð dTð dT�hÔ'ñ dTô dTð dTð dTð dTr   