o
    HXîhTº  ã                   @   sJ  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mZ d dlmZ edƒ edƒZedƒ edƒ zd dlZW n	 eyO   Y nw dd„ Zd	d
„ Zdd„ Zej d¡ZdZe e ple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r£e !¡  dS dS )é    N)ÚrequiresÚverboseÚSaveSignalsÚcpython_onlyÚcheck_disallow_instantiation)Úimport_moduleÚcurseszcurses.asciizcurses.textpadc                 C   s   t  tt| ƒd|  ¡S )Nzrequires curses.%s)ÚunittestZ
skipUnlessÚhasattrr   ©Úname© r   ú:/opt/python-3.10.19/usr/lib/python3.10/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„ Z1dbdc„ Z2e3ddde„ ƒZ4e3dfdg„ ƒZ5dhdi„ Z6e3djdk„ ƒZ7e3dldm„ ƒZ8e3dndo„ ƒZ9edpƒe3dqdr„ ƒƒZ:dsdt„ Z;eduƒdvdw„ ƒZ<edxƒdydz„ ƒZ=ed{ƒd|d}„ ƒZ>ed{ƒd~d„ ƒZ?ed{ƒd€d„ ƒZ@eAed{ƒd‚dƒ„ ƒƒZBed„ƒd…d†„ ƒZCed‡ƒdˆd‰„ ƒZDedŠƒd‹dŒ„ ƒZEddŽ„ ZFdd„ ZGed‘ƒeH IeJeKd’d“ƒd”k d•¡d–d—„ ƒƒZLd˜d™„ ZMdšd›„ ZNed.ƒdœd„ ƒZOdž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   sN  d| _ tj| _tj ¡ }tj  ¡ s`t |¡}|  tj|¡ |  tj	||¡ tj
  ¡ r2tj
}tj
| _n&z	tdddd}W n tyN   tjddd}d| _ Y nw |  |j¡ d | _t 	| ¡ |¡ tƒ | _| j ¡  |  | jj¡ trˆ| jd urˆtj ¡  tj ¡  t| jdd t ¡ | _| j r t ¡  |  tj¡ |  tj¡ | j ¡  d S )	NTz/dev/ttyÚwbr   )Ú	buffering)Úmoder4   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   r1   Zdup_fdÚtmpr   r   r   ÚsetUpF   s@   





ú



zTestCurses.setUpÚfilterc                 C   s   t  ¡  d S ©N)r   rH   ©r   r   r   r   Útest_filterv   s   zTestCurses.test_filterÚuse_envc                 C   s   t  d¡ t  d¡ d S )NFT)r   rL   rJ   r   r   r   Útest_use_env|   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   ©éÿÿÿÿrR   )rN   rO   é   é   )rT   rN   )rO   rS   é   é   )rU   rV   ©é   rT   )é	   é   )é   é   )rT   rU   )r\   é   é   é   )r^   r_   r   rX   )r   rX   )rT   rX   )
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 )
NrO   rS   rT   rN   rX   r[   rW   )rT   r[   )r[   rY   )r   rd   Úmovera   ÚgetyxZ	cursyncup)r   r   re   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 d S d S )NFTrN   rT   r^   rX   rO   rS   rU   rV   ÚsyncokZsunos)FTÚa)r   ÚrefreshÚassertIsÚis_wintouchedZtouchwinZ
untouchwinZ	touchlineZis_linetouchedrd   ZsyncupZsyncdownr
   r,   ÚplatformÚ
startswithrk   Úaddch)r   r   re   rf   rk   r   r   r   Útest_refresh_controlÂ   sN   

ùzTestCurses.test_refresh_controlc              	   C   sn  | j }|j}| ¡  | dd¡ | d¡ | d¡ | d¡ d}z| |¡ W n) ty9   |  t|j|¡ Y n tyQ   | |¡}|  	t
|ƒdt|ƒ¡ Y nw | 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 s¡w   Y  | dtj¡ |  | ¡ d¡ d S )Nr   ÚAó   AéA   õ   â‚¬rX   rT   rU   Tu   Ä”F)r   Úencodingrm   rh   rr   ÚUnicodeEncodeErrorÚassertRaisesÚencodeÚOverflowErrorZassertNotEqualÚlenÚreprr   ÚA_BOLDrn   ro   Zechochar)r   r   rx   ÚcÚencodedr   r   r   Útest_output_characterò   s<   



þ


úz TestCurses.test_output_characterc              
   C   s’  | j }|j}|j|jfD ]T}|  |j¡D | dd¡ |dƒ |dƒ d}z||ƒ W n ty<   |  t|j	|¡ Y nw |dt
jƒ |dddƒ |dddt
jƒ W d   ƒ n1 s[w   Y  q|j|jfD ]_}|  |j¡O | dd¡ |ddƒ |d	dƒ d
}z||dƒ W n tyš   |  t|j	|¡ Y nw |ddƒ |ddt
jƒ |ddddƒ |ddddt
jƒ W d   ƒ n1 sÁw   Y  qgd S )Nr   Zabcds   abcdu   Ã ÃŸÃ§Ä‘rX   rT   rU   Z1234s   1234u   Ù¡Ù¢Ù£Ù¤rN   )r   rx   ÚaddstrÚinsstrÚsubTestÚ__qualname__rh   ry   rz   r{   r   r   ÚaddnstrÚinsnstr)r   r   rx   ÚfuncÚsr   r   r   Útest_output_string  sH   ÿõ€

ÿ
ô€ÿzTestCurses.test_output_stringc              	   C   s„   | j }dD ]:}| j|d* |  t|j|¡ |  t|j|d¡ |  t|j|¡ |  t|j|d¡ W d   ƒ n1 s:w   Y  qd S )N)za s   a )ÚargrX   )r   r…   rz   Ú
ValueErrorrƒ   r‡   r„   rˆ   )r   r   rŒ   r   r   r   Ú&test_output_string_embedded_null_chars:  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   rX   ZABCDrv   rU   éC   r^   s    ABCD s    ABrT   r[   s   BCD éþÿÿÿ)
r   rƒ   r   r   rh   ra   ÚinchÚinstrrz   r   ©r   r   r   r   r   Útest_read_from_windowD  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 )NrN   r]   rT   zspam
rR   rU   rX   és   )rU   rX   r[   ép   )rU   r[   éa   ém   rO   )r   r`   Úungetchra   Zgetchri   ©r   re   r€   r   r   r   Ú
test_getchT  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  |¡ q+|  	| 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 )NrN   r]   rT   ipþÿÿrU   zLorem
ipsum
dolor
sit
amet
rR   rX   s   Lor   s    Lo         rO   s   ipsums    Lo  ipsum  s   dolors        dolor  s   sis   si   dolor  s   amets   amet dolor  )r   r`   Úechor:   Únoechorz   r   Zgetstrr™   ra   r’   rš   r   r   r   Útest_getstrc  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 ]!}t|ƒ |ƒ  |  | dd¡ ¡ d¡ |  | dd¡ ¡ d¡ qVd S )NrN   rS   rT   r   r\   s   Lorem iprX   ó   dolor sit amet,rU   s   Loró    )r   r`   Úlorem_ipsumrh   Zclrtoeolra   r’   ÚrstripZclrtobotrE   Úclear)r   re   r‰   r   r   r   Ú
test_cleary  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 )NrN   rS   rT   r   s   Loem ipsum     rV   s   Loem ipum      rX   s   consectetur    ó   adipiscing elitrU   s   sed do eiusmod r[   ó                  s   Lorem ipsum    rŸ   r   )r   r`   r¡   rh   Zdelchra   r’   ZdeletelnZinsertlnr£   Zinsdelln©r   re   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 )NrN   rS   rT   Tr   rŸ   r¥   éýÿÿÿr¦   rU   F)r   r`   r¡   ÚscrollokZscrollra   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 )NrN   rS   rT   )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 )NrN   rS   rT   r   úLorem ipsumrU   zdolor sit ametr\   rV   r–   r•   é   é    rX   éL   éo   ée   r[   r˜   él   ér   rO   r—   r_   )
r   r`   rƒ   rh   r­   ZA_BLINKra   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 )NrN   rS   rT   r   r®   )r   r°   Ú_é_   ó   #é#   rv   r°   ú#r±   )
r   r`   rƒ   ÚassertInZgetbkgdZbkgdsetra   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	¡ q| |¡ |  | 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 )NrN   é   rU   r[   rV   é   r^   r   Z_________________s   sectetur_________rX   s   piscing_elit,____rT   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overlayra   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 )NrN   rS   rT   rX   )r   r`   ZnoutrefreshZredrawlnZ	redrawwinrm   Ú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 )NrN   rS   rT   r[   é   )r[   rÆ   )rN   rS   )r   r`   rÅ   ra   rc   r§   r   r   r   Útest_resize4  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
d	¡d¡ |  | dd¡d¡ d S )NrN   rS   rT   TrX   Fr[   r^   é   rV   rÆ   )r   r`   rn   rÈ   r§   r   r   r   Útest_enclose<  s   zTestCurses.test_enclosec                 C   s    t  dddd¡}| ddd¡ t ¡ 3}| |¡ ~| d¡ t  |¡}|  | 	¡ d¡ |  | 
¡ d¡ |  | dd¡d	¡ W d   ƒ d S 1 sIw   Y  d S )
NrN   r]   rX   rT   r®   r   rW   )rN   r]   s    Lorem ipsum)r   r`   rƒ   r@   rA   ZputwinÚseekZgetwinra   rb   rc   r’   )r   re   Úfr   r   r   Útest_putwinF  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 )3NrN   rO   rT   ú|ú!ú-r·   ú+ú\r»   ú/r   s
   +--------\rX   s
   |        !r[   s
   #________/ó   |ó   !ó   -ó   _ó   +ó   \r¹   ó   /rv   éB   r   éD   éE   éF   éG   éH   éI   ú:ú~r\   s   ~~~~~~~~s
   :        :ó   :ó   ~rV   s    ----- é-   rl   rU   ó   ar—   ú;é;   )r   r`   Zborderra   r’   rz   Ú	TypeErrorÚboxrh   Zhliner   ZvlineZ
A_STANDOUTr‘   r§   r   r   r   Útest_borders_and_linesR  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 )Nru   rt   rv   ó   
s   ^JÚ
rO   r    s   ABÚ ZABì            )ra   r   Úunctrlrz   rê   r|   rJ   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)r6   r    rn   r   ÚisendwinrD   rÃ   rJ   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ry|   |t¡ t 
|d¡ t 
|d¡}|   |t¡ t |¡ t d¡ d S )	NZhcÚcolsrR   Zcrr   ÚcudrT   s   abc
)ÚassertIsInstancer   Z	tigetflagÚintra   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 )NrX   Féd   é2   )r   Zdelay_outputZflushinprÃ   rn   rô   ZnapmsZnewpadrJ   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 ©NrX   )rø   r   Ztermnamerû   ZlongnameZbaudraterù   Zhas_icÚboolZhas_ilZ	termattrsZkillcharra   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ƒr0| d¡ | d¡ | d¡ | d¡ | d¡ | d¡ | dd¡ t	 
¡  t	 d¡ t	 d¡ t	 ¡  d S )NTFÚimmedokrN   rO   )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r4t ¡  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éÿ   rX   rR   r   rN   )r   r6   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 )NrR   )r   r  r,   Ú	__stdin__r/   rJ   r   r   r   Útest_typeahead   s   zTestCurses.test_typeaheadc                 C   s$   | j s|  d¡ t ¡  t ¡  d S )Nró   )r6   r    r   Zdef_prog_modeZreset_prog_moderJ   r   r   r   Útest_prog_mode%  s   
zTestCurses.test_prog_modec                 C   óX   t  d¡d ust  d¡d urt  ¡  d S zt  ¡  W d S  t jy+   |  d¡ Y d S w )NÚbelÚflashzbeep() failed)r   rú   ZbeepÚerrorr    rJ   r   r   r   Ú	test_beep+  ó   ÿzTestCurses.test_beepc                 C   r  )Nr  r  zflash() failed)r   rú   r  r  r    rJ   r   r   r   Ú
test_flash5  r  zTestCurses.test_flashc              	   C   sN   dD ]"\}}t  |¡d urt  |¡ qzt  |¡ W q t jy$   Y qw d S )N))r   Zcivis)rT   Zcvvis)rX   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   ó<   t  ¡ }|  |t¡ t  d¡ |  t  ¡ d¡ t  |¡ d S )Né   )r   r  rø   rù   Zset_escdelayra   )r   Zescdelayr   r   r   Útest_escdelayI  ó
   
zTestCurses.test_escdelayÚget_tabsizec                 C   r  )Nr[   )r   r  rø   rù   Zset_tabsizera   )r   Útabsizer   r   r   Útest_tabsizeQ  r  zTestCurses.test_tabsizeÚgetsyxc                 C   sD   t  ¡ \}}|  |t¡ |  |t¡ t  dd¡ |  t  ¡ d¡ d S )Nr[   rN   )r[   rN   )r   r   rø   rù   Zsetsyxra   )r   ÚyÚxr   r   r   Útest_getsyxY  s
   zTestCurses.test_getsyxc                 C   s   dt jdddddfS )NrR   ìýÿÿÿ    ì        ìûÿÿÿ        ì            rð   ©r   ÚCOLORSrJ   r   r   r   Ú
bad_colorsa  s   zTestCurses.bad_colorsc                 C   s   t jdddfS )Nr%  r'  rð   r(  rJ   r   r   r   Úbad_colors2d  ó   zTestCurses.bad_colors2c                 C   s   dS )N)rR   r$  r%  r&  r'  rð   r   rJ   r   r   r   Ú	bad_pairsg  s   zTestCurses.bad_pairsc                 C   s$   |   t ¡ t¡ |   t ¡ t¡ d S rI   )rø   r   r   r  Úcan_change_colorrJ   r   r   r   Útest_has_colorsj  s   zTestCurses.test_has_colorsc                 C   sR   t  ¡ s	|  d¡ t  ¡  tr'tdt j› tjd tdt j	› tjd d S d S )Nr   z	COLORS = )r'   zCOLOR_PAIRS = )
r   r   r    r!   r   r*   r)  r,   r-   ÚCOLOR_PAIRSrJ   r   r   r   Útest_start_colorn  s   
þzTestCurses.test_start_colorc                 C   sT   |   t tj¡d¡ t d¡ tjd }t |¡ |  ¡ D ]
}|  ttj|¡ qd S )N©r   r   r   r   rX   )ra   r   Úcolor_contentÚCOLOR_BLACKr)  r*  rz   r   )r   ÚmaxcolorÚcolorr   r   r   Útest_color_contentv  s   


ÿzTestCurses.test_color_contentc              	   C   s~  t  ¡ s	|  d¡ t  d¡}zt jdg|¢R Ž  W n t jy(   |  d¡ Y nw | jt jdg|¢R Ž  t  dddd¡ |  t  d¡d¡ t  dddd¡ |  t  d¡d¡ t jd }t  |¡}t j|g|¢R Ž  | jt j|g|¢R Ž  t  |ddd¡ |  t  |¡d	¡ |  	¡ D ]}|  
tt j|ddd¡ q‰d
D ]#}|  
tt jd|dd¡ |  
tt jdd|d¡ |  
tt jddd|¡ q™d S )Nzcannot change colorr   z)cannot change color (init_color() failed)r2  éè  )r8  r8  r8  rX   éô  )r   r9  r8  )rR   ié  )r   r.  r    r3  Z
init_colorr  r:   ra   r)  r*  rz   r   )r   Úoldr5  r6  Úcompr   r   r   Útest_init_color€  s4   

ÿ

ýzTestCurses.test_init_colorc                 C   sŽ   t j}tt dƒrEt  ¡ r|dt j d 7 }t  ¡ r&dt j  kr$dk r+n nt|tƒ}zt  |d dd¡ W |S  t	yD   t j}Y |S w |S )NÚncurses_versionrT   rX   )r^   rX   )r^   rT   r   )
r   r0  r
   Úhas_extended_color_supportr)  r=  ÚminÚ	SHORT_MAXÚ	init_pairr   )r   Z
pair_limitr   r   r   Úget_pair_limitž  s   

þþzTestCurses.get_pair_limitc                 C   sn   t tdƒs|  t d¡tjtjf¡ t d¡ |  ¡ d }|dkr&t |¡ |  ¡ D ]
}|  t	tj|¡ q*d S )NÚuse_default_colorsr   rX   )
r
   r   ra   Úpair_contentÚCOLOR_WHITEr4  rB  r-  rz   r   )r   ÚmaxpairÚpairr   r   r   Útest_pair_content¯  s   

ÿ

ÿzTestCurses.test_pair_contentc                 C   s4  t  d¡}t jdg|¢R Ž  | jt jdg|¢R Ž  t  ddd¡ |  t  d¡d¡ t jd }t  d|d¡ |  t  d¡|df¡ t  dd|¡ |  t  d¡d|f¡ |  ¡ d }|dkrlt  |dd¡ |  t  |¡d¡ |  ¡ D ]}|  t	t j|dd¡ qp|  
¡ D ]}|  t	t jd|d¡ |  t	t jdd|¡ qd S )NrX   r   rP   )r   rD  rA  r:   ra   r)  rB  r-  rz   r   r+  )r   r:  r5  rF  rG  r6  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   rX   r  r   )r   Z
color_pairra   Zpair_numberr   )r   rG  Úattrr   r   r   Útest_color_attrsÔ  s   
zTestCurses.test_color_attrsrC  c                 C   sf   t  d¡}zt  ¡  W n t jy   |  d¡ Y nw |  t  d¡d¡ |  |t jt jfddg¡ d S )Nr   z1cannot change color (use_default_colors() failed)rQ   rP   )	r   rD  rC  r  r    ra   r¼   rE  r4  )r   r:  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 )Nrv   ru   rZ   s   ^Mé   s   ^?r   s   ^@rR   é   )ra   r   Zkeynamerz   r   rø   rû   rJ   r   r   r   Útest_keynameè  s   zTestCurses.test_keynameÚhas_keyc                 C   s   t  d¡ d S )NrZ   )r   rP  rJ   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 availablerO   )r   Z	mousemaskZBUTTON1_PRESSEDr    ZmouseintervalZ
ungetmouserR  )r   Z	availmaskZoldmaskÚmr   r   r   Útest_getmouseõ  s   

zTestCurses.test_getmouseÚpanelc                 C   sX   t  dd¡}t j |¡}| jt jjdd | ¡  W d   ƒ d S 1 s%w   Y  d S )NrO   z!userptr should fail since not set)Úmsg)r   r`   rU  Ú	new_panelrz   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 ]}| |¡ q| d ¡ |  	t |¡|d¡ d S )NrO   rþ   zset_userptr leaked references)
r   r`   rU  rW  Úobjectr,   ÚgetrefcountrÀ   Úset_userptrra   )r   rX  rY  Ú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 )NrO   c                       s   e Zd Z‡ fdd„ZdS )z+TestCurses.test_userptr_segfault.<locals>.Ac                    s   ˆ   d ¡ d S rI   )r]  rJ   ©rU  r   r   Ú__del__  r,  z3TestCurses.test_userptr_segfault.<locals>.A.__del__N)Ú__name__Ú
__module__r†   ra  r   r`  r   r   rt     s    rt   )r   r`   rU  rW  r]  )r   rX  rt   r   r`  r   Útest_userptr_segfault  s
   z TestCurses.test_userptr_segfaultc                 C   s*   t  dd¡}t j |¡}t| t|ƒƒ d S )NrO   )r   r`   rU  rW  r   rü   )r   rX  rU  r   r   r   Útest_disallow_instantiation  s   z&TestCurses.test_disallow_instantiationÚis_term_resizedc                 C   sB   t jt j}}|  t  ||¡d¡ |  t  |d |d ¡d¡ d S )NFrX   T)r   ÚLINESÚCOLSrn   rf  ©r   Úlinesrö   r   r   r   Útest_is_term_resized'  s    zTestCurses.test_is_term_resizedÚresize_termc                 C   óz   t  ¡  t jt j}}|d }|d }t  ||¡ |  t j|¡ |  t j|¡ t  ||¡ |  t j|¡ |  t j|¡ d S r  )r   Úupdate_lines_colsrg  rh  rl  ra   ©r   rj  rö   Z	new_linesZnew_colsr   r   r   Útest_resize_term-  ó   zTestCurses.test_resize_termÚ
resizetermc                 C   rm  r  )r   rn  rg  rh  rr  ra   ro  r   r   r   Útest_resizeterm;  rq  zTestCurses.test_resizetermc                 C   sX   t  d¡ |  | j ¡ d¡ t  d¡ |  | j ¡ d¡ t  d¡ |  | j ¡ d¡ d S )Nru   rt   ÚBr   ÚC)r   r™   ra   r   ÚgetkeyrJ   r   r   r   Útest_ungetchI  s   


zTestCurses.test_ungetchc                 C   s   t  d¡ | j ¡  d S )Ni  )r   r™   r   rv  rJ   r   r   r   Útest_issue6243Q  s   
zTestCurses.test_issue6243Ú	unget_wchr=  )éc   )rN   r\   z.unget_wch is broken in ncurses 5.7 and earlierc                 C   sÀ   | j }|j}dD ]U}z| |¡ W n	 ty   Y qw zt |¡ W n ty? } z|  d||j|f ¡ W Y d }~nd }~ww | ¡ }|  	||¡ t
|ƒ}t |¡ | ¡ }|  	||¡ qd S )N)rl   õ   Ã©rw   u   ô¿¿z)unget_wch(%a) failed with encoding %s: %s)r   rx   r{   ry   r   ry  Ú	ExceptionZfailZget_wchra   Úord)r   r   rx   ÚchÚerrÚreadÚcoder   r   r   Útest_unget_wchU  s.   ÿ
ÿ€ÿ
ðzTestCurses.test_unget_wchc                 C   sˆ   | j }dd l}|j}| |¡ |  t¡ d|_W d   ƒ n1 s"w   Y  ||_|  t¡ |`W d   ƒ d S 1 s=w   Y  d S )Nr   rO   )r   Úcodecsrx   Úlookuprz   rê   )r   r   rƒ  rx   r   r   r   Útest_encodingm  s   
ÿ"ÿzTestCurses.test_encodingc                 C   sV   | j }zt |j¡}|  |¡ W n	 ty   Y nw |jj d¡d }|  d|¡ d S )Nrî   r   z[y, x,])	r   ÚinspectÚ	signaturerr   ÚassertFalser   Ú__doc__Úsplitr¼   )r   r   r‡  Zhuman_readable_signaturer   r   r   Útest_issue21088x  s   
þzTestCurses.test_issue21088c                 C   sN   t  dddd¡}t jj|dd}| ¡ \}}| |d |d ¡ | d¡ d S )NrN   rS   rT   T)Zinsert_moderl   )r   r`   ZtextpadZTextboxrc   rÅ   Z_insert_printable_char)r   re   rë   rj  rö   r   r   r   Útest_issue13051”  s
   zTestCurses.test_issue13051N)Prb  rc  r†   Úclassmethodr2   rG   r   rK   rM   rg   rj   rs   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/  r1  r"   r7  r<  rB  rH  rI  rK  rL  rO  rQ  rT  rZ  r_  rd  r   re  rk  rp  rs  rw  rx  r	   ÚskipIfÚgetattrr   r‚  r…  r‹  rŒ  r   r   r   r   r%   7   sÊ    
0

40&"
*

!

	8	.







	



		

	


	


ÿr%   c                   @   s4   e Zd Zedƒdd„ ƒZedƒdd„ ƒZdd„ Zd	S )
Ú	MiscTestsrn  c                 C   sJ   t  ¡  t jt j}}d t _t _t  ¡  |  t j|¡ |  t j|¡ d S )Nr   )r   rn  rg  rh  ra   ri  r   r   r   Útest_update_lines_cols   s   z MiscTests.test_update_lines_colsr=  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(   rU   r   rX   rT   )r   r=  r   r*   rø   Útuplera   r}   rù   ÚmajorÚminorZpatchZassertGreaterEqual)r   Úvr   r   r   Útest_ncurses_version©  s"   zMiscTests.test_ncurses_versionc                 C   s   t  ¡ }|  |t¡ d S rI   )r   r>  rø   r  )r   Úrr   r   r   Útest_has_extended_color_support½  s   z)MiscTests.test_has_extended_color_supportN)rb  rc  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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 rI   )r   ÚasciiZcontrolnamesZ
assertTruer
   )r   r   r   r   r   Útest_controlnamesÄ  s   ÿzTestAscii.test_controlnamesc                    s˜  ‡ ‡‡fdd„}t dƒD ]¨‰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 psˆ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                    sT   ˆj ˆ | d ˆ | ˆƒ|¡ ˆ | ˆ ƒ|¡ W d   ƒ d S 1 s#w   Y  d S )N)r~  r‰   )r…   ra   )r‰   Zexpected©r€   rÁ   r   r   r   ÚcheckÉ  s   "þz$TestAscii.test_ctypes.<locals>.checkrN  é€   r°   rM  z 	é~   r   rR   rX   )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õ   Ãrt   )r   rš  ra   r}  )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š  Úctrlra   r}  )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î   õ   ÂŠrt   r®  éÁ   )r   rš  Úaltra   r}  )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 )Nrl   rt   rè   ú úz^?rî   z^Jr²  z^@rµ  z!^Jr®  z!A)r   rš  rñ   ra   r}  )r   rñ   r   r   r   rò     s   zTestAscii.test_unctrlN)	rb  rc  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   rX   )rc   Ú	enumeraterƒ   )re   ÚtextZmaxyZmaxxr!  Úliner   r   r   r¡     s
   $ÿr¡   Ú__main__)"r   r†  r8   r¨  r,   r@   r	   Ztest.supportr   r   r   r   r   Ztest.support.import_helperr   r   Zcurses.panelÚImportErrorr   r   r"   ÚenvironÚgetr+   r@  rŽ  rp   ZTestCaser%   r  r™  r¡   rb  Úmainr   r   r   r   Ú<module>   sX    ÿ	ÿÿ        k$Xÿ