o
    ¯bAN  ã                   @   sª   d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ dZdZG dd„ dejƒZG dd	„ d	ƒZG d
d„ dƒZG dd„ dejƒZG dd„ dejƒZdS )é    )Úhelper)ÚBLINKÚBOLDÚG0ÚG1ÚG2ÚG3ÚNORMALÚREVERSE_VIDEOÚ	UNDERLINEÚmodesÚprivateModes)ÚunittestéP   é   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dES )FÚBufferTestsc                 C   s   t  ¡ | _| j ¡  d S ©N)r   ÚTerminalBufferÚtermÚconnectionMade©Úself© r   ú@/usr/lib/python3/dist-packages/twisted/conch/test/test_helper.pyÚsetUp   s   
zBufferTests.setUpc                 C   sP   |   | jjt¡ |   | jjt¡ |   | j ¡ dtd  ¡ |   | j ¡ d¡ d S )Nó   
é   ©r   r   )ÚassertEqualr   ÚwidthÚWIDTHÚheightÚHEIGHTÚ	__bytes__ÚreportCursorPositionr   r   r   r   ÚtestInitialState   s   zBufferTests.testInitialStatec                 C   s    |   tjdtjdi| jj¡ dS )zš
        Verify that only DEC Auto Wrap Mode (DECAWM) and DEC Text Cursor Enable
        Mode (DECTCEM) are initially in the Set Mode (SM) state.
        TN)r   r   Ú	AUTO_WRAPÚCURSOR_MODEr   r   r   r   r   Útest_initialPrivateModes$   s   þz$BufferTests.test_initialPrivateModesc                 C   óL   | j  d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ dS )zQ
        C{""} moves the cursor to the first column in the current row.
        é   é   ©r*   r+   ó   ©r   r+   N)r   ÚcursorForwardÚ
cursorDownr   r$   ÚinsertAtCursorr   r   r   r   Útest_carriageReturn.   ó
   zBufferTests.test_carriageReturnc                 C   s@   | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ dS )zV
        C{"
"} moves the cursor to the next row without changing the column.
        r*   )r*   r   r   ©r*   r   N)r   r/   r   r$   r1   r   r   r   r   Útest_linefeed8   s   zBufferTests.test_linefeedc                 C   r)   )z:
        C{write} transforms C{"
"} into C{"
"}.
        r*   r+   r,   r   ©r   é   N)r   r/   r0   r   r$   Úwriter   r   r   r   Útest_newlineA   r3   zBufferTests.test_newlinec                 C   sH   | j j ¡ }| j  tjtjg¡ d|tj< d|tj< |  || j j¡ dS )z›
        Verify that L{helper.TerminalBuffer.setPrivateModes} changes the Set
        Mode (SM) state to "set" for the private modes it is passed.
        TN)r   r   ÚcopyÚsetPrivateModesÚSCROLLÚSCREENr   ©r   Úexpectedr   r   r   Útest_setPrivateModesK   s
   

z BufferTests.test_setPrivateModesc                 C   sD   | j j ¡ }| j  tjtjg¡ |tj= |tj= |  || j j¡ dS )zŸ
        Verify that L{helper.TerminalBuffer.resetPrivateModes} changes the Set
        Mode (SM) state to "reset" for the private modes it is passed.
        N)r   r   r:   ÚresetPrivateModesr&   r'   r   r>   r   r   r   Útest_resetPrivateModesV   s
   z"BufferTests.test_resetPrivateModesc                 C   sd   | j  d¡ |  | j  ¡ d¡ | j  ¡  |  | j  ¡ d¡ | j  t¡ |  | j  ¡ dtd f¡ d S )Nr+   r.   r6   r   r   )r   r0   r   r$   r"   r   r   r   r   ÚtestCursorDowna   s   
zBufferTests.testCursorDownc                 C   sj   | j  d¡ |  | j  ¡ d¡ | j  d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ d S )Nr*   r   é   r   )r   é   rE   )r   ÚcursorUpr   r$   r0   r   r   r   r   ÚtestCursorUpi   s   zBufferTests.testCursorUpc                 C   sb   | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  t¡ |  | j  ¡ tdf¡ d S )Né   )rH   r   )r7   r   r   )r   r/   r   r$   r    r   r   r   r   ÚtestCursorForwardt   s   zBufferTests.testCursorForwardc                 C   sˆ   | j  d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ d S )Né
   rH   )é   r   é   )r   r   r   r   )r   r/   ÚcursorBackwardr   r$   r   r   r   r   ÚtestCursorBackward|   s   zBufferTests.testCursorBackwardc                 C   s$   | j  dd¡ |  | j  ¡ d¡ d S )Nr+   é	   )r+   rO   )r   ÚcursorPositionr   r$   r   r   r   r   ÚtestCursorPositioning‡   s   z!BufferTests.testCursorPositioningc                 C   s6   d}| j  |¡ |  | j  ¡ |d dtd   ¡ d S )Nó   Hello, world.r   rH   )r   r8   r   r#   r"   ©r   Úsr   r   r   ÚtestSimpleWriting‹   s   &zBufferTests.testSimpleWritingc                 C   sn   d}| j  |¡ | j  t|ƒ¡ | j  tjg¡ | j  d¡ |  | j  ¡ d|dd …  d dt	d   ¡ d S )Ns   hello, world.ó   Hr   r   rH   )
r   r8   rM   ÚlenÚ
resetModesr   ÚIRMr   r#   r"   rS   r   r   r   ÚtestOvertype   s   &ÿzBufferTests.testOvertypec                 C   sf   d}| j  |¡ | j  t|ƒ¡ | j  tjg¡ | j  d¡ |  | j  ¡ d| d dt	d   ¡ d S )Ns   ello, world.rV   r   rH   )
r   r8   rM   rW   ÚsetModesr   rY   r   r#   r"   rS   r   r   r   Ú
testInsertš   s   ÿzBufferTests.testInsertc                 C   s^   d}| j  d¡ | j  d¡ | j  |¡ |  | j  ¡ d| j jd  | d dtd   ¡ d S )NrR   r*   s   




r   rL   )r   r0   r/   r8   r   r#   Úfillr"   rS   r   r   r   ÚtestWritingInTheMiddle¤   s   "þz"BufferTests.testWritingInTheMiddlec                 C   sd   d}| j  td ¡ | j  |¡ |  | j  ¡ |d d…  t¡d |dd …  d dtd   ¡ d S )NrR   r*   r   r+   )r   r/   r    r8   r   r#   Úrjustr"   rS   r   r   r   ÚtestWritingWrappedAtEndOfLine®   s   0þz)BufferTests.testWritingWrappedAtEndOfLinec                 C   sj   | j  ¡  |  | j  ¡ d¡ | j  t¡ |  | j  ¡ dtd f¡ | j  ¡  |  | j  ¡ dtd f¡ d S )N©r   r   r   r   )r   Úindexr   r$   r0   r"   r   r   r   r   Ú	testIndex·   s   

zBufferTests.testIndexc                 C   sZ   | j  ¡  |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  ¡  |  | j  ¡ d¡ d S )Nr   rH   ©r   rH   ra   )r   ÚreverseIndexr   r$   r0   r   r   r   r   ÚtestReverseIndex¿   s   

zBufferTests.testReverseIndexc                 C   sZ   | j  ¡  |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  ¡  |  | j  ¡ d¡ dS )zm
        C{nextLine} positions the cursor at the beginning of the row below the
        current row.
        ra   r*   r4   rd   N)r   ÚnextLiner   r$   r/   r   r   r   r   Útest_nextLineÇ   s   

zBufferTests.test_nextLinec                 C   s~   | j  d¡ | j  d¡ |  | j  ¡ d¡ | j  ¡  | j  d¡ | j  d¡ |  | j  ¡ d¡ | j  ¡  |  | j  ¡ d¡ d S )Nr*   rL   )rL   r*   r+   )r7   é   )r   r0   r/   r   r$   Ú
saveCursorrM   ÚrestoreCursorr   r   r   r   ÚtestSaveCursorÓ   s   

zBufferTests.testSaveCursorc                 C   sð   | j  ¡  | j  d¡ | j  dd¡}|  |d d¡ |  |d jt¡ | j  dd¡}|  |d d¡ |  |d jt¡ | j  ¡  | j  d¡ | j  dd¡}|  |d d¡ |  |d jt	¡ | j  d	d¡}|  |d d¡ |  |d jt¡ d S )
Ns   Hir   rV   r   ó   is   !!rH   ó   !r+   )
r   ÚsingleShift2r8   ÚgetCharacterr   Úcharsetr   r   ÚsingleShift3r   ©r   Úchr   r   r   ÚtestSingleShiftsÞ   s    

zBufferTests.testSingleShiftsc           	   	   C   sÆ   d}d}d}| j  d¡ | j  ¡  | j  d¡ | j  ¡  | j  d¡ t}d}|||fD ]5}tt|ƒƒD ] }| j  ||¡}|  |d |||d … ¡ |  |d j	|¡ q3|tkrZt
p[t}|d7 }q+d S )	Ns   Hellos   Worlds   Bye!s   Hello
s   World
s   Bye!
r   r   )r   r8   ÚshiftOutÚshiftInr   ÚrangerW   rp   r   rq   r   )	r   Ús1Ús2Ús3ÚgÚhrT   Úirt   r   r   r   ÚtestShiftingõ   s$   


úzBufferTests.testShiftingc                 C   sâ  | j  tttt¡ | j  d¡ | j  t¡ | j  d¡ | j  t¡ | j  d¡ | j  t¡ | j  d¡ | j  dd¡}|  	|d d¡ |  
|d j¡ |  
|d j¡ |  
|d j¡ |  
|d j¡ | j  dd¡}|  	|d d¡ |  |d j¡ |  |d j¡ |  |d j¡ |  |d j¡ | j  dd¡}|  	|d d¡ |  
|d j¡ |  |d j¡ |  |d j¡ |  |d j¡ | j  dd¡}|  	|d d¡ |  
|d j¡ |  
|d j¡ |  |d j¡ |  |d j¡ d S )	Nó   Wó   Xó   Yó   Zr   r   rH   r+   )r   ÚselectGraphicRenditionr   r   r   r
   r8   r	   rp   r   Ú
assertTrueÚboldÚ	underlineÚblinkÚreverseVideoÚassertFalsers   r   r   r   ÚtestGraphicRendition	  s@   z BufferTests.testGraphicRenditionc                 C   sÂ  d}d}| j  tjtj tjtj ¡ | j  |d ¡ | j  t¡ | j  |d ¡ t	t
|ƒƒD ]T}| j  |d¡}|  |d |||d … ¡ |  |d jt¡ |  |d j¡ |  |d j¡ |  |d j¡ |  |d j¡ |  |d jtj¡ |  |d jtj¡ q/t	t
|ƒƒD ]T}| j  |d¡}|  |d |||d … ¡ |  |d jt¡ |  |d j¡ |  |d j¡ |  |d j¡ |  |d j¡ |  |d jtj¡ |  |d jtj¡ qŠd S )Ns
   Merry xmass   Just kiddingr   r   r   )r   r„   r   Ú
FOREGROUNDÚREDÚ
BACKGROUNDÚGREENr8   r	   rx   rW   rp   r   rq   r   rŠ   r†   r‡   rˆ   r‰   Ú
foregroundÚ
backgroundÚWHITEÚBLACK)r   ry   rz   r~   rt   r   r   r   ÚtestColorAttributes/  s:   ÿ÷zBufferTests.testColorAttributesc                 C   sr   d}d}d}| j  d |||f¡d ¡ | j  dd¡ | j  ¡  |  | j  ¡ |d d | d dtd   ¡ d S )Ns   line 1s   line 2s   line 3r   r   r7   )r   r8   ÚjoinrP   Ú	eraseLiner   r#   r"   ©r   ry   rz   r{   r   r   r   ÚtestEraseLineO  s   
þzBufferTests.testEraseLinec                 C   sT   d}| j  |¡ | j  d¡ | j  ¡  |  | j  ¡ |d d… d dtd   ¡ d S )NrR   r*   éûÿÿÿr   rH   )r   r8   rM   ÚeraseToLineEndr   r#   r"   rS   r   r   r   ÚtestEraseToLineEnd\  s
   
.zBufferTests.testEraseToLineEndc                 C   s^   d}| j  |¡ | j  d¡ | j  ¡  |  | j  ¡ |dd …  t|ƒ¡d dtd   ¡ d S )NrR   r*   éüÿÿÿr   rH   )	r   r8   rM   ÚeraseToLineBeginningr   r#   r_   rW   r"   rS   r   r   r   ÚtestEraseToLineBeginningc  s   
,ÿz$BufferTests.testEraseToLineBeginningc                 C   s@   | j  d¡ | j  d¡ | j  ¡  |  | j  ¡ dtd  ¡ d S )Ns   Hello world
s   Goodbye world
r   r   )r   r8   ÚeraseDisplayr   r#   r"   r   r   r   r   ÚtestEraseDisplayl  s   
zBufferTests.testEraseDisplayc                 C   sn   d}d}| j  d ||df¡¡ | j  dd¡ | j  ¡  |  | j  ¡ |d |d d…  d dtd   ¡ d S )Nó   Hello worldó   Goodbye worldr   ó    r*   r   r+   )r   r8   r•   rP   ÚeraseToDisplayEndr   r#   r"   ©r   ry   rz   r   r   r   ÚtestEraseToDisplayEnds  s   
*ÿz!BufferTests.testEraseToDisplayEndc                 C   sr   d}d}| j  d ||f¡¡ | j  dd¡ | j  ¡  |  | j  ¡ d|dd …  t|ƒ¡ d dt	d   ¡ d S )Nr¡   r¢   r   r*   r   é   r+   )
r   r8   r•   rP   ÚeraseToDisplayBeginningr   r#   r_   rW   r"   r¥   r   r   r   ÚtestEraseToDisplayBeginning~  s   
(þz'BufferTests.testEraseToDisplayBeginningc                 C   sh   d}d}| j  d ||f¡¡ | j  dd¡ | j  ¡  |  | j  ¡ |d d | d dtd   ¡ d S )Nr¡   r¢   r   rL   r   r7   )r   r8   r•   rP   Ú
insertLiner   r#   r"   r¥   r   r   r   ÚtestLineInsertionŠ  s   
þzBufferTests.testLineInsertionc                 C   sj   d}d}d}| j  d |||f¡¡ | j  dd¡ | j  ¡  |  | j  ¡ |d | d dtd   ¡ d S )Nr¡   s   Middle wordsr¢   r   rO   r   r+   )r   r8   r•   rP   Ú
deleteLiner   r#   r"   r—   r   r   r   ÚtestLineDeletion–  s   
"ÿzBufferTests.testLineDeletionN)%Ú__name__Ú
__module__Ú__qualname__r   r%   r(   r2   r5   r9   r@   rB   rC   rG   rI   rN   rQ   rU   rZ   r\   r^   r`   rc   rf   rh   rl   ru   r   r‹   r”   r˜   r›   rž   r    r¦   r©   r«   r­   r   r   r   r   r      sF    

	



	& 	r   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚFakeDelayedCallFc                 C   s"   || _ || _|| _|| _|| _d S r   )ÚfsÚtimeoutÚfÚaÚkw)r   r²   r³   r´   rµ   r¶   r   r   r   Ú__init__§  s
   
zFakeDelayedCall.__init__c                 C   s   | j p| j S r   )Ú	cancelledÚcalledr   r   r   r   Úactive®  s   zFakeDelayedCall.activec                 C   s
   d| _ d S ©NT)r¸   r   r   r   r   Úcancel±  ó   
zFakeDelayedCall.cancelc                 C   s   d| _ | j| ji | j¤Ž d S r»   )r¹   r´   rµ   r¶   r   r   r   r   Úcall¶  s   zFakeDelayedCall.callN)	r®   r¯   r°   r¹   r¸   r·   rº   r¼   r¾   r   r   r   r   r±   £  s    r±   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFakeSchedulerc                 C   s
   g | _ d S r   )Úcallsr   r   r   r   r·   ¼  r½   zFakeScheduler.__init__c                 O   s"   | j  t| ||||ƒ¡ | j d S )Néÿÿÿÿ)rÀ   Úappendr±   )r   r³   r´   rµ   r¶   r   r   r   Ú	callLater¿  s   
zFakeScheduler.callLaterN)r®   r¯   r°   r·   rÃ   r   r   r   r   r¿   »  s    r¿   c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚExpectTestsc                 C   s    t  ¡ | _| j ¡  tƒ | _d S r   )r   ÚExpectableBufferr   r   r¿   r²   r   r   r   r   r   Å  s   

zExpectTests.setUpc                 C   s’   g }| j jdd| jd}| |j¡ | j  d¡ |  |¡ | j  d¡ |  |¡ |  |d  	¡ d¡ |  t
| jjƒd¡ |  | jjd  ¡ ¡ d S )Nó   hello worldr   ©r³   Ú	schedulers   greeting puny earthlings
s   hello world
r   )r   Úexpectr²   ÚaddCallbackrÂ   r8   rŠ   r…   r   ÚgrouprW   rÀ   rº   ©r   ÚresultÚdr   r   r   ÚtestSimpleStringÊ  s   

zExpectTests.testSimpleStringc                 C   s€   g }| j  d¡}| |j¡ |  |¡ | j  d¡ |  |¡ | j  d¡ |  |¡ | j  d¡ |  |¡ |  |d  ¡ d¡ d S )NrÆ   ó   hello s   worló   dr   )	r   rÉ   rÊ   rÂ   rŠ   r8   r…   r   rË   rÌ   r   r   r   ÚtestBrokenUpString×  s   



zExpectTests.testBrokenUpStringc                 C   s¸   g }| j  d¡}| |j¡ | j  d¡}| |j¡ |  |¡ | j  d¡ |  |¡ | j  d¡ |  t|ƒd¡ | j  d¡ |  t|ƒd¡ |  |d  ¡ d¡ |  |d  ¡ d¡ d S )NrÐ   ó   worlds   helloó    r   rH   r   )	r   rÉ   rÊ   rÂ   rŠ   r8   r   rW   rË   ©r   rÍ   Úd1Úd2r   r   r   ÚtestMultipleå  s   

zExpectTests.testMultiplec                 C   sJ   | j  d¡ g }| j  d¡}| |j¡ |  |¡ |  |d  ¡ d¡ d S )NrÆ   r   )r   r8   rÉ   rÊ   rÂ   r…   r   rË   rÌ   r   r   r   ÚtestSynchronousö  s   
zExpectTests.testSynchronousc                 C   s|   | j  d¡ g }| j  d¡}| |j¡ | j  d¡}| |j¡ |  t|ƒd¡ |  |d  ¡ d¡ |  |d  ¡ d¡ d S )Ns   goodbye worlds   byerÓ   rH   r   r   )r   r8   rÉ   rÊ   rÂ   r   rW   rË   rÕ   r   r   r   ÚtestMultipleSynchronousÿ  s   z#ExpectTests.testMultipleSynchronousc                 C   s$   |   t|dƒ¡ |  |jtj¡ d S )NÚtype)r…   Úhasattrr   rÛ   r   ÚExpectationTimeout)r   Úresr   r   r   Ú_cbTestTimeoutFailure  s   z!ExpectTests._cbTestTimeoutFailurec                 C   s4   | j jdd| jd}| | j¡ | jjd  ¡  d S )NrÆ   r   rÇ   r   )r   rÉ   r²   ÚaddBothrß   rÀ   r¾   )r   rÎ   r   r   r   ÚtestTimeoutFailure  s   zExpectTests.testTimeoutFailurec                 C   s€   | j  d¡ g }| j jdd| jd}| | j¡ | j  d¡}| |j¡ | jjd  	¡  |  
t|ƒd¡ |  
|d  ¡ d¡ d S )Ns   not zoomtasticrÆ   r   rÇ   s   zoomr   )r   r8   rÉ   r²   rà   rß   rÊ   rÂ   rÀ   r¾   r   rW   rË   rÕ   r   r   r   ÚtestOverlappingTimeout  s   z"ExpectTests.testOverlappingTimeoutN)r®   r¯   r°   r   rÏ   rÒ   rØ   rÙ   rÚ   rß   rá   râ   r   r   r   r   rÄ   Ä  s    	rÄ   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚCharacterAttributeTestszG
    Tests for L{twisted.conch.insults.helper.CharacterAttribute}.
    c              
   C   s”   |   t ¡ t ¡ ¡ |   t ¡ tjtd¡ |   tjddddtjdtjddddtjd¡ |  t ¡ tjtd¡ |  tjddtjdd¡ dS )z±
        L{CharacterAttribute}s must have matching character attribute values
        (bold, blink, underline, etc) with the same values to be considered
        equal.
        )rq   TF)r†   r‡   rˆ   r‰   r   ©r†   N)r   r   ÚCharacterAttributer   ÚBLUEÚassertNotEqualr   r   r   r   r   Útest_equality)  s4   ÿûûøÿÿz%CharacterAttributeTests.test_equalityc                 C   sb   t  ¡ jdd |  | jg¡}|  t|ƒd¡ |  |d d t¡ d}|  |d d d| ¡ d	S )
z~
        L{twisted.conch.insults.helper.CharacterAttribute.wantOne} emits
        a deprecation warning when invoked.
        Trä   r   r   Úcategoryz5twisted.conch.insults.helper._FormattingState.wantOneÚmessagez#%s was deprecated in Twisted 13.1.0N)r   Ú_FormattingStateÚwantOneÚflushWarningsÚtest_wantOneDeprecatedr   rW   ÚDeprecationWarning)r   ÚwarningsShownÚdeprecatedClassr   r   r   rî   N  s   
þz.CharacterAttributeTests.test_wantOneDeprecatedN)r®   r¯   r°   Ú__doc__rè   rî   r   r   r   r   rã   $  s    %rã   N)Útwisted.conch.insultsr   Útwisted.conch.insults.insultsr   r   r   r   r   r   r	   r
   r   r   r   Útwisted.trialr   r    r"   ÚTestCaser   r±   r¿   rÄ   rã   r   r   r   r   Ú<module>   s   4   	`