U
    2ÜŸjÆQ  ã                   @  sÖ   d dl mZ d dlZd dlmZ 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 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 )é    )ÚannotationsN)ÚCallable)Úhelper)ÚBLINKÚBOLDÚG0ÚG1ÚG2ÚG3ÚNORMALÚREVERSE_VIDEOÚ	UNDERLINEÚmodesÚprivateModes)Úfailure)ÚunittestéP   é   c                   @  sè  e Zd Zddœdd„Zddœdd„Zddœdd„Zddœd	d
„Zddœdd„Zddœdd„Zddœdd„Z	ddœdd„Z
ddœdd„Zddœdd„Zddœdd„Zddœdd„Zddœdd„Zddœdd„Zddœdd „Zddœd!d"„Zddœd#d$„Zddœd%d&„Zddœd'd(„Zddœd)d*„Zddœd+d,„Zddœd-d.„Zddœd/d0„Zddœd1d2„Zddœd3d4„Zddœd5d6„Zddœd7d8„Zddœd9d:„Zddœd;d<„Zddœd=d>„Z ddœd?d@„Z!ddœdAdB„Z"ddœdCdD„Z#ddœdEdF„Z$dGS )HÚBufferTestsÚNone©Úreturnc                 C  s   t  ¡ | _| j ¡  d S ©N)r   ZTerminalBufferÚtermÚconnectionMade©Úself© r   úB/tmp/pip-unpacked-wheel-4b529toj/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  sL   | 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_carriageReturn3   s
    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   r3   r#   r)   r5   r   r   r   r   Útest_linefeed=   s    zBufferTests.test_linefeedc                 C  sL   | j  d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ dS )z:
        C{write} transforms C{"
"} into C{"
"}.
        r.   r/   r0   r    ©r   é   N)r   r3   r4   r#   r)   Úwriter   r   r   r   Útest_newlineF   s
    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   ÚcopyZsetPrivateModesZSCROLLZSCREENr#   ©r   Úexpectedr   r   r   Útest_setPrivateModesP   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=   ZresetPrivateModesr+   r,   r#   r>   r   r   r   Útest_resetPrivateModes[   s
    z"BufferTests.test_resetPrivateModesc                 C  sd   | j  d¡ |  | j  ¡ d¡ | j  ¡  |  | j  ¡ d¡ | j  t¡ |  | j  ¡ dtd f¡ d S )Nr/   r2   r9   r   r!   )r   r4   r#   r)   r'   r   r   r   r   ÚtestCursorDownf   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   é   rD   )r   ZcursorUpr#   r)   r4   r   r   r   r   ÚtestCursorUpn   s    zBufferTests.testCursorUpc                 C  sb   | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  t¡ |  | j  ¡ tdf¡ d S )Né   )rF   r   )r:   r   r   )r   r3   r#   r)   r%   r   r   r   r   ÚtestCursorForwardy   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é
   rF   )é   r   é   )r!   r   r!   r"   )r   r3   ÚcursorBackwardr#   r)   r   r   r   r   ÚtestCursorBackward�   s    zBufferTests.testCursorBackwardc                 C  s$   | j  dd¡ |  | j  ¡ d¡ d S )Nr/   é	   )r/   rM   )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    rF   )r   r;   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    rF   )
r   r;   rK   ÚlenZ
resetModesr   ÚIRMr#   r(   r'   rQ   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.rT   r    rF   )
r   r;   rK   rU   ZsetModesr   rV   r#   r(   r'   rQ   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 )NrP   r.   s   




r    rJ   )r   r4   r3   r;   r#   r(   Úfillr'   rQ   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 )NrP   r.   r    r/   )r   r3   r%   r;   r#   r(   Úrjustr'   rQ   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)   r4   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"   rF   ©r   rF   r]   )r   ZreverseIndexr#   r)   r4   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.
        r]   r.   r7   r`   N)r   ZnextLiner#   r)   r3   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.   rJ   )rJ   r.   r/   )r:   é   )r   r4   r3   r#   r)   Z
saveCursorrK   Z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   rT   r!   ó   is   !!rF   ó   !r/   )
r   ZsingleShift2r;   ÚgetCharacterr#   Úcharsetr	   r   Z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 ]j}tt|ƒƒD ]@}| j  ||¡}|  |d |||d … ¡ |  |d j	|¡ qf|tkr´t
p¶t}|d7 }qVd S )	Ns   Hellos   Worlds   Bye!s   Hello
s   World
s   Bye!
r   r!   )r   r;   ZshiftOutZshiftInr   ÚrangerU   rg   r#   rh   r   )	r   Ús1Ús2Ús3ÚgÚhrR   Úirj   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!   rF   r/   )r   ÚselectGraphicRenditionr   r   r   r   r;   r   rg   r#   Ú
assertTrueÚboldÚ	underlineÚblinkÚreverseVideoÚassertFalseri   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 ]¨}| 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 ]ª}| 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   rx   r   Z
FOREGROUNDÚREDZ
BACKGROUNDÚGREENr;   r   rl   rU   rg   r#   rh   r   r~   rz   r{   r|   r}   Ú
foregroundZ
backgroundÚWHITEÚBLACK)r   rm   rn   rr   rj   r   r   r   ÚtestColorAttributes4  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!   r:   )r   r;   ÚjoinrN   Z	eraseLiner#   r(   r'   ©r   rm   rn   ro   r   r   r   ÚtestEraseLineT  s    
þzBufferTests.testEraseLinec                 C  sT   d}| j  |¡ | j  d¡ | j  ¡  |  | j  ¡ |d d… d dtd   ¡ d S )NrP   r.   éûÿÿÿr    rF   )r   r;   rK   ZeraseToLineEndr#   r(   r'   rQ   r   r   r   ÚtestEraseToLineEnda  s
    
zBufferTests.testEraseToLineEndc                 C  s^   d}| j  |¡ | j  d¡ | j  ¡  |  | j  ¡ |dd …  t|ƒ¡d dtd   ¡ d S )NrP   r.   éüÿÿÿr    rF   )	r   r;   rK   ZeraseToLineBeginningr#   r(   r[   rU   r'   rQ   r   r   r   ÚtestEraseToLineBeginningh  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   r;   ZeraseDisplayr#   r(   r'   r   r   r   r   ÚtestEraseDisplayq  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   r;   r†   rN   ZeraseToDisplayEndr#   r(   r'   ©r   rm   rn   r   r   r   ÚtestEraseToDisplayEndx  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   r;   r†   rN   ZeraseToDisplayBeginningr#   r(   r[   rU   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    rJ   r!   r:   )r   r;   r†   rN   Z
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    rM   r!   r/   )r   r;   r†   rN   Z
deleteLiner#   r(   r'   r‡   r   r   r   ÚtestLineDeletion›  s    
 ÿzBufferTests.testLineDeletionN)%Ú__name__Ú
__module__Ú__qualname__r   r*   r-   r6   r8   r<   r@   rA   rB   rE   rG   rL   rO   rS   rW   rX   rZ   r\   r_   ra   rb   rd   rk   rs   r   r…   rˆ   rŠ   rŒ   r�   r’   r”   r•   r–   r   r   r   r   r      sD   

	



	& 	r   c                   @  sV   e Zd ZdZdZdddddddœd	d
„Zddœdd„Zddœdd„Zddœdd„ZdS )ÚFakeDelayedCallFÚFakeSchedulerÚfloatúCallable[(Ellipsis, None)]ztuple[object, ...]zdict[str, object]r   )ÚfsÚtimeoutÚfÚaÚkwr   c                 C  s"   || _ || _|| _|| _|| _d S r   )rž   rŸ   r    r¡   r¢   )r   rž   rŸ   r    r¡   r¢   r   r   r   Ú__init__¬  s
    zFakeDelayedCall.__init__Úboolr   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½  s    zFakeDelayedCall.cancelc                 C  s   d| _ | j| j| 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                   @  s0   e Zd Zddœdd„Zdddddd	œd
d„ZdS )r›   r   r   c                 C  s
   g | _ d S r   )Úcallsr   r   r   r   r£   È  s    zFakeScheduler.__init__rœ   r�   Úobjectrš   )rŸ   r    r¡   r¢   r   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                   @  sŒ   e Zd Zddœdd„Zddœdd„Zddœdd„Zddœd	d
„Zddœdd„Zddœdd„Zdddœdd„Z	ddœdd„Z
ddœdd„ZdS )ÚExpectTestsr   r   c                 C  s    t  ¡ | _| j ¡  tƒ | _d S r   )r   Z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Ÿ   Z	schedulers   greeting puny earthlings
s   hello world
r   )r   Úexpectrž   ÚaddCallbackr®   r;   r~   ry   r#   ÚgrouprU   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~   r;   ry   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!   rF   r   )	r   r³   r´   r®   r~   r;   r#   rU   rµ   ©r   r·   Úd1Zd2r   r   r   ÚtestMultipleó  s    

zExpectTests.testMultiplec                 C  sJ   | j  d¡ g }| j  d¡}| |j¡ |  |¡ |  |d  ¡ d¡ d S )Nr±   r   )r   r;   r³   r´   r®   ry   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½   rF   r   r!   )r   r;   r³   r´   r®   r#   rU   rµ   r¿   r   r   r   ÚtestMultipleSynchronous  s    z#ExpectTests.testMultipleSynchronouszfailure.Failure)Úresr   c                 C  s$   |   t|dƒ¡ |  |jtj¡ d S )NÚtype)ry   Úhasattrr#   rÅ   r   ZExpectationTimeout)r   rÄ   r   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   r;   r³   rž   rÈ   rÇ   r´   r®   r«   rª   r#   rU   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œdd„Zddœdd„ZdS )	ÚCharacterAttributeTestszG
    Tests for L{twisted.conch.insults.helper.CharacterAttribute}.
    r   r   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.
        )rh   TF)rz   r{   r|   r}   r‚   ©rz   N)r#   r   ZCharacterAttributer   ÚBLUEZassertNotEqualr   r   r   r   r   Útest_equality7  s:     
ÿûûø 
ÿ
 
ÿ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   Z_FormattingStateZwantOneZflushWarningsÚtest_wantOneDeprecatedr#   rU   ÚDeprecationWarning)r   ZwarningsShownZdeprecatedClassr   r   r   rÑ   \  s    
þz.CharacterAttributeTests.test_wantOneDeprecatedN)r—   r˜   r™   Ú__doc__rÎ   rÑ   r   r   r   r   rË   2  s   %rË   )Ú
__future__r   ÚreÚtypingr   Ztwisted.conch.insultsr   Ztwisted.conch.insults.insultsr   r   r   r   r	   r
   r   r   r   r   r   Ztwisted.pythonr   Ztwisted.trialr   r%   r'   ZTestCaser   rš   r›   r°   rË   r   r   r   r   Ú<module>   s    4   `