a
    äze¹  ã                   @   s8  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
mZ edƒ e	dƒZe	dƒ e	dƒ zd dlZW n eyŽ   Y n0 dd„ Zdd	„ Zd
d„ Zej d¡ZdZe e pÈedkde ¡e ejdkd¡G dd„ dejƒƒƒZG dd„ dejƒZG dd„ dejƒZdd„ Zedkr4e ¡  dS )é    N)ÚrequiresÚimport_moduleÚverboseÚSaveSignalsÚcurseszcurses.asciizcurses.textpadc                 C   s   t  tt| ƒd|  ¡S )Nzrequires curses.%s)ÚunittestZ
skipUnlessÚhasattrr   ©Úname© r   ú&/usr/lib/python3.9/test/test_curses.pyÚrequires_curses_func   s    ÿr   c                    s   ‡ fdd„}|S )Nc                    s   t  ˆ ¡‡‡ fdd„ƒ}|S )Nc                    s4   t | jˆ ƒst dˆ  ¡‚ˆ| g|¢R i |¤Ž d S )Nzrequires curses.window.%s)r   Ústdscrr   ZSkipTest©ÚselfÚargsÚkwargs)r
   Útestr   r   Úwrapped   s    z:requires_curses_window_meth.<locals>.deco.<locals>.wrapped©Ú	functoolsÚwraps©r   r   r	   ©r   r   Údeco   s    z)requires_curses_window_meth.<locals>.decor   )r
   r   r   r	   r   Úrequires_curses_window_meth   s    r   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                    s4   t  ¡ s|  d¡ t  ¡  ˆ | g|¢R i |¤Ž d S )Núrequires colors support)r   Ú
has_colorsÚskipTestÚstart_colorr   r   r   r   r   )   s    
z requires_colors.<locals>.wrappedr   r   r   r   r   Úrequires_colors(   s    r    ZTERMiÿ  Úunknownz*$TERM=%r, calling initscr() may cause exitÚcygwinz!cygwin's curses mostly just hangsc                   @   s   e Zd Zedd„ ƒZdd„ Zedƒdd„ ƒZedƒ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ed%ƒd&d'„ ƒZd(d)„ Zd*d+„ Zd,d-„ Zed.ƒd/d0„ ƒZed1ƒd2d3„ ƒZd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%edFƒdGdH„ ƒZ&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*edQƒdRdS„ ƒZ+edTƒdUdV„ ƒZ,edWƒdXdY„ ƒZ-dZd[„ Z.d\d]„ Z/d^d_„ Z0d`da„ Z1e2dbdc„ ƒZ3e2ddde„ ƒZ4dfdg„ Z5e2dhdi„ ƒZ6e2djdk„ ƒZ7e2dldm„ ƒZ8ednƒe2dodp„ ƒƒZ9dqdr„ Z:edsƒdtdu„ ƒZ;edvƒdwdx„ ƒZ<edyƒdzd{„ ƒZ=edyƒd|d}„ ƒZ>edyƒd~d„ ƒZ?edyƒd€d„ ƒZ@ed‚ƒdƒd„„ ƒZAed…ƒd†d‡„ ƒZBedˆƒd‰dŠ„ ƒZCd‹dŒ„ ZDddŽ„ ZEedƒeF GeHeIdd‘ƒd’k d“¡d”d•„ ƒƒZJd–d—„ ZKd˜d™„ ZLed.ƒdšd›„ ƒZMdœS )Ú
TestCursesc                 C   s4   t rtdt› tjdd tj ¡ }tj|d d S )NzTERM=T©ÚfileÚflush)Úfd)	r   ÚprintÚtermÚsysÚstderrÚ
__stdout__Úfilenor   Z	setupterm)ÚclsÚ	stdout_fdr   r   r   Ú
setUpClass;   s    
zTestCurses.setUpClassc                 C   sT  d| _ tj| _tj ¡ }tj  ¡ sÀt |¡}|  tj|¡ |  tj	||¡ tj
  ¡ rdtj
}tj
| _nLztdddd}W n& tyœ   tjddd}d| _ Y n0 |  |j¡ d | _t 	| ¡ |¡ tƒ | _| j ¡  |  | jj¡ tr| jd urtj ¡  tj ¡  t| jdd t ¡ | _| j rFt ¡  |  tj¡ |  tj¡ | j ¡  d S )	NTz/dev/ttyÚwbr   )Ú	buffering)Úmoder2   Fr$   )Úisattyr*   r,   Úoutputr-   ÚosÚdupÚ
addCleanupÚcloseÚdup2Ú
__stderr__ÚopenÚOSErrorÚtempfileÚTemporaryFiler   Zsave_signalsÚsaveZrestorer   r+   r&   Ústdoutr(   r   Zinitscrr   ZsavettyÚendwinZresettyÚerase)r   r/   Zdup_fdÚtmpr   r   r   ÚsetUpD   s>    








zTestCurses.setUpÚfilterc                 C   s   t  ¡  d S ©N)r   rF   ©r   r   r   r   Útest_filtert   s    zTestCurses.test_filterÚuse_envc                 C   s   t  d¡ t  d¡ d S )NFT)r   rJ   rH   r   r   r   Útest_use_envz   s    
zTestCurses.test_use_envc                 C   sŒ  t  dd¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ t  dddd¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d	¡ | d
d¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | ddd
d¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | dd
¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | dddd
¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | dd¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d	¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | 	dd¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ | 	dd¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ d S )Né   é
   ©r   r   ©éÿÿÿÿrP   )rL   rM   é   é   )rR   rL   )rM   rQ   é   é   )rS   rT   ©é   rR   )é	   é   )é   é   )rR   rS   )rZ   é   é   é   )r\   r]   r   rV   )r   rV   )rR   rV   )
r   ÚnewwinÚassertEqualÚgetbegyxZgetparyxÚgetmaxyxÚsubwinZderwinZmvwinZmvderwin)r   ÚwinÚwin2Zwin3r   r   r   Útest_create_windows   sT    zTestCurses.test_create_windowsc                 C   sj   | j }| dddd¡}| dd¡ | dd¡ |  | ¡ d¡ |  | ¡ d¡ | ¡  |  | ¡ d	¡ d S )
NrM   rQ   rR   rL   rV   rY   rU   )rR   rY   )rY   rW   )r   rb   Úmover_   ÚgetyxZ	cursyncup)r   r   rc   r   r   r   Útest_move_cursorµ   s    zTestCurses.test_move_cursorc                 C   sÔ  | j }| ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ | dd¡ |  | d¡d¡ |  | d¡d¡ |  | ¡ d¡ | ddd¡ |  | d¡d¡ | dddd¡}| ddd	d
¡}| ¡  | ¡  | 	¡  |  | ¡ d¡ |  | ¡ d¡ | ¡  | ¡  | ¡  | 
¡  |  | ¡ d¡ t|dƒrÐtj d¡sÐ| ¡  | ¡  dD ]:}| |¡ | d¡ |  | ¡ |¡ |  | ¡ |¡ q”d S )NFTrL   rR   r\   rV   rM   rQ   rS   rT   ÚsyncokZsunos)FTÚa)r   ÚrefreshÚassertIsÚis_wintouchedZtouchwinZ
untouchwinZ	touchlineZis_linetouchedrb   ZsyncupZsyncdownr   r*   ÚplatformÚ
startswithri   Úaddch)r   r   rc   rd   ri   r   r   r   Útest_refresh_controlÀ   sJ    

zTestCurses.test_refresh_controlc              	   C   sp  | j }|j}| ¡  | dd¡ | d¡ | d¡ | d¡ d}z| |¡ W nR tyr   |  t|j|¡ Y n2 ty¢   | |¡}|  	t
|ƒdt|ƒ¡ Y n0 | dtj¡ | ddd¡ | dddtj¡ |  | ¡ d	¡ | ¡  | dd¡ | d¡ | d¡ | d¡ |  ttf¡ | d
¡ W d   ƒ n1 sD0    Y  | dtj¡ |  | ¡ d¡ d S )Nr   ÚAó   AéA   õ   â‚¬rV   rR   rS   Tu   Ä”F)r   Úencodingrk   rf   rp   ÚUnicodeEncodeErrorÚassertRaisesÚencodeÚOverflowErrorZassertNotEqualÚlenÚreprr   ÚA_BOLDrl   rm   Zechochar)r   r   rv   ÚcÚencodedr   r   r   Útest_output_characterð   s8    






*z TestCurses.test_output_characterc              
   C   s–  | j }|j}|j|jfD ]¨}|  |j¡ˆ | dd¡ |dƒ |dƒ d}z||ƒ W n" tyx   |  t|j	|¡ Y n0 |dt
jƒ |dddƒ |dddt
jƒ W d   ƒ q1 s¶0    Y  q|j|jfD ]Â}|  |j¡  | dd¡ |ddƒ |d	dƒ d
}z||dƒ W n$ ty6   |  t|j	|¡ Y n0 |ddƒ |ddt
jƒ |ddddƒ |ddddt
jƒ W d   ƒ qÎ1 s†0    Y  qÎd S )Nr   Zabcds   abcdu   Ã ÃŸÃ§Ä‘rV   rR   rS   Z1234s   1234u   Ù¡Ù¢Ù£Ù¤rL   )r   rv   ÚaddstrÚinsstrÚsubTestÚ__qualname__rf   rw   rx   ry   r   r}   ÚaddnstrÚinsnstr)r   r   rv   ÚfuncÚsr   r   r   Útest_output_string  s:    0


zTestCurses.test_output_stringc              	   C   s„   | j }dD ]t}| j|dT |  t|j|¡ |  t|j|d¡ |  t|j|¡ |  t|j|d¡ W d   ƒ q
1 st0    Y  q
d S )N)za s   a )ÚargrV   )r   rƒ   rx   Ú
ValueErrorr   r…   r‚   r†   )r   r   rŠ   r   r   r   Ú&test_output_string_embedded_null_chars8  s    z1TestCurses.test_output_string_embedded_null_charsc                 C   sì   | j }| dddtj¡ | dd¡ |  | ¡ dtjB ¡ |  | dd¡dtjB ¡ | dd¡ |  | ¡ d d… d¡ |  | d¡d d… d	¡ |  | dd
¡d d… d¡ |  | dd
d¡d¡ |  t	|jd¡ |  t	|jdd
d¡ d S )Nr   rV   ZABCDrt   rS   éC   r\   s    ABCD s    ABrR   rY   s   BCD éþÿÿÿ)
r   r   r   r}   rf   r_   ÚinchÚinstrrx   r‹   ©r   r   r   r   r   Útest_read_from_windowB  s    z TestCurses.test_read_from_windowc                 C   sº   t  dddd¡}dd d d… D ]}t  |¡ q|  | dd¡d¡ |  | ¡ d	¡ |  | dd
¡d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ d S )NrL   r[   rR   zspam
rP   rS   rV   és   )rS   rV   rY   ép   )rS   rY   éa   ém   rM   )r   r^   Úungetchr_   Zgetchrg   ©r   rc   r~   r   r   r   Ú
test_getchR  s    zTestCurses.test_getchc                 C   s0  t  dddd¡}t  ¡  |  t j¡ |  t|jd¡ |  t|jddd¡ dd d d… D ]}t  |¡ qV|  	| ddd¡d	¡ |  	| 
dd
¡d¡ |  	| ddd¡d¡ |  	| 
dd
¡d¡ |  	| dd¡d¡ |  	| 
dd
¡d¡ |  	| d¡d¡ |  	| 
dd
¡d¡ |  	| ¡ d¡ |  	| 
dd
¡d¡ d S )NrL   r[   rR   ipþÿÿrS   zLorem
ipsum
dolor
sit
amet
rP   rV   s   Lor   s    Lo         rM   s   ipsums    Lo  ipsum  s   dolors        dolor  s   sis   si   dolor  s   amets   amet dolor  )r   r^   Úechor8   Únoechorx   r‹   Zgetstrr—   r_   r   r˜   r   r   r   Útest_getstra  s"    zTestCurses.test_getstrc                 C   sô   t  dddd¡}t|ƒ | dd¡ | ¡  |  | dd¡ ¡ d¡ |  | dd¡ ¡ d¡ | dd	¡ | ¡  |  | dd¡ ¡ d
¡ |  | dd¡ ¡ d¡ |j	|j
fD ]B}t|ƒ |ƒ  |  | dd¡ ¡ d¡ |  | dd¡ ¡ d¡ q¬d S )NrL   rQ   rR   r   rZ   s   Lorem iprV   ó   dolor sit amet,rS   s   Loró    )r   r^   Úlorem_ipsumrf   Zclrtoeolr_   r   ÚrstripZclrtobotrC   Úclear)r   rc   r‡   r   r   r   Ú
test_clearw  s    zTestCurses.test_clearc                 C   s  t  dddd¡}t|ƒ | dd¡ | ¡  |  | dd¡d¡ | dd¡ |  | dd¡d¡ | dd¡ | ¡  |  | dd¡d¡ |  | dd¡d	¡ |  | dd¡d
¡ |  | dd¡d¡ |  | dd¡d¡ | dd¡ | ¡  |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d	¡ | 	¡  t|ƒ | dd¡ | 
d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ | 	¡  t|ƒ | dd¡ | 
d¡ |  | dd¡d¡ |  | dd¡d
¡ |  | dd¡d¡ |  | dd¡d¡ d S )NrL   rQ   rR   r   s   Loem ipsum     rT   s   Loem ipum      rV   s   consectetur    ó   adipiscing elitrS   s   sed do eiusmod rY   ó                  s   Lorem ipsum    r   rŽ   )r   r^   rŸ   rf   Zdelchr_   r   ZdeletelnZinsertlnr¡   Zinsdelln©r   rc   r   r   r   Útest_insert_delete‹  sF    

zTestCurses.test_insert_deletec                 C   s°   t  dddd¡}t|ƒ | d¡ | ¡  |  | dd¡d¡ | d¡ |  | dd¡d¡ | d¡ |  | dd¡d	¡ |  | dd¡d	¡ |  | d
d¡d¡ | d¡ d S )NrL   rQ   rR   Tr   r   r£   éýÿÿÿr¤   rS   F)r   r^   rŸ   ÚscrollokZscrollr_   r   r¥   r   r   r   Útest_scrollµ  s    


zTestCurses.test_scrollc                 C   sH   t  dddd¡}| t j¡ | t j¡ | t j¡ | ¡  | ¡  d S )NrL   rQ   rR   )r   r^   Zattronr}   ZattroffZattrsetZstandoutZstandendr¥   r   r   r   Útest_attributesÃ  s    zTestCurses.test_attributesÚchgatc                 C   sò  t  dddd¡}| ddd¡ | ddd¡ | dd¡ | t j¡ |  | dd	¡d
¡ |  | dd¡dt jB ¡ |  | dd¡dt jB ¡ | dd¡ | dt j¡ |  | dd¡d¡ |  | dd¡dt jB ¡ |  | dd¡dt jB ¡ |  | dd¡d¡ | ddt j	¡ |  | dd¡d¡ |  | dd¡dt j	B ¡ |  | dd¡dt j	B ¡ | ddd	t j¡ |  | dd¡dt j	B ¡ |  | dd¡dt jB ¡ |  | dd¡dt jB ¡ |  | dd¡dt j	B ¡ |  | dd¡dt j	B ¡ d S )NrL   rQ   rR   r   úLorem ipsumrS   zdolor sit ametrZ   rT   r”   r“   é   é    rV   éL   éo   ée   rY   r–   él   ér   rM   r•   r]   )
r   r^   r   rf   r«   ZA_BLINKr_   r   r}   ZA_UNDERLINEr¥   r   r   r   Ú
test_chgatÍ  s0    zTestCurses.test_chgatc                 C   sŠ  t  dddd¡}| ddd¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | d	¡ |  | ¡ d
¡ | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | dt j¡ |  | ¡ d
t jB ¡ |  | dd¡d¡ |  | dd¡d¡ | d¡ | 	d¡ |  | ¡ d¡ |  | dd¡d¡ |  | dd¡d¡ | 	dt j¡ |  | ¡ d
t jB ¡ |  | dd¡dt jB ¡ |  | dd¡d
t jB ¡ d S )NrL   rQ   rR   r   r¬   )r   r®   Ú_é_   ó   #é#   rt   r®   ú#r¯   )
r   r^   r   ÚassertInZgetbkgdZbkgdsetr_   Z	A_REVERSEr   Zbkgdr¥   r   r   r   Útest_backgroundì  s0    





zTestCurses.test_backgroundc              	   C   s   t  dddd¡}t|ƒ t  dddd¡}tdƒD ]}| |dd	¡ q0| |¡ |  | dd¡d
¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ | |¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ | |dddddd¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ | |dddddd¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ d S )NrL   é   rS   rY   rT   é   r\   r   Z_________________s   sectetur_________rV   s   piscing_elit,____rR   s   _do_eiusmod______s   _________________s   sectetur       __s   piscing elit,  __s    do eiusmod    __r]   s   __r_sit_amet_____s   __ectetur________s   __r sit amet_____s   __ectetur   _____)	r   r^   rŸ   Úranger   Zoverlayr_   r   Z	overwrite)r   ZsrcwinZdstwinÚir   r   r   Útest_overlay  s.    

zTestCurses.test_overlayc                 C   s@   t  dddd¡}| ¡  | dd¡ | ¡  | ¡  t  ¡  d S )NrL   rQ   rR   rV   )r   r^   ZnoutrefreshZredrawlnZ	redrawwinrk   Údoupdater¥   r   r   r   Útest_refresh*  s    zTestCurses.test_refreshÚresizec                 C   sL   t  dddd¡}| dd¡ |  | ¡ d¡ | dd¡ |  | ¡ d¡ d S )NrL   rQ   rR   rY   é   )rY   rÄ   )rL   rQ   )r   r^   rÃ   r_   ra   r¥   r   r   r   Útest_resize2  s
    zTestCurses.test_resizeÚenclosec                 C   s€   t  dddd¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd	¡¡ d S )
NrL   rQ   rR   rV   rY   r\   é   rT   rÄ   )r   r^   Ú
assertTruerÆ   ÚassertFalser¥   r   r   r   Útest_enclose:  s    zTestCurses.test_enclosec                 C   sž   t  dddd¡}| ddd¡ t ¡ d}| |¡ ~| d¡ t  |¡}|  | 	¡ d¡ |  | 
¡ d¡ |  | dd¡d	¡ W d   ƒ n1 s0    Y  d S )
NrL   r[   rV   rR   r¬   r   rU   )rL   r[   s    Lorem ipsum)r   r^   r   r>   r?   ZputwinÚseekZgetwinr_   r`   ra   r   )r   rc   Úfr   r   r   Útest_putwinE  s    



zTestCurses.test_putwinc                 C   s$  t  dddd¡}| dddddd	d
d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ | dddddddd¡ | ddddddd d!¡ |  t|jdddddg d d!¡
 |  t|jddddddd d!d"¡ |  t|jddddddd d!d"¡ | ddddddd ¡ | dddddd¡ | ddddd¡ | dddd¡ | ddd¡ | dd¡ | d¡ | ¡  | d#d$¡ |  | ddd%¡d&¡ |  | dd¡d'¡ |  | ddd%¡d&¡ | d(d)¡ | dd¡ |  t|jddd¡ |  t|jd¡ | ¡  | dd¡ | 	dd¡ |  | ddd*¡d+¡ | 	dd¡ | 	d,d¡ | 	ddt j
¡ | 	dddd¡ | 	ddddt j
¡ | dd¡ | d-d.¡ | d/d.¡ | d0d.¡ | d-d.t j¡ | ddd-d.¡ | ddd1dt j¡ |  | dd¡d2t jB ¡ |  | dd¡d2t jB ¡ |  | d.d¡d0¡ d S )3NrL   rM   rR   ú|ú!ú-rµ   ú+ú\r¹   ú/r   s
   +--------\rV   s
   |        !rY   s
   #________/ó   |ó   !ó   -ó   _ó   +ó   \r·   ó   /rt   éB   r   éD   éE   éF   éG   éH   éI   ú:ú~rZ   s   ~~~~~~~~s
   :        :ó   :ó   ~rT   s    ----- é-   rj   rS   ó   ar•   ú;é;   )r   r^   Zborderr_   r   rx   Ú	TypeErrorÚboxrf   Zhliner}   ZvlineZ
A_STANDOUTr   r¥   r   r   r   Útest_borders_and_linesQ  sr    ÿÿÿ
ÿ
ÿ
ÿ
z!TestCurses.test_borders_and_linesc                 C   sÀ   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |  ttjd¡ |  ttjd	¡ |  ttjd
¡ |  ttjd¡ |  ttjd¡ d S )Nrs   rr   rt   ó   
s   ^JÚ
rM   rž   s   ABÚ ZABì            )r_   r   Úunctrlrx   rê   rz   rH   r   r   r   Útest_unctrl‰  s    zTestCurses.test_unctrlc                 C   sT   | j s|  d¡ |  t ¡ d¡ t ¡  |  t ¡ d¡ t ¡  |  t ¡ d¡ d S )Núrequires terminalFT)r4   r   rl   r   ÚisendwinrB   rÁ   rH   r   r   r   Útest_endwin—  s    
zTestCurses.test_endwinc                 C   s   |   t d¡t¡ |  t d¡d¡ |  t d¡d¡ |   t d¡t¡ |  t d¡d¡ |  t d¡d¡ |   t d¡ttd ƒf¡ |  	t d¡¡ |  	t d¡¡ t d¡}|d urò|   |t¡ t 
|d¡ t 
|d¡}|   |t¡ t |¡ t d¡ d S )	NZhcÚcolsrP   ZcrrŽ   ÚcudrR   s   abc
)ÚassertIsInstancer   Z	tigetflagÚintr_   ZtigetnumÚtigetstrÚbytesÚtypeZassertIsNoneZtparmZputp)r   r÷   Zcud_2r   r   r   Útest_terminfo   s"    

zTestCurses.test_terminfoc                 C   sD   t  d¡ t  ¡  t  ¡  |  t  ¡ d¡ t  d¡ t  dd¡ d S )NrV   Féd   é2   )r   Zdelay_outputZflushinprÁ   rl   rô   ZnapmsZnewpadrH   r   r   r   Útest_misc_module_funcs¸  s    

z!TestCurses.test_misc_module_funcsc                 C   s¬   |   t ¡ t¡ |   t ¡ t¡ |   t ¡ t¡ |   t ¡ t¡ |   t 	¡ t¡ |   t 
¡ t¡ t ¡ }|   |t¡ |  t|ƒd¡ t ¡ }|   |t¡ |  t|ƒd¡ d S ©NrV   )rø   r   Ztermnamerû   ZlongnameZbaudraterù   Zhas_icÚboolZhas_ilZ	termattrsZkillcharr_   r{   Z	erasechar)r   r~   r   r   r   Útest_env_queriesÃ  s    zTestCurses.test_env_queriesc                 C   s¼   | j }| d¡ | d¡ | d¡ | d¡ | d¡ | d¡ t|dƒr`| d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | dd¡ t	 
¡  t	 d¡ t	 d¡ t	 ¡  d S )NTFÚimmedokrL   rM   )r   ZclearokZidcokZidlokr   r  Zleaveokr¨   Z	setscrregr   ZnonlÚnlr‘   r   r   r   Útest_output_optionsÓ  s&    














zTestCurses.test_output_optionsc                 C   s6  | j }| jrht ¡  t ¡  t d¡ t d¡ t d¡ t d¡ t ¡  t d¡ t d¡ t ¡  t ¡  t 	¡  t 	d¡ t 	d¡ t 
d¡ t 
d¡ | d¡ | d¡ t d¡ t d¡ | d¡ | d¡ t ¡  t d¡ t d¡ t ¡  | d¡ | d¡ | d¡ | d¡ | d¡ d S )NFTéÿ   rV   rP   r   rL   )r   r4   r   ZnocbreakZcbreakZ	intrflushÚrawZnorawr›   rš   Z	halfdelayZkeypadÚmetaZnodelayZ	noqiflushZqiflushZ	notimeoutÚtimeoutr‘   r   r   r   Útest_input_optionsñ  sB    





















zTestCurses.test_input_optionsÚ	typeaheadc                 C   s   t  tj ¡ ¡ t  d¡ d S )NrP   )r   r  r*   Ú	__stdin__r-   rH   r   r   r   Útest_typeahead  s    zTestCurses.test_typeaheadc                 C   s$   | j s|  d¡ t ¡  t ¡  d S )Nró   )r4   r   r   Zdef_prog_modeZreset_prog_moderH   r   r   r   Útest_prog_mode$  s    
zTestCurses.test_prog_modec                 C   sV   t  d¡d ust  d¡d ur&t  ¡  n,zt  ¡  W n t jyP   |  d¡ Y n0 d S )NÚbelÚflashzbeep() failed)r   rú   ZbeepÚerrorr   rH   r   r   r   Ú	test_beep*  s    ÿ
zTestCurses.test_beepc                 C   sV   t  d¡d ust  d¡d ur&t  ¡  n,zt  ¡  W n t jyP   |  d¡ Y n0 d S )Nr  r  zflash() failed)r   rú   r  r  r   rH   r   r   r   Ú
test_flash4  s    ÿ
zTestCurses.test_flashc              	   C   sP   dD ]F\}}t  |¡d ur&t  |¡ qzt  |¡ W q t jyH   Y q0 qd S )N))r   Zcivis)rR   Zcvvis)rV   Zcnorm)r   rú   Zcurs_setr  )r   ZvisZcapr   r   r   Útest_curs_set>  s    zTestCurses.test_curs_setÚget_escdelayc                 C   s<   t  ¡ }|  |t¡ t  d¡ |  t  ¡ d¡ t  |¡ d S )Né   )r   r  rø   rù   Zset_escdelayr_   )r   Zescdelayr   r   r   Útest_escdelayH  s
    
zTestCurses.test_escdelayÚget_tabsizec                 C   s<   t  ¡ }|  |t¡ t  d¡ |  t  ¡ d¡ t  |¡ d S )NrY   )r   r  rø   rù   Zset_tabsizer_   )r   Útabsizer   r   r   Útest_tabsizeP  s
    
zTestCurses.test_tabsizeÚgetsyxc                 C   sD   t  ¡ \}}|  |t¡ |  |t¡ t  dd¡ |  t  ¡ d¡ d S )NrY   rL   )rY   rL   )r   r  rø   rù   Zsetsyxr_   )r   ÚyÚxr   r   r   Útest_getsyxX  s
    zTestCurses.test_getsyxc                 C   s   dS ©N)lýÿÿÿ    l        lûÿÿÿ        l            rð   r   rH   r   r   r   Ú
bad_colors`  s    zTestCurses.bad_colorsc                 C   s   dS r   r   rH   r   r   r   Ú	bad_pairsc  s    zTestCurses.bad_pairsc                 C   s$   |   t ¡ t¡ |   t ¡ t¡ d S rG   )rø   r   r   r  Úcan_change_colorrH   r   r   r   Útest_has_colorsf  s    zTestCurses.test_has_colorsc                 C   sN   t  ¡ s|  d¡ t  ¡  trJtdt j› tjd tdt j	› tjd d S )Nr   z	COLORS = )r%   zCOLOR_PAIRS = )
r   r   r   r   r   r(   ÚCOLORSr*   r+   ÚCOLOR_PAIRSrH   r   r   r   Útest_start_colorj  s    
zTestCurses.test_start_colorc                 C   sŠ   |   t tj¡d¡ t d¡ ttjd tƒ}t |¡ |  ¡ D ]}|  t	tj|¡ q@tjtkrt|  tj
tjtj¡ |  tj
tjd¡ d S )N©r   r   r   r   rV   rP   )r_   r   Úcolor_contentÚCOLOR_BLACKÚminr%  Ú	SHORT_MAXr!  rx   rz   r  )r   ÚmaxcolorÚcolorr   r   r   Útest_color_contentr  s    


zTestCurses.test_color_contentc              	   C   sÌ  t  ¡ s|  d¡ t  d¡}zt jdg|¢R Ž  W n t jyP   |  d¡ Y n0 | jt jdg|¢R Ž  t  dddd¡ |  t  d¡d¡ t  dddd¡ |  t  d¡d¡ tt j	d t
ƒ}t  |¡}t j|g|¢R Ž  | jt j|g|¢R Ž  t  |ddd¡ |  t  |¡d	¡ |  ¡ D ]}|  tt j|ddd¡ qt j	t
kr\|  t jt jt j	ddd¡ |  t jt jd
ddd¡ dD ]N}|  t jt jd|dd¡ |  t jt jdd|d¡ |  t jt jddd|¡ qxd S )Nzcannot change colorr   z)cannot change color (init_color() failed)r(  éè  )r0  r0  r0  rV   éô  )r   r1  r0  rP   )rP   ié  )r   r#  r   r)  Z
init_colorr  r8   r_   r+  r%  r,  r!  rx   rz   )r   Úoldr-  r.  Úcompr   r   r   Útest_init_color  s6    


zTestCurses.test_init_colorc                 C   s   t tjtƒS rG   )r+  r   r&  r,  rH   r   r   r   Úget_pair_limit   s    zTestCurses.get_pair_limitc                 C   s€   t tdƒs$|  t d¡tjtjf¡ t d¡ |  ¡ d }|dkrLt |¡ |  ¡ D ]}|  t	tj|¡ qT|  tj
tjd¡ d S )NÚuse_default_colorsr   rV   rP   )r   r   r_   Úpair_contentÚCOLOR_WHITEr*  r5  r"  rx   rz   r  )r   ÚmaxpairÚpairr   r   r   Útest_pair_content£  s    

ÿ

zTestCurses.test_pair_contentc                 C   sŽ  t  d¡}t jdg|¢R Ž  | jt jdg|¢R Ž  t  ddd¡ |  t  d¡d¡ tt jd tƒ}t  d|d¡ |  t  d¡|df¡ t  dd|¡ |  t  d¡d|f¡ |  ¡ d }|dkrÞt  |dd¡ |  t  |¡d¡ |  	¡ D ]}|  
tt j|dd¡ qæ|  
t jt jddd¡ |  ¡ D ].}|  
tt jd|d¡ |  
tt jdd|¡ qt jtkrŠ|  
t jt jdt jd¡ |  
t jt jddt j¡ d S )NrV   r   rN   rP   )r   r7  Z	init_pairr8   r_   r+  r%  r,  r5  r"  rx   rz   r  r!  )r   r2  r-  r9  r:  r.  r   r   r   Útest_init_pair±  s.    
zTestCurses.test_init_pairc                 C   sh   dD ]:}t  |¡}|  t  |¡||¡ |  t  |t jB ¡|¡ q|  t  d¡d¡ |  t  d¡d¡ d S )N)r   rV   r  r   )r   Z
color_pairr_   Zpair_numberr}   )r   r:  Úattrr   r   r   Útest_color_attrsÍ  s    
zTestCurses.test_color_attrsr6  c                 C   sf   t  d¡}zt  ¡  W n t jy4   |  d¡ Y n0 |  t  d¡d¡ |  |t jt jfddg¡ d S )Nr   z1cannot change color (use_default_colors() failed)rO   rN   )	r   r7  r6  r  r   r_   rº   r8  r*  )r   r2  r   r   r   Útest_use_default_colorsÖ  s    
z"TestCurses.test_use_default_colorsc                 C   sn   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |  ttjd	¡ |  t d
¡t¡ d S )Nrt   rs   rX   s   ^Mé   s   ^?r   s   ^@rP   é   )r_   r   Zkeynamerx   r‹   rø   rû   rH   r   r   r   Útest_keynameá  s    zTestCurses.test_keynameÚhas_keyc                 C   s   t  d¡ d S )NrX   )r   rC  rH   r   r   r   Útest_has_keyê  s    zTestCurses.test_has_keyÚgetmousec                 C   sL   t  t j¡\}}|dkr"|  d¡ t  d¡ t  ddddt j¡ t  ¡ }d S )Nr   zmouse stuff not availablerM   )r   Z	mousemaskZBUTTON1_PRESSEDr   ZmouseintervalZ
ungetmouserE  )r   Z	availmaskZoldmaskÚmr   r   r   Útest_getmouseî  s    

zTestCurses.test_getmouseÚpanelc                 C   sV   t  dd¡}t j |¡}| jt jjdd | ¡  W d   ƒ n1 sH0    Y  d S )NrM   z!userptr should fail since not set)Úmsg)r   r^   rH  Ú	new_panelrx   r  Zuserptr)r   ÚwÚpr   r   r   Útest_userptr_without_setø  s    
ÿz#TestCurses.test_userptr_without_setc                 C   sb   t  dd¡}t j |¡}tƒ }t |¡}tdƒD ]}| |¡ q0| d ¡ |  	t |¡|d¡ d S )NrM   rþ   zset_userptr leaked references)
r   r^   rH  rJ  Úobjectr*   Úgetrefcountr¾   Úset_userptrr_   )r   rK  rL  ÚobjZnrefsr¿   r   r   r   Útest_userptr_memory_leak  s    

ÿz#TestCurses.test_userptr_memory_leakc                    sD   t  dd¡}t j |¡‰ G ‡ fdd„dƒ}ˆ  |ƒ ¡ ˆ  d ¡ d S )NrM   c                       s   e Zd Z‡ fdd„ZdS )z+TestCurses.test_userptr_segfault.<locals>.Ac                    s   ˆ   d ¡ d S rG   )rP  rH   ©rH  r   r   Ú__del__  s    z3TestCurses.test_userptr_segfault.<locals>.A.__del__N)Ú__name__Ú
__module__r„   rT  r   rS  r   r   rr     s   rr   )r   r^   rH  rJ  rP  )r   rK  rr   r   rS  r   Útest_userptr_segfault  s
    z TestCurses.test_userptr_segfaultc                 C   s,   t  dd¡}t j |¡}|  tt|ƒ¡ d S )NrM   )r   r^   rH  rJ  rx   rê   rü   )r   rK  rH  r   r   r   Útest_new_curses_panel  s    z TestCurses.test_new_curses_panelÚis_term_resizedc                 C   sB   t jt j }}|  t  ||¡d¡ |  t  |d |d ¡d¡ d S )NFrV   T)r   ÚLINESÚCOLSrl   rY  ©r   Úlinesrö   r   r   r   Útest_is_term_resized  s    zTestCurses.test_is_term_resizedÚresize_termc                 C   sz   t  ¡  t jt j }}|d }|d }t  ||¡ |  t j|¡ |  t j|¡ t  ||¡ |  t j|¡ |  t j|¡ d S r  )r   Úupdate_lines_colsrZ  r[  r_  r_   ©r   r]  rö   Z	new_linesZnew_colsr   r   r   Útest_resize_term$  s    zTestCurses.test_resize_termÚ
resizetermc                 C   sz   t  ¡  t jt j }}|d }|d }t  ||¡ |  t j|¡ |  t j|¡ t  ||¡ |  t j|¡ |  t j|¡ d S r  )r   r`  rZ  r[  rc  r_   ra  r   r   r   Útest_resizeterm2  s    zTestCurses.test_resizetermc                 C   sX   t  d¡ |  | j ¡ d¡ t  d¡ |  | j ¡ d¡ t  d¡ |  | j ¡ d¡ d S )Nrs   rr   ÚBr   ÚC)r   r—   r_   r   ÚgetkeyrH   r   r   r   Útest_ungetch@  s    


zTestCurses.test_ungetchc                 C   s   t  d¡ | j ¡  d S )Ni  )r   r—   r   rg  rH   r   r   r   Útest_issue6243H  s    
zTestCurses.test_issue6243Ú	unget_wchÚncurses_version)éc   )rL   rZ   z.unget_wch is broken in ncurses 5.7 and earlierc                 C   sÄ   | j }|j}dD ]®}z| |¡ W n ty8   Y qY n0 zt |¡ W n: ty‚ } z"|  d||j|f ¡ W Y d }~n
d }~0 0 | ¡ }|  	||¡ t
|ƒ}t |¡ | ¡ }|  	||¡ qd S )N)rj   õ   Ã©ru   u   ô¿¿z)unget_wch(%a) failed with encoding %s: %s)r   rv   ry   rw   r   rj  Ú	ExceptionZfailZget_wchr_   Úord)r   r   rv   ÚchÚerrÚreadÚcoder   r   r   Útest_unget_wchL  s&    

ÿ
zTestCurses.test_unget_wchc                 C   s†   | j }dd l}|j}| |¡ |  t¡ d|_W d   ƒ n1 sD0    Y  ||_|  t¡ |`W d   ƒ n1 sx0    Y  d S )Nr   rM   )r   Úcodecsrv   Úlookuprx   rê   )r   r   ru  rv   r   r   r   Útest_encodingd  s    
$zTestCurses.test_encodingc                 C   sV   | j }zt |j¡}|  |¡ W n ty2   Y n0 |jj d¡d }|  d|¡ d S )Nrî   r   z[y, x,])	r   ÚinspectÚ	signaturerp   rÉ   r‹   Ú__doc__Úsplitrº   )r   r   ry  Zhuman_readable_signaturer   r   r   Útest_issue21088o  s    
	zTestCurses.test_issue21088c                 C   sN   t  dddd¡}t jj|dd}| ¡ \}}| |d |d ¡ | d¡ d S )NrL   rQ   rR   T)Zinsert_moderj   )r   r^   ZtextpadZTextboxra   rÃ   Z_insert_printable_char)r   rc   rë   r]  rö   r   r   r   Útest_issue13051‹  s
    zTestCurses.test_issue13051N)NrU  rV  r„   Úclassmethodr0   rE   r   rI   rK   re   rh   rq   r€   r‰   rŒ   r’   r™   rœ   r¢   r¦   r©   rª   r   r´   r»   rÀ   rÂ   rÅ   rÊ   rÍ   rì   rò   rõ   rý   r   r  r  r  r  r  r  r  r  r  r  r  r!  r"  r$  r'  r    r/  r4  r5  r;  r<  r>  r?  rB  rD  rG  rM  rR  rW  rX  r^  rb  rd  rh  ri  r   ÚskipIfÚgetattrr   rt  rw  r|  r}  r   r   r   r   r#   5   sÄ   
0

40&"
*

!


8	.








 


		

	


	



ÿr#   c                   @   s,   e Zd Zedƒdd„ ƒZedƒdd„ ƒZdS )Ú	MiscTestsr`  c                 C   sJ   t  ¡  t jt j }}d t _t _t  ¡  |  t j|¡ |  t j|¡ d S )Nr   )r   r`  rZ  r[  r_   r\  r   r   r   Útest_update_lines_cols—  s    z MiscTests.test_update_lines_colsrk  c                 C   s   t j}trtdt j› dd |  |d d … t¡ |  t|ƒd¡ |  |d t¡ |  |d t¡ |  |d t¡ |  |j	t¡ |  |j
t¡ |  |jt¡ |  |d |j	¡ |  |d |j
¡ |  |d |j¡ |  |j	d¡ |  |j
d¡ |  |jd¡ d S )Nzncurses_version = T)r&   rS   r   rV   rR   )r   rk  r   r(   rø   Útupler_   r{   rù   ÚmajorÚminorZpatchZassertGreaterEqual)r   Úvr   r   r   Útest_ncurses_version   s"    zMiscTests.test_ncurses_versionN)rU  rV  r„   r   r‚  r‡  r   r   r   r   r  •  s   
r  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S )Ú	TestAsciic                 C   s&   t jjD ]}|  tt j|ƒ|¡ qd S rG   )r   ÚasciiZcontrolnamesrÈ   r   )r   r
   r   r   r   Útest_controlnames·  s    zTestAscii.test_controlnamesc                    s¢  ‡ ‡‡fdd„}t dƒD ]T‰tˆƒ‰ tˆgƒ}|tjj| ¡ ƒ |tjj| ¡ ƒ |tjj| ¡ ƒ |tjj| ¡ ƒ |tjj	| 	¡ ƒ |tjj
| 
¡ ƒ |tjjˆdk ƒ |tjjˆdkƒ |tjjˆdk ƒ |tjjˆdk pèˆdkƒ |tjjˆ dv ƒ |tjjdˆ  k odkn  ƒ |tjjdˆ  ko>dkn  ƒ |tjjˆ tjv ƒ |tjjˆ tjv ƒ qd	d
dtjtjd fD ]‰ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj 	ˆ¡¡ ˆ tj 
ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ ˆ tj ˆ¡¡ q†ˆ tj d
¡¡ d S )Nc                    sR   ˆj ˆ | d0 ˆ | ˆƒ|¡ ˆ | ˆ ƒ|¡ W d   ƒ n1 sD0    Y  d S )N)rp  r‡   )rƒ   r_   )r‡   Zexpected©r~   r¿   r   r   r   Úcheck¼  s    z$TestAscii.test_ctypes.<locals>.checkrA  é€   r®   r@  z 	é~   rŽ   rP   rV   )r¾   Úchrrû   r   r‰  ÚisalnumÚisalphaÚisdigitÚislowerÚisspaceÚisupperÚisasciiZismetaZisctrlZiscntrlZisblankZisgraphZisprintZispunctÚstringÚpunctuationZisxdigitÚ	hexdigitsr*   Ú
maxunicoderÉ   )r   rŒ  Úbr   r‹  r   Útest_ctypes»  sF    
$$zTestAscii.test_ctypesc                 C   sD   t jj}|  |dƒd¡ |  |dƒd¡ |  |tdƒƒtdƒ¡ d S )Nõ   Ãrr   )r   r‰  r_   ro  )r   r‰  r   r   r   Ú
test_asciiè  s    zTestAscii.test_asciic                 C   sT   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |tdƒƒtdƒ¡ d S )NÚJrî   ú@ú )r   r‰  Úctrlr_   ro  )r   r¢  r   r   r   Ú	test_ctrlî  s
    zTestAscii.test_ctrlc                 C   s@   t jj}|  |dƒd¡ |  |dƒd¡ |  |tdƒƒd¡ d S )Nrî   õ   ÂŠrr   r  éÁ   )r   r‰  Úaltr_   ro  )r   r¦  r   r   r   Útest_altõ  s    zTestAscii.test_altc                 C   sì   t jj}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |d	ƒd
¡ |  |tdƒƒd¡ |  |tdƒƒd¡ |  |dƒd¡ |  |dƒd¡ |  |tdƒƒd¡ |  |tdƒƒd¡ d S )Nrj   rr   rè   ú úz^?rî   z^Jr¡  z^@r¤  z!^Jr  z!A)r   r‰  rñ   r_   ro  )r   rñ   r   r   r   rò   û  s    zTestAscii.test_unctrlN)	rU  rV  r„   rŠ  rœ  rž  r£  r§  rò   r   r   r   r   rˆ  µ  s   -rˆ  c                 C   sT   g d¢}|   ¡ \}}t|d |… ƒD ]*\}}|  |d|d |||d k … ¡ q$d S )N)	r¬   zdolor sit amet,Zconsecteturzadipiscing elit,zsed do eiusmodztempor incididuntzut labore etzdolore magnazaliqua.r   rV   )ra   Ú	enumerater   )rc   ÚtextZmaxyZmaxxr  Úliner   r   r   rŸ     s    rŸ   Ú__main__)r   rx  r6   r—  r*   r>   r   Ztest.supportr   r   r   r   r   Zcurses.panelÚImportErrorr   r   r    ÚenvironÚgetr)   r,  r  rn   ZTestCaser#   r  rˆ  rŸ   rU  Úmainr   r   r   r   Ú<module>   sP   	ÿÿ        d X
