
    Yf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   R/var/www/html/env/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BrFFFF1133]CCC
471133]CCC
471133]CCC
471133]CCC
471133]CCC
471133]CCC
471133]CCC
471133]CCC
471133]CCC
47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BrFFFF44668VWWW
4
4
444668V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BrFFFF44668VWWW1133Z@@@
4744668UVVV1133]CCC
4744668UVVV1133]CCC
4744668VWWW1133]CCC
4744668VWWW1133]CCCq 	# 	#ABtw!""""44668V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BrFFFF11335KLLL
47<11335K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BrFFFF11335KLLL
47<
47;11335K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BrFFFF1133]CCC
471133\BBB
47
471133[AAA
47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BrFFFF1133]CCC
47>1133]CCC
47
47>1133\BBB
47
47>1133[AAA
47
47>1133Z@@@
47>1133Z@@@@@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BrFFFF
47
41133^DDD
47
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BrFFFF
47>
47
41133]CCC
47
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  BrFFFTV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    D5L4747+;;<<<<<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     '7q777B777#2D  ,D"0DDJ DKKKr   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;
Aq93 D I!!$
D999I!!$#666%9T%9"&&*&9& &D" .2D"*"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%2F2H2H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==="===#2D  ,D"0DDJ DKKKr   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    +$!#
 DN 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IbIII$DMMMr   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<     $3D  ,D"0D$DM$DMDJ DKKKr   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 t7H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 )
_BaseMixinP      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

*BQ*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oo"%:%:%:%:"BDD1mC  G$$$!#&&
*dkkmm,,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!!!!!2r1a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   ,,..12H2H2H2HII-.C.C.C.CDD'5524412H2H2H2H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.pyor   )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5mDD
 n??6"" 	!foof&=&= 	!CRC[FVW\$*=>>?,,,,,,!..3)D / 
 
 3?>d/*.
 "4-4l6I6I'6R6R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    LL0111gm4555W]11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      ]"TAX-=;;;
 
 	
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      ]"TAX-	9K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=      TAX%
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      TAX%.;===
 
 	
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      dQh$}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=       -2T9I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1D89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  6D. . . . .1 . . .40 0 0 0 08- 0 0 0%1 %1 %1 %1 %1	4 %1 %1 %1NG G G G G7 G G G0 0 0 0 0o 0 0 0    <    J{Hg6FGGGGu    
CCC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	 	 	 	 	h8M 	 	 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