§
    Ètºfb  ã                   óŠ  — d Z ddlZddl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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 ddlmZmZ  ed¦  «        Z eej        ¦  «        Zej                              ej!        ¦  «        ed<    G d„ de¦  «        Z"ddlm#Z# ddlm$Z$ ddl%m&Z&  G d„ dej'        ¦  «        Z(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1ddl	m2Z2 	 dd l3m4Z4m5Z5m6Z6m7Z7m8Z8 dd!l9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d"Z@ G d#„ d$e:jA        ¦  «        ZB G d%„ d&e;jC        ¦  «        ZD G d'„ d(e?jE        ¦  «        ZF G d)„ d*e>jG        ¦  «        ZH G d+„ d,e7¦  «        ZI G d-„ d.e6¦  «        ZJ G d/„ d0e8¦  «        ZK ejL        eJeKe=jM        ¦  «         n# eN$ r d1Z@Y nw xY w G d2„ d3e$jO        ¦  «        ZP G d4„ d5¦  «        ZQ G d6„ d7eQ¦  «        ZRdd8lSmTZT  G d9„ d:ejU        eTjV        ¦  «        ZW G d;„ d<ejX        eTjV        ¦  «        ZY G d=„ d>eQ¦  «        ZZ G d?„ d@eQ¦  «        Z[ G dA„ dB¦  «        Z\ G dC„ dDeZee\¦  «        Z] G dE„ dFeRee\¦  «        Z^ ee dG¦  «         G dH„ dIe[ee\¦  «        ¦   «         Z_ G dJ„ dK¦  «        Z` G dL„ dMeZee`¦  «        Za G dN„ dOeRee`¦  «        Zb ee dP¦  «         G dQ„ dRe[ee`¦  «        ¦   «         Zc G dS„ dTe¦  «        ZddS )UzU
Tests for L{twisted.conch.recvline} and fixtures for testing related
functionality.
é    N)ÚskipIf)Úrecvline)Úinsults)Úportal)ÚdeferÚerror)ÚStringTransport)Ú
componentsÚfilepathÚreflect)Ú	iterbytes)ÚrequireModule)ÚSkipTestÚTestCaseztwisted.conch.stdioÚ
PYTHONPATHc                   óV   — 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S )ÚArrowsTestsc                 ó  ‡ — t          ¦   «         ‰ _        t          j        ¦   «         ‰ _        t          j        ¦   «         ‰ _        ˆ fd„‰ j        _        ‰ ‰ j        _	        ‰ j         
                    ‰ j        ¦  «         d S )Nc                  ó   •— ‰ j         S ©N)Úp©Úselfs   €ú_/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/conch/test/test_recvline.pyú<lambda>z#ArrowsTests.setUp.<locals>.<lambda>"   s	   ø€ ¨$¬&€ ó    )r	   ÚunderlyingTransportr   ÚServerProtocolÚptr   ÚHistoricRecvLiner   ÚprotocolFactoryÚfactoryÚmakeConnectionr   s   `r   ÚsetUpzArrowsTests.setUp   si   ø€ Ý#2Ñ#4Ô#4ˆÔ ÝÔ(Ñ*Ô*ˆŒÝÔ*Ñ,Ô,ˆŒØ"0 . . .ˆŒÔØˆŒŒØŒ×Ò˜tÔ7Ñ8Ô8Ð8Ð8Ð8r   c                 ó  — | j                              dd¦  «         | j                              dd¦  «         | j                              dd¦  «         |                      | j                              ¦   «         d¦  «         dS )zy
        When L{HistoricRecvLine} receives a printable character,
        it adds it to the current line buffer.
        ó   xNó   yó   z©ó   xyzr   )r   ÚkeystrokeReceivedÚassertEqualÚcurrentLineBufferr   s    r   Útest_printableCharactersz$ArrowsTests.test_printableCharacters&   sv   € ð
 	Œ× Ò   tÑ,Ô,Ð,ØŒ× Ò   tÑ,Ô,Ð,ØŒ× Ò   tÑ,Ô,Ð,à×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCÐCÐCr   c                 óJ  ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «         dS )zµ
        When L{HistoricRecvLine} receives a LEFT_ARROW or
        RIGHT_ARROW keystroke it moves the cursor left or right
        in the current line buffer, respectively.
        c                 ó:   •— ‰j                              | d ¦  «        S r   ©r   r+   ©Úchr   s    €r   r   z3ArrowsTests.test_horizontalArrows.<locals>.<lambda>7   ó   ø€ ˜œ×0Ò0°°TÑ:Ô:€ r   r*   r)   )ó   xyr(   )r&   s   yz)r   r*   N)r   r,   r   r-   r   ÚRIGHT_ARROWÚ
LEFT_ARROW©r   ÚkRr3   s   `  r   Útest_horizontalArrowsz!ArrowsTests.test_horizontalArrows1   sd  ø€ ð ;Ð:Ð:Ð:ˆÝ˜FÑ#Ô#ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFà×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCÐCÐCr   c                 ó²  ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ‰                      ‰ j                             ¦   «         d¦  «          |d¦  «          |d¦  «          |d¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |d¦  «         ‰                      ‰ j                             ¦   «         d¦  «         d	S )
z‡
        When {HistoricRecvLine} receives a newline, it adds the current
        line buffer to the end of its history buffer.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z*ArrowsTests.test_newline.<locals>.<lambda>]   r4   r   ó   xyz
abc
123
©©r*   ó   abcó   123© ó   có   bó   aó   
))r*   r@   rA   s   cbarB   N)r   r,   r   ÚcurrentHistoryBufferr8   s   `  r   Útest_newlinezArrowsTests.test_newlineX   sî   ø€ ð
 ;Ð:Ð:Ð:ˆåÐ.Ñ/Ô/ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFà×Ò˜œ×4Ò4Ñ6Ô6Ð8VÑWÔWÐWà
ˆˆ4‰ŒˆØ
ˆˆ4‰ŒˆØ
ˆˆ4‰ŒˆØ×Ò˜œ×4Ò4Ñ6Ô6Ð8VÑWÔWÐWà
ˆˆ5‰	Œ	ˆ	Ø×ÒØŒF×'Ò'Ñ)Ô)Ð+Qñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó   ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ‰                      ‰ j                             ¦   «         d¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d	¦  «         ‰                      ‰ j                             ¦   «         d
¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d	¦  «         ‰                      ‰ j                             ¦   «         d
¦  «         t          d¦  «        D ]} |‰ j        j        ¦  «         Œ‰                      ‰ j                             ¦   «         d¦  «         dS )a  
        When L{HistoricRecvLine} receives UP_ARROW or DOWN_ARROW
        keystrokes it move the current index in the current history
        buffer up or down, and resets the current line buffer to the
        previous or next line in history, respectively for each.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z1ArrowsTests.test_verticalArrows.<locals>.<lambda>u   r4   r   r=   r>   ©r   r   ))r*   r@   )rA   )rA   r   ))r*   )r@   rA   )r@   r   )rB   r?   r)   é   N)	r   r,   r   rG   r-   r   ÚUP_ARROWÚrangeÚ
DOWN_ARROW)r   r9   r3   Úis   `   r   Útest_verticalArrowszArrowsTests.test_verticalArrowsn   sS  ø€ ð ;Ð:Ð:Ð:ˆåÐ.Ñ/Ô/ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFà×Ò˜œ×4Ò4Ñ6Ô6Ð8VÑWÔWÐWØ×Ò˜œ×1Ò1Ñ3Ô3°ZÑ@Ô@Ð@à
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×4Ò4Ñ6Ô6Ð8UÑVÔVÐVØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×4Ò4Ñ6Ô6Ð8UÑVÔVÐVØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×4Ò4Ñ6Ô6Ð8VÑWÔWÐWØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×4Ò4Ñ6Ô6Ð8VÑWÔWÐWØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCå�q‘”ð 	#ð 	#ˆAØˆBˆtŒwÔ!Ñ"Ô"Ð"Ð"Ø×Ò˜œ×4Ò4Ñ6Ô6Ð8VÑWÔWÐWÐWÐWr   c                 ó*  ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «         dS )z�
        When L{HistoricRecvLine} receives a HOME keystroke it moves the
        cursor to the beginning of the current line buffer.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z'ArrowsTests.test_home.<locals>.<lambda>–   r4   r   ó   hello, world©rT   r   )r   rT   N)r   r,   r   r-   r   ÚHOMEr8   s   `  r   Ú	test_homezArrowsTests.test_home‘   s�   ø€ ð
 ;Ð:Ð:Ð:ˆå˜OÑ,Ô,ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFØ×Ò˜œ×1Ò1Ñ3Ô3Ð5KÑLÔLÐLà
ˆˆ4Œ7Œ<ÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3Ð5KÑLÔLÐLÐLÐLr   c                 óT  ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «         dS )z‡
        When L{HistoricRecvLine} receives an END keystroke it moves the cursor
        to the end of the current line buffer.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z&ArrowsTests.test_end.<locals>.<lambda>¤   r4   r   rT   rU   N)r   r,   r   r-   r   rV   ÚENDr8   s   `  r   Útest_endzArrowsTests.test_endŸ   s®   ø€ ð
 ;Ð:Ð:Ð:ˆå˜OÑ,Ô,ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFØ×Ò˜œ×1Ò1Ñ3Ô3Ð5KÑLÔLÐLà
ˆˆ4Œ7Œ<ÑÔÐØ
ˆˆ4Œ7Œ;‰ŒˆØ×Ò˜œ×1Ò1Ñ3Ô3Ð5KÑLÔLÐLÐLÐLr   c                 ó\  ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «         dS )z‰
        When L{HistoricRecvLine} receives a BACKSPACE keystroke it deletes
        the character immediately before the cursor.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z,ArrowsTests.test_backspace.<locals>.<lambda>³   r4   r   r*   r)   ©r5   r   )r   r'   N)r   r,   r   r-   r   Ú	BACKSPACEr7   r8   s   `  r   Útest_backspacezArrowsTests.test_backspace®   s#  ø€ ð
 ;Ð:Ð:Ð:ˆå˜FÑ#Ô#ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°\ÑBÔBÐBà
ˆˆ4Œ7ÔÑÔÐØ
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°[ÑAÔAÐAà
ˆˆ4Œ7ÔÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°[ÑAÔAÐAÐAÐAr   c                 ó¸  ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «         ‰                      ‰ j                             ¦   «         d¦  «         dS )z…
        When L{HistoricRecvLine} receives a DELETE keystroke, it
        delets the character immediately after the cursor.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z)ArrowsTests.test_delete.<locals>.<lambda>È   r4   r   r*   r)   r^   )r&   r   rK   N)r   r,   r   r-   r   ÚDELETEr7   r8   s   `  r   Útest_deletezArrowsTests.test_deleteÃ   sº  ø€ ð
 ;Ð:Ð:Ð:ˆå˜FÑ#Ô#ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7Œ>ÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ
ˆˆ4Œ7Œ>ÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°\ÑBÔBÐBà
ˆˆ4Œ7ÔÑÔÐØ
ˆˆ4Œ7Œ>ÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°[ÑAÔAÐAà
ˆˆ4Œ7ÔÑÔÐØ
ˆˆ4Œ7Œ>ÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°ZÑ@Ô@Ð@à
ˆˆ4Œ7Œ>ÑÔÐØ×Ò˜œ×1Ò1Ñ3Ô3°ZÑ@Ô@Ð@Ð@Ð@r   c                 ó€  ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ |‰ j        j        ¦  «          |d¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «          |d¦  «         ‰                      ‰ j                             ¦   «         d¦  «         dS )z‹
        When not in INSERT mode, L{HistoricRecvLine} inserts the typed
        character at the cursor before the next character.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z)ArrowsTests.test_insert.<locals>.<lambda>å   r4   r   r*   ó   A)ó   xyAr(   ó   B)ó   xyBs   AzN)r   r   r7   r,   r   r-   r8   s   `  r   Útest_insertzArrowsTests.test_insertà   sË   ø€ ð
 ;Ð:Ð:Ð:ˆå˜FÑ#Ô#ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFà
ˆˆ4Œ7ÔÑÔÐØ
ˆˆ4‰ŒˆØ×Ò˜œ×1Ò1Ñ3Ô3°^ÑDÔDÐDà
ˆˆ4Œ7ÔÑÔÐØ
ˆˆ4‰ŒˆØ×Ò˜œ×1Ò1Ñ3Ô3°_ÑEÔEÐEÐEÐEr   c                 óª  ‡ — ˆ fd„}t          d¦  «        D ]} ||¦  «         Œ |‰ j        j        ¦  «          |‰ j        j        ¦  «          |d¦  «         ‰                      ‰ j                             ¦   «         d¦  «          |‰ j        j        ¦  «          |d¦  «         ‰                      ‰ j                             ¦   «         d¦  «         dS )a  
        When in INSERT mode and upon receiving a keystroke with a printable
        character, L{HistoricRecvLine} replaces the character at
        the cursor with the typed character rather than inserting before.
        Ah, the ironies of INSERT mode.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z+ArrowsTests.test_typeover.<locals>.<lambda>ù   r4   r   r*   rg   )rh   r   ri   )rj   r   N)r   r   ÚINSERTr7   r,   r   r-   r8   s   `  r   Útest_typeoverzArrowsTests.test_typeoverò   sß   ø€ ð ;Ð:Ð:Ð:ˆå˜FÑ#Ô#ð 	ð 	ˆBØˆBˆr‰FŒFˆFˆFà
ˆˆ4Œ7Œ>ÑÔÐà
ˆˆ4Œ7ÔÑÔÐØ
ˆˆ4‰ŒˆØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCà
ˆˆ4Œ7ÔÑÔÐØ
ˆˆ4‰ŒˆØ×Ò˜œ×1Ò1Ñ3Ô3°]ÑCÔCÐCÐCÐCr   c                 óB  ‡ — ˆ fd„}‰ j         }|j        |j        |j        |j        |j        |j        |j        |j        |j	        |j
        |j        |j        |j        |j        fD ]:} ||¦  «         ‰                      ‰ j                             ¦   «         d¦  «         Œ;dS )z¡
        When L{HistoricRecvLine} receives a keystroke for an unprintable
        function key with no assigned behavior, the line buffer is unmodified.
        c                 ó:   •— ‰j                              | d ¦  «        S r   r1   r2   s    €r   r   z8ArrowsTests.test_unprintableCharacters.<locals>.<lambda>  r4   r   rK   N)r   ÚF1ÚF2ÚF3ÚF4ÚF5ÚF6ÚF7ÚF8ÚF9ÚF10ÚF11ÚF12ÚPGUPÚPGDNr,   r   r-   )r   r9   r   r3   s   `   r   Útest_unprintableCharactersz&ArrowsTests.test_unprintableCharacters  s·   ø€ ð
 ;Ð:Ð:Ð:ˆØŒWˆð ŒEØŒEØŒEØŒEØŒEØŒEØŒEØŒEØŒEØŒFØŒFØŒFØŒGØŒGð
ð 	Eð 	EˆBð  ˆBˆr‰FŒFˆFØ×Ò˜TœV×5Ò5Ñ7Ô7¸ÑDÔDÐDÐDð#	Eð 	Er   N)Ú__name__Ú
__module__Ú__qualname__r$   r.   r:   rH   rQ   rW   r[   r`   rd   rk   ro   r€   rB   r   r   r   r      sê   € € € € € ð9ð 9ð 9ð	Dð 	Dð 	Dð%Dð %Dð %DðN
ð 
ð 
ð,!Xð !Xð !XðFMð Mð MðMð Mð MðBð Bð Bð*Að Að Að:Fð Fð Fð$Dð Dð Dð,Eð Eð Eð Eð Er   r   )Útelnet)Úhelper)ÚLoopbackRelayc                   ó   — e Zd Zd„ ZdS )Ú
EchoServerc                 óf   — | j                              |dz   | j        | j                 z   ¦  «         d S )NrF   )ÚterminalÚwriteÚpsÚpn)r   Úlines     r   ÚlineReceivedzEchoServer.lineReceived*  s0   € ØŒ×Ò˜D 5™L¨4¬7°4´7Ô+;Ñ;Ñ<Ô<Ð<Ð<Ð<r   N)r�   r‚   rƒ   r�   rB   r   r   rˆ   rˆ   )  s#   € € € € € ð=ð =ð =ð =ð =r   rˆ   s   [Ds   [Cs   [As   [Bs   [2~s   [1~s   [3~s   [4~ó   )Úcheckers)ÚConchFactoryÚTerminalRealmÚTerminalSessionÚTerminalSessionTransportÚTerminalUser)ÚchannelÚ
connectionÚkeysÚsessionÚ	transportÚuserauthTc                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚSessionChannels   sessionc                 ó€   — t          j        j        | g|¢R i |¤Ž || _        || _        || _        || _        || _        d S r   )r—   Ú
SSHChannelÚ__init__r!   ÚprotocolArgsÚprotocolKwArgsÚwidthÚheight©r   r!   r¢   r£   r¤   r¥   ÚaÚkws           r   r¡   zSessionChannel.__init__S  sR   € õ ÔÔ'¨Ð7¨qÐ7Ð7Ð7°BÐ7Ð7Ð7à#2ˆDÔ Ø ,ˆDÔØ"0ˆDÔàˆDŒJØ ˆDŒKˆKˆKr   c                 óB  — t          j        d| j        | j        ddfd¦  «        }| j                             | d|¦  «         | j                             | dd¦  «          | j        | j        i | j        ¤Ž| _	        | | j	        _
        | j	                             | ¦  «         d S )Ns   vt102r   r   s   pty-reqs   shell)rš   ÚpackRequest_pty_reqr¥   r¤   ÚconnÚsendRequestr!   r¢   r£   Ú_protocolInstancer"   r#   )r   ÚdataÚterms      r   ÚchannelOpenzSessionChannel.channelOpen_  s°   € ÝÔ.Ø˜4œ;¨¬
°A°qÐ9¸3ñô ˆDð ŒI×!Ò! $¨
°DÑ9Ô9Ð9ØŒI×!Ò! $¨°#Ñ6Ô6Ð6à%9 TÔ%9ØÔ"ð&Ø&*Ô&9ð&ð &ˆDÔ"ð .2ˆDÔ"Ô*ØÔ"×1Ò1°$Ñ7Ô7Ð7Ð7Ð7r   c                 ó\   — | j                              t          j        ¦   «         ¦  «         d S r   )r­   ÚconnectionLostr   ÚConnectionDoner   s    r   ÚclosedzSessionChannel.closedl  s(   € ØÔ"×1Ò1µ%Ô2FÑ2HÔ2HÑIÔIÐIÐIÐIr   c                 ó:   — | j                              |¦  «         d S r   )r­   ÚdataReceived©r   r®   s     r   r¶   zSessionChannel.dataReceivedo  s   € ØÔ"×/Ò/°Ñ5Ô5Ð5Ð5Ð5r   N)r�   r‚   rƒ   Únamer¡   r°   r´   r¶   rB   r   r   rž   rž   P  sX   € € € € € Øˆð
	!ð 
	!ð 
	!ð	8ð 	8ð 	8ð	Jð 	Jð 	Jð	6ð 	6ð 	6ð 	6ð 	6r   rž   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚTestConnectionc                 ó€   — t          j        j        | g|¢R i |¤Ž || _        || _        || _        || _        || _        d S r   )r˜   ÚSSHConnectionr¡   r!   r¢   r£   r¤   r¥   r¦   s           r   r¡   zTestConnection.__init__s  sR   € õ Ô$Ô-¨dÐ=°QÐ=Ð=Ð=¸"Ð=Ð=Ð=à#2ˆDÔ Ø ,ˆDÔØ"0ˆDÔàˆDŒJØ ˆDŒKˆKˆKr   c                 óœ   — t          | j        | j        | j        | j        | j        ¦  «        | _        |                      | j        ¦  «         d S r   )rž   r!   r¢   r£   r¤   r¥   Ú_TestConnection__channelÚopenChannelr   s    r   ÚserviceStartedzTestConnection.serviceStarted  sM   € Ý+ØÔ$ØÔ!ØÔ#Ø”
Ø”ñô ˆDŒNð ×Ò˜Tœ^Ñ,Ô,Ð,Ð,Ð,r   c                 ó6   — | j                              |¦  «        S r   )r¾   r‹   r·   s     r   r‹   zTestConnection.write‰  s   € Ø”>×'Ò'¨Ñ-Ô-Ð-r   N)r�   r‚   rƒ   r¡   rÀ   r‹   rB   r   r   rº   rº   r  sA   € € € € € ð
	!ð 
	!ð 
	!ð	-ð 	-ð 	-ð	.ð 	.ð 	.ð 	.ð 	.r   rº   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestAuthc                 óJ   — t          j        j        | |g|¢R i |¤Ž || _        d S r   )rœ   ÚSSHUserAuthClientr¡   Úpassword)r   ÚusernamerÆ   r§   r¨   s        r   r¡   zTestAuth.__init__�  s3   € ÝÔ&Ô/°°hÐIÀÐIÐIÐIÀbÐIÐIÐIØ$ˆDŒMˆMˆMr   c                 ó4   — t          j        | j        ¦  «        S r   )r   ÚsucceedrÆ   r   s    r   ÚgetPasswordzTestAuth.getPassword‘  s   € Ý”= ¤Ñ/Ô/Ð/r   N)r�   r‚   rƒ   r¡   rÊ   rB   r   r   rÃ   rÃ   Œ  s2   € € € € € ð	%ð 	%ð 	%ð	0ð 	0ð 	0ð 	0ð 	0r   rÃ   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestTransportc                 óh   — || _         || _        || _        || _        || _        || _        || _        d S r   )r!   r¢   r£   rÇ   rÆ   r¤   r¥   )
r   r!   r¢   r£   rÇ   rÆ   r¤   r¥   r§   r¨   s
             r   r¡   zTestTransport.__init__•  s<   € ð $3ˆDÔ Ø ,ˆDÔØ"0ˆDÔØ$ˆDŒMØ$ˆDŒMØˆDŒJØ ˆDŒKˆKˆKr   c                 ó*   — t          j        d¦  «        S )NT)r   rÉ   )r   ÚhostKeyÚfingerprints      r   ÚverifyHostKeyzTestTransport.verifyHostKey©  s   € Ý”= Ñ&Ô&Ð&r   c                 óÎ   — t          | j        | j        | j        | j        | j        ¦  «        | _        |                      t          | j	        | j
        | j        ¦  «        ¦  «         d S r   )rº   r!   r¢   r£   r¤   r¥   Ú_TestTransport__connectionÚrequestServicerÃ   rÇ   rÆ   r   s    r   ÚconnectionSecurezTestTransport.connectionSecure¬  sj   € Ý .ØÔ$ØÔ!ØÔ#Ø”
Ø”ñ!ô !ˆDÔð ×ÒÝ˜œ¨¬°tÔ7HÑIÔIñô ð ð ð r   c                 ó6   — | j                              |¦  «        S r   )rÓ   r‹   r·   s     r   r‹   zTestTransport.write¸  s   € ØÔ$×*Ò*¨4Ñ0Ô0Ð0r   N)r�   r‚   rƒ   r¡   rÑ   rÕ   r‹   rB   r   r   rÌ   rÌ   ”  sP   € € € € € ð	!ð 	!ð 	!ð(	'ð 	'ð 	'ð
	ð 
	ð 
	ð	1ð 	1ð 	1ð 	1ð 	1r   rÌ   c                   ó   — e Zd Zd„ ZdS )ÚTestSessionTransportc                 óR   — | j         j        j        j                             ¦   «         S r   )Úavatarr«   r›   r"   ÚserverProtocolr   s    r   r!   z$TestSessionTransport.protocolFactory¼  s   € Ø”;Ô#Ô-Ô5×DÒDÑFÔFÐFr   N)r�   r‚   rƒ   r!   rB   r   r   rØ   rØ   »  s(   € € € € € ð	Gð 	Gð 	Gð 	Gð 	Gr   rØ   c                   ó   — e Zd ZeZdS )ÚTestSessionN)r�   r‚   rƒ   rØ   ÚtransportFactoryrB   r   r   rÝ   rÝ   ¿  s   € € € € € Ø/ÐÐÐr   rÝ   c                   ó   — e Zd ZdS )ÚTestUserN©r�   r‚   rƒ   rB   r   r   rà   rà   Â  s   € € € € € Øˆr   rà   Fc                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚNotifyingExpectableBufferc                 óf   — t          j        ¦   «         | _        t          j        ¦   «         | _        d S r   )r   ÚDeferredÚonConnectionÚonDisconnectionr   s    r   r¡   z"NotifyingExpectableBuffer.__init__É  s(   € Ý!œNÑ,Ô,ˆÔÝ$œ~Ñ/Ô/ˆÔÐÐr   c                 óx   — t           j                             | ¦  «         | j                             | ¦  «         d S r   )r…   ÚExpectableBufferÚconnectionMaderæ   Úcallbackr   s    r   rê   z(NotifyingExpectableBuffer.connectionMadeÍ  s6   € ÝÔ×.Ò.¨tÑ4Ô4Ð4ØÔ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r   c                 ó:   — | j                              |¦  «         d S r   )rç   Úerrback)r   Úreasons     r   r²   z(NotifyingExpectableBuffer.connectionLostÑ  s   € ØÔ×$Ò$ VÑ,Ô,Ð,Ð,Ð,r   N)r�   r‚   rƒ   r¡   rê   r²   rB   r   r   rã   rã   È  sA   € € € € € ð0ð 0ð 0ð)ð )ð )ð-ð -ð -ð -ð -r   rã   c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )Ú
_BaseMixinéP   é   c                 óÊ   — | j                              ¦   «                              ¦   «         }|dg| j        t	          |¦  «        z
  dz
  z  z   }|                      ||¦  «         d S )Nr   é   )ÚrecvlineClientÚ	__bytes__Ú
splitlinesÚHEIGHTÚlenr,   )r   ÚlinesÚreceivedLinesÚexpectedLiness       r   Ú_assertBufferz_BaseMixin._assertBufferÙ  sa   € ØÔ+×5Ò5Ñ7Ô7×BÒBÑDÔDˆØ # ¨$¬+½¸E¹
¼
Ñ*BÀQÑ*FÑ!GÑHˆØ×Ò˜¨Ñ6Ô6Ð6Ð6Ð6r   c                 óš   ‡ ‡— ‰ j                              d¦  «        }‰                      |¦  «         ˆˆ fd„}|                     |¦  «        S )Ns   donec                 ó2   •— ‰                      ‰¦  «         d S r   )rý   )ÚignÚoutputr   s    €€r   Úfinishedz)_BaseMixin._trivialTest.<locals>.finishedã  s   ø€ Ø×Ò˜vÑ&Ô&Ð&Ð&Ð&r   )rõ   ÚexpectÚ
_testwriteÚaddCallback)r   Ú	inputLiner  Údoner  s   ` `  r   Ú_trivialTestz_BaseMixin._trivialTestÞ  s`   øø€ ØÔ"×)Ò)¨'Ñ2Ô2ˆà�Š˜	Ñ"Ô"Ð"ð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð ×Ò Ñ)Ô)Ð)r   N)r�   r‚   rƒ   ÚWIDTHrø   rý   r  rB   r   r   rð   rð   Õ  s<   € € € € € Ø€EØ€Fð7ð 7ð 7ð
*ð *ð *ð *ð *r   rð   c                   ó   — e Zd Zd„ Zd„ ZdS )Ú	_SSHMixinc           	      ó  ‡‡‡‡— t           st          d¦  «        ‚d\  }}t          ¦   «         }t          |_        ˆfd„|_        t          j        ¦   «         }|                     ||¦  «         t          j
        |¦  «        }|                     |¦  «         t          |¦  «        }t          j        t          j        |                      ¦   «         ¦  «        d¬¦  «        }||j        d<   ||j        d<   | j        |_        |                     ¦   «          |                      ¦   «         Št-          j        ˆfd„¦  «        Š|                     d ¦  «        }t3          |¦  «        }	t5          ¦   «         Št-          j        ˆfd„¦  «        Št9          ˆfd	„d
i ||| j        | j        ¦  «        }
t3          |
¦  «        }|
                     |	¦  «         |                     |¦  «         ‰| _         |
| _!        || _"        |	| _#        || _$        ‰j%        S )NzMcryptography requirements missing, can't run historic recvline tests over ssh)s   testusers   testpassc                  ó   •— ‰ S r   rB   ©ÚinsultsServers   €r   r   z!_SSHMixin.setUp.<locals>.<lambda>ô  s   ø€ ¨]€ r   i   )ÚkeySizes   ssh-rsac                  ó   •— ‰ S r   rB   ©ÚrecvlineServers   €r   r   z!_SSHMixin.setUp.<locals>.<lambda>  ó   ø€ °~€ r   c                  ó   •— ‰ S r   rB   ©rõ   s   €r   r   z!_SSHMixin.setUp.<locals>.<lambda>  r  r   c                  ó   •— ‰ S r   rB   ©ÚinsultsClients   €r   r   z!_SSHMixin.setUp.<locals>.<lambda>  s   ø€ �M€ r   rB   )&Ússhr   r“   rà   ÚuserFactoryÚchainedProtocolFactoryr‘   Ú'InMemoryUsernamePasswordDatabaseDontUseÚaddUserr   ÚPortalÚregisterCheckerr’   r™   Ú_getPersistentRSAKeyr   ÚFilePathÚmktempÚ
publicKeysÚprivateKeysrÛ   ÚstartFactoryr   r   ÚbuildProtocolr†   rã   ÚClientProtocolrÌ   r	  rø   r#   rõ   Ú	sshClientÚ	sshServerÚclientTransportÚserverTransportræ   )r   Úur   ÚrlmÚcheckerÚptlÚ
sshFactoryÚsshKeyr*  r+  r)  r,  r  r  rõ   r  s               @@@@r   r$   z_SSHMixin.setUpê  s  øøøø€ Ýð 	Ýð*ñô ð ð
 (‰ˆˆ1Ý‰oŒoˆÝ"ˆŒØ%:Ð%:Ð%:Ð%:ˆÔ"åÔBÑDÔDˆØ�Š˜˜1ÑÔÐÝŒm˜CÑ Ô ˆØ×Ò˜GÑ$Ô$Ð$Ý! #Ñ&Ô&ˆ
åÔ*ÝÔ˜dŸkšk™mœmÑ,Ô,°dð
ñ 
ô 
ˆð -3ˆ
Ô˜jÑ)Ø-3ˆ
Ô˜zÑ*à$(Ô$7ˆ
Ô!Ø×ÒÑ!Ô!Ð!à×,Ò,Ñ.Ô.ˆÝÔ.Ð/EÐ/EÐ/EÐ/EÑFÔFˆØ×,Ò,¨TÑ2Ô2ˆ	Ý'¨	Ñ2Ô2ˆå2Ñ4Ô4ˆÝÔ.Ð/EÐ/EÐ/EÐ/EÑFÔFˆÝ!Ø!Ð!Ð!Ð! 2 r¨1¨a°´¸T¼[ñ
ô 
ˆ	õ (¨	Ñ2Ô2ˆà× Ò  Ñ1Ô1Ð1Ø× Ò  Ñ1Ô1Ð1à,ˆÔØ"ˆŒØ"ˆŒØ.ˆÔØ.ˆÔàÔ*Ð*r   c                 ó:   — | j                              |¦  «         d S r   )r)  r‹   r·   s     r   r  z_SSHMixin._testwrite  s   € ØŒ×Ò˜TÑ"Ô"Ð"Ð"Ð"r   N©r�   r‚   rƒ   r$   r  rB   r   r   r  r  é  s3   € € € € € ð0+ð 0+ð 0+ðd#ð #ð #ð #ð #r   r  )Útest_telnetc                   ó   — e Zd ZdS )ÚTestInsultsClientProtocolNrá   rB   r   r   r7  r7  #  ó   € € € € € Ø€Dr   r7  c                   ó   — e Zd ZdS )ÚTestInsultsServerProtocolNrá   rB   r   r   r:  r:  '  r8  r   r:  c                   ó   — e Zd Zd„ Zd„ ZdS )Ú_TelnetMixinc                 ó  ‡‡‡‡— |                       ¦   «         Št          ˆfd„¦  «        Št          j        ˆfd„¦  «        }t	          |¦  «        }t          ¦   «         Št          ˆfd„¦  «        Št          j        ˆfd„¦  «        }t	          |¦  «        }|                     |¦  «         |                     |¦  «         |                     ¦   «          |                     ¦   «          ‰| _	        || _
        || _        || _        ‰j        S )Nc                  ó   •— ‰ S r   rB   r  s   €r   r   z$_TelnetMixin.setUp.<locals>.<lambda>.  ó   ø€ ¸.€ r   c                  ó   •— ‰ S r   rB   r  s   €r   r   z$_TelnetMixin.setUp.<locals>.<lambda>/  ó   ø€ °m€ r   c                  ó   •— ‰ S r   rB   r  s   €r   r   z$_TelnetMixin.setUp.<locals>.<lambda>3  r?  r   c                  ó   •— ‰ S r   rB   r  s   €r   r   z$_TelnetMixin.setUp.<locals>.<lambda>4  rA  r   )rÛ   r:  r„   ÚTelnetTransportr†   rã   r7  r#   ÚclearBufferrõ   ÚtelnetClientr+  r,  ræ   )	r   ÚtelnetServerr+  rF  r,  r  r  rõ   r  s	        @@@@r   r$   z_TelnetMixin.setUp,  s  øøøø€ Ø×,Ò,Ñ.Ô.ˆÝ1Ð2HÐ2HÐ2HÐ2HÑIÔIˆÝÔ-Ð.CÐ.CÐ.CÐ.CÑDÔDˆÝ'¨Ñ5Ô5ˆå2Ñ4Ô4ˆÝ1Ð2HÐ2HÐ2HÐ2HÑIÔIˆÝÔ-Ð.CÐ.CÐ.CÐ.CÑDÔDˆÝ'¨Ñ5Ô5ˆà×#Ò# OÑ4Ô4Ð4Ø×#Ò# OÑ4Ô4Ð4à×#Ò#Ñ%Ô%Ð%Ø×#Ò#Ñ%Ô%Ð%à,ˆÔØ(ˆÔØ.ˆÔØ.ˆÔàÔ*Ð*r   c                 ó:   — | j                              |¦  «         d S r   )rF  r‹   r·   s     r   r  z_TelnetMixin._testwriteD  s   € ØÔ×Ò Ñ%Ô%Ð%Ð%Ð%r   Nr4  rB   r   r   r<  r<  +  s2   € € € € € ð+ð +ð +ð0&ð &ð &ð &ð &r   r<  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )Ú_StdioMixinc           	      óL  ‡— t          ¦   «         Št          j        ˆfd„¦  «        }t                               |¦  «        }t
          j        }t          j        }|                     d¦  «        s|                     d¦  «        r
|d d…         }||t          j
        | j        ¦  «        g}ddlm} |                     |||t          d¬¦  «        }‰x| _        | _        || _        || _        t)          j        t-          d |j        ‰                     d	¦  «        g¦  «        ¦  «        S )
Nc                  ó   •— ‰ S r   rB   )ÚtestTerminals   €r   r   z#_StdioMixin.setUp.<locals>.<lambda>S  s   ø€ °|€ r   z.pycz.pyoéÿÿÿÿr   )ÚreactorT)ÚenvÚusePTYs   >>> )rã   r   r(  ÚstdioÚTerminalProcessProtocolÚsysÚ
executableÚ__file__Úendswithr   ÚqualrÛ   Útwisted.internetrO  ÚspawnProcessÚ	properEnvrõ   rM  ÚprocessClientr+  r   ÚgatherResultsÚfilterræ   r  )	r   r  r\  ÚexeÚmoduleÚargsrO  r+  rM  s	           @r   r$   z_StdioMixin.setUpI  s1  ø€ õ
 1Ñ2Ô2ˆõ
  Ô.Ð/CÐ/CÐ/CÐ/CÑDÔDˆõ
 ×5Ò5°mÑDÔDˆõ
 ŒnˆÝ”ˆØ�?Š?˜6Ñ"Ô"ð 	! f§o¢o°fÑ&=Ô&=ð 	!Ø˜C˜R˜C”[ˆFØ�V�Wœ\¨$Ô*=Ñ>Ô>Ð?ˆà,Ð,Ð,Ð,Ð,Ð,à!×.Ò.Ø˜3 ­)¸Dð /ñ 
ô 
ˆð 3?Ð>ˆÔ˜dÔ/Ø*ˆÔØ.ˆÔõ
 Ô"Ý�4˜-Ô4°l×6IÒ6IÈ'Ñ6RÔ6RÐSÑTÔTñ
ô 
ð 	
r   c                 ó¼   ‡ — 	 ‰ j                              d¦  «         n# t          j        t          f$ r Y nw xY wˆ fd„}‰ j        j                             |¦  «        S )NÚKILLc                 óÄ   •— |                       t          j        ¦  «         ‰                     | j        j        ¦  «         ‰                     | j        j        d¦  «         d S )Né	   )Útrapr   ÚProcessTerminatedÚassertIsNoneÚvalueÚexitCoder,   Ústatus)Úfailurer   s    €r   rf  z"_StdioMixin.tearDown.<locals>.trap{  sR   ø€ Ø�LŠL�Ô0Ñ1Ô1Ð1Ø×Ò˜gœmÔ4Ñ5Ô5Ð5Ø×Ò˜Wœ]Ô1°1Ñ5Ô5Ð5Ð5Ð5r   )r+  ÚsignalProcessr   ÚProcessExitedAlreadyÚOSErrorrM  rç   Ú
addErrback)r   rf  s   ` r   ÚtearDownz_StdioMixin.tearDownt  s   ø€ ð	ØÔ ×.Ò.¨vÑ6Ô6Ð6Ð6øÝÔ*­GÐ4ð 	ð 	ð 	ØˆDð	øøøð	6ð 	6ð 	6ð 	6ð 	6ð
 Ô Ô0×;Ò;¸DÑAÔAÐAs   ƒ ž7¶7c                 ó:   — | j                              |¦  «         d S r   )r+  r‹   r·   s     r   r  z_StdioMixin._testwrite‚  s   € ØÔ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r   N)r�   r‚   rƒ   r$   rq  r  rB   r   r   rJ  rJ  H  sE   € € € € € ð)
ð )
ð )
ðVBð Bð Bð)ð )ð )ð )ð )r   rJ  c                   óH   — e Zd ZeZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
S )ÚRecvlineLoopbackMixinc                 ó2   — |                       dg d¢¦  «        S )Ns   first line
done)ó   >>> first lineó
   first lineó   >>> done)r  r   s    r   Ú
testSimplez RecvlineLoopbackMixin.testSimple‰  s&   € Ø× Ò ØÐ!PÐ!PÐ!Pñ
ô 
ð 	
r   c                 ó^   — |                       t          dz   t          dz  z   dz   g d¢¦  «        S )Nrw  rL   ó	   xxxx
done)s   >>> first xxxxs
   first xxxxrx  )r  ÚinsertÚleftr   s    r   ÚtestLeftArrowz#RecvlineLoopbackMixin.testLeftArrowŽ  s9   € Ø× Ò Ý�]Ñ"¥T¨A¡XÑ-°Ñ=Ø;Ð;Ð;ñ
ô 
ð 	
r   c                 ót   — |                       t          dz   t          dz  z   t          dz  z   dz   g d¢¦  «        S )Ns
   right linerL   é   s   xx
done)s   >>> right lixxs
   right lixxrx  )r  r|  r}  Úrightr   s    r   ÚtestRightArrowz$RecvlineLoopbackMixin.testRightArrow”  sB   € Ø× Ò Ý�]Ñ"¥T¨A¡XÑ-µ¸±	Ñ9¸KÑGØ;Ð;Ð;ñ
ô 
ð 	
r   c                 óN   — |                       dt          dz  z   dz   g d¢¦  «        S )Nó   second linerL   r{  )s   >>> second xxxxs   second xxxxrx  )r  Ú	backspacer   s    r   ÚtestBackspacez#RecvlineLoopbackMixin.testBackspaceš  s4   € Ø× Ò Ø�Y¨™]Ñ*¨]Ñ:Ø=Ð=Ð=ñ
ô 
ð 	
r   c                 ód   — |                       dt          dz  z   t          dz  z   dz   g d¢¦  «        S )Ns   delete xxxxrL   ó	   line
done)s   >>> delete lines   delete linerx  )r  r}  Údeleter   s    r   Ú
testDeletez RecvlineLoopbackMixin.testDelete   s=   € Ø× Ò Ø�T A™XÑ%­°©
Ñ2°]ÑBØ=Ð=Ð=ñ
ô 
ð 	
r   c                 óN   — |                       dt          dz  z   dz   g d¢¦  «        S )Ns	   third ineé   ó   l
done)s   >>> third lines
   third linerx  )r  r}  r   s    r   Ú
testInsertz RecvlineLoopbackMixin.testInsert¦  s4   € Ø× Ò Ø�4 !™8Ñ# jÑ0Ø;Ð;Ð;ñ
ô 
ð 	
r   c                 ó^   — |                       dt          dz  z   t          z   dz   g d¢¦  «        S )Ns   fourth xinerL   r�  )s   >>> fourth lines   fourth linerx  )r  r}  r|  r   s    r   ÚtestTypeoverz"RecvlineLoopbackMixin.testTypeover¬  s9   € Ø× Ò Ø�T A™XÑ%­Ñ.°Ñ;Ø=Ð=Ð=ñ
ô 
ð 	
r   c                 óX   — |                       t          dz   t          z   dz   g d¢¦  «        S )Ns	   blah lines	   home
done)s   >>> home lines	   home linerx  )r  r|  Úhomer   s    r   ÚtestHomezRecvlineLoopbackMixin.testHome²  s5   € Ø× Ò Ý�\Ñ!¥DÑ(¨=Ñ8Ø9Ð9Ð9ñ
ô 
ð 	
r   c                 ó^   — |                       dt          dz  z   t          z   dz   g d¢¦  «        S )Ns   end rL   rˆ  )s   >>> end lines   end linerx  )r  r}  Úendr   s    r   ÚtestEndzRecvlineLoopbackMixin.testEnd¸  s9   € Ø× Ò Ø•d˜Q‘hÑ¥Ñ$ }Ñ4Ø7Ð7Ð7ñ
ô 
ð 	
r   N)r�   r‚   rƒ   rˆ   rÛ   ry  r~  r‚  r†  rŠ  rŽ  r�  r“  r–  rB   r   r   rt  rt  †  s    € € € € € Ø€Nð
ð 
ð 
ð

ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð 
ð 
r   rt  c                   ó   — e Zd ZdS )ÚRecvlineLoopbackTelnetTestsNrá   rB   r   r   r˜  r˜  ¿  r8  r   r˜  c                   ó   — e Zd ZdS )ÚRecvlineLoopbackSSHTestsNrá   rB   r   r   rš  rš  Ã  r8  r   rš  zBTerminal requirements missing, can't run recvline tests over stdioc                   ó   — e Zd ZdS )ÚRecvlineLoopbackStdioTestsNrá   rB   r   r   rœ  rœ  Ç  s   € € € € € à€Dr   rœ  c                   ó$   — e Zd ZeZd„ Zd„ Zd„ ZdS )ÚHistoricRecvlineLoopbackMixinc                 óH   — |                       dt          z   dz   g d¢¦  «        S )Ns   first line
ó   
done)rv  rw  rv  rw  rx  )r  Úupr   s    r   ÚtestUpArrowz)HistoricRecvlineLoopbackMixin.testUpArrowÏ  s6   € Ø× Ò Ø�bÑ  9Ñ,ðð ð ñ	
ô 	
ð 		
r   c                 óX   — |                       dt          z   t          z   dz   g d¢¦  «        S )aH  
        Pressing down arrow to visit an entry that was added to the
        history by pressing the up arrow instead of return does not
        raise a L{TypeError}.

        @see: U{http://twistedmatrix.com/trac/ticket/9031}

        @return: A L{defer.Deferred} that fires when C{b"done"} is
            echoed back.
        s   first line
partial liner   )rv  rw  s   >>> partial lines   partial linerx  ©r  r¡  Údownr   s    r   Ú$test_DownArrowToPartialLineInHistoryzBHistoricRecvlineLoopbackMixin.test_DownArrowToPartialLineInHistoryÛ  s=   € ð × Ò Ø-µÑ2µTÑ9¸IÑEðð ð ñ	
ô 	
ð 		
r   c                 ó^   — |                       dt          dz  z   t          z   dz   g d¢¦  «        S )Ns   first line
second line
r€  r   )rv  rw  ó   >>> second liner„  r¨  r„  rx  r¤  r   s    r   ÚtestDownArrowz+HistoricRecvlineLoopbackMixin.testDownArrowò  s?   € Ø× Ò Ø(­2°©6Ñ1µDÑ8¸9ÑDðð ð ñ
ô 
ð 	
r   N)r�   r‚   rƒ   rˆ   rÛ   r¢  r¦  r©  rB   r   r   rž  rž  Ì  sF   € € € € € Ø€Nð

ð 

ð 

ð
ð 
ð 
ð.
ð 
ð 
ð 
ð 
r   rž  c                   ó   — e Zd ZdS )Ú#HistoricRecvlineLoopbackTelnetTestsNrá   rB   r   r   r«  r«    ó   € € € € € ð 	€Dr   r«  c                   ó   — e Zd ZdS )Ú HistoricRecvlineLoopbackSSHTestsNrá   rB   r   r   r®  r®    r¬  r   r®  zKTerminal requirements missing, can't run historic recvline tests over stdioc                   ó   — e Zd ZdS )Ú"HistoricRecvlineLoopbackStdioTestsNrá   rB   r   r   r°  r°    s   € € € € € ð 	€Dr   r°  c                   ó   — e Zd ZdZd„ ZdS )ÚTransportSequenceTestsz5
    L{twisted.conch.recvline.TransportSequence}
    c                 óP   — |                       t          t          j        ¦  «         dS )zh
        Initializing a L{recvline.TransportSequence} with no args
        raises an assertion.
        N)ÚassertRaisesÚAssertionErrorr   ÚTransportSequencer   s    r   Útest_invalidSequencez+TransportSequenceTests.test_invalidSequence  s#   € ð
 	×Ò�.­(Ô*DÑEÔEÐEÐEÐEr   N)r�   r‚   rƒ   Ú__doc__r·  rB   r   r   r²  r²    s2   € € € € € ðð ðFð Fð Fð Fð Fr   r²  )er¸  ÚosrT  Úunittestr   Útwisted.conchr   Útwisted.conch.insultsr   Útwisted.credr   rY  r   r   Útwisted.internet.testingr	   Útwisted.pythonr
   r   r   Útwisted.python.compatr   Útwisted.python.reflectr   Útwisted.trial.unittestr   r   rR  ÚdictÚenvironr[  ÚpathsepÚjoinÚpathr   r„   r…   Útwisted.conch.test.loopbackr†   r    rˆ   r}  r�  r¡  r¥  r|  r’  r‰  r•  r…  r‘   Útwisted.conch.manhole_sshr’   r“   r”   r•   r–   Útwisted.conch.sshr—   r˜   r™   rš   r›   rœ   r  r    rž   r¼   rº   rÅ   rÃ   ÚSSHClientTransportrÌ   rØ   rÝ   rà   ÚregisterAdapterÚISessionÚImportErrorré   rã   rð   r  Útwisted.conch.testr5  r(  ÚTestProtocolr7  r   r:  r<  rJ  rt  r˜  rš  rœ  rž  r«  r®  r°  r²  rB   r   r   ú<module>rÑ     sm  ðð
ð ð
 
€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø +Ð +Ð +Ð +Ð +Ð +Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5àˆÐ+Ñ,Ô,€ØˆD�”ÑÔ€	Øœ*Ÿ/š/¨#¬(Ñ3Ô3€	ˆ,Ñ ðDEð DEð DEð DEð DE�(ñ DEô DEð DEðN !Ð  Ð  Ð  Ð  Ð  Ø (Ð (Ð (Ð (Ð (Ð (Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ð=ð =ð =ð =ð =�Ô*ñ =ô =ð =ð €Ø€Ø€Ø€Ø	€Ø€Ø	€Ø€Ø€	à !Ð !Ð !Ð !Ð !Ð !ðJHðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €Cð 6ð  6ð  6ð  6ð  6˜Ô+ñ  6ô  6ð  6ðD.ð .ð .ð .ð .˜Ô1ñ .ô .ð .ð40ð 0ð 0ð 0ð 0�8Ô-ñ 0ô 0ð 0ð%1ð %1ð %1ð %1ð %1˜	Ô4ñ %1ô %1ð %1ðNGð Gð Gð Gð GÐ7ñ Gô Gð Gð0ð 0ð 0ð 0ð 0�oñ 0ô 0ð 0ðð ð ð ð �<ñ ô ð ð €JÔ˜{¨H°gÔ6FÑGÔGÐGÐGøðu ð ð ð Ø
€C€C€Cðøøøðz
-ð 
-ð 
-ð 
-ð 
- Ô 7ñ 
-ô 
-ð 
-ð*ð *ð *ð *ð *ñ *ô *ð *ð(4#ð 4#ð 4#ð 4#ð 4#�
ñ 4#ô 4#ð 4#ðn +Ð *Ð *Ð *Ð *Ð *ð	ð 	ð 	ð 	ð 	 Ô 6¸Ô8Pñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	 Ô 6¸Ô8Pñ 	ô 	ð 	ð&ð &ð &ð &ð &�:ñ &ô &ð &ð:;)ð ;)ð ;)ð ;)ð ;)�*ñ ;)ô ;)ð ;)ð|6
ð 6
ð 6
ð 6
ð 6
ñ 6
ô 6
ð 6
ðr	ð 	ð 	ð 	ð 	 ,°Ð:Oñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜y¨(Ð4Iñ 	ô 	ð 	ð €ˆEˆ	ÐWÑXÔXð	ð 	ð 	ð 	ð 	 ¨hÐ8Mñ 	ô 	ñ YÔXð	ð2
ð 2
ð 2
ð 2
ð 2
ñ 2
ô 2
ð 2
ðj	ð 	ð 	ð 	ð 	Ø�(Ð9ñ	ô 	ð 	ð	ð 	ð 	ð 	ð 	ØˆxÐ6ñ	ô 	ð 	ð €Ø€IØTñô ð	ð 	ð 	ð 	ð 	Ø�Ð8ñ	ô 	ñ	ô ð	ð
Fð 
Fð 
Fð 
Fð 
F˜Xñ 
Fô 
Fð 
Fð 
Fð 
Fs   ÃF ÆFÆF