o
    Ph                     @   s  d 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ZddlZddl	Z	ddl
mZmZmZmZmZmZmZmZmZmZ ddlZddlZddlZejd dkrSeZdd Zdd	 Zd
d Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'd d! Z(dS )"zTests for keyboard support.    N   )
init_subproc_coverageread_until_eofread_until_semaphoreSEND_SEMAPHORERECV_SEMAPHOREas_subprocessTestTerminal	SEMAPHORE	all_termsecho_off   c                  C      t dd } |   dS )z:cbreak() should not call tty.setcbreak() without keyboard.c               
   S   s   t  K} t| d}td(}|  |jrJ W d    n1 s$w   Y  |jd u s0J W d    n1 s:w   Y  W d    d S W d    d S 1 sRw   Y  d S )Nstreamztty.setcbreak)tempfileNamedTemporaryFiler	   mockpatchcbreakcalled_keyboard_fd)r   termmock_setcbreak r   V/var/www/html/env_mimamsha/lib/python3.10/site-packages/blessed/tests/test_keyboard.pychild}   s   


"z%test_break_input_no_kb.<locals>.childNr   r   r   r   r   test_break_input_no_kb{      

r   c                  C   r   )z2raw should not call tty.setraw() without keyboard.c               
   S   s   t  C} t| d}td!}|  |jrJ W d    n1 s$w   Y  W d    n1 s3w   Y  |jd u s?J W d    d S 1 sJw   Y  d S )Nr   
tty.setraw)r   r   r	   r   r   rawr   r   )r   r   mock_setrawr   r   r   r      s   


"z#test_raw_input_no_kb.<locals>.childNr   r   r   r   r   test_raw_input_no_kb   r    r$   c                  C   r   )z0raw should call tty.setraw() when with keyboard.c               	   S   s   t  } | jd us
J td*}|   |jsJ W d    n1 s$w   Y  W d    d S W d    d S 1 s<w   Y  d S )Nr!   )r	   r   r   r   r"   r   )r   r#   r   r   r   r      s   
"z%test_raw_input_with_kb.<locals>.childNr   r   r   r   r   test_raw_input_with_kb   s   

r%   c                  C   r   )z>term._keyboard_fd should be None when os.isatty returns False.c                  S   sJ   t d} d| _t }|jd u sJ W d    d S 1 sw   Y  d S )Nz	os.isattyF)r   r   return_valuer	   r   )mock_isattyr   r   r   r   r      s
   "z$test_notty_kb_is_None.<locals>.childNr   r   r   r   r   test_notty_kb_is_None   s   

r(   c                  C   s|   ddl m}  |  }|jdu sJ |j|jksJ |jdu sJ |j|jks'J dd| ks/J |jr4J t|dv s<J dS )z;Test keyboard.Keystroke constructor with default arguments.r   	KeystrokeNxzu''z''blessed.keyboardr*   _namename_codecodeis_sequencereprr*   ksr   r   r   test_keystroke_default_args  s   
r7   c                  C   s   ddl m}  | dddd}|jdksJ |j|jksJ |jdks#J |j|jks+J dd| ks3J |js8J t|dks@J dS )	z7Test keyboard.Keystroke constructor with set arguments.r   r)   r+   r   zthe X)ucsr2   r0   xxNr-   r5   r   r   r   test_a_keystroke  s   
r:   c                  C   sj   ddl m} m} t|}|   D ]!\}}||v r"||| ks!J qtt|s)J tt||ks2J qdS )z?Test all values returned by get_keyboard_codes are from curses.r   )get_keyboard_codesCURSES_KEYCODE_OVERRIDE_MIXINN)r.   r;   r<   dictitemshasattrcursesgetattr)r;   r<   
exemptionsvaluekeycoder   r   r   test_get_keyboard_codes  s   rE   c                  C   sv   ddl m}  t }d|_d|_t| |rJ d|_d|_t| |r&J d|_d|_| |tjtj	dks9J d	S )
z:Test _alternative_left_right behavior for space/backspace.r   )_alternative_left_right  	seq-rightseq-left)rJ   rK   N)
r.   rF   r   Mock_cuf1_cub1boolr@   	KEY_RIGHTKEY_LEFT)rF   r   r   r   r   test_alternative_left_right  s   rR   c                    s(   ddl m  t fdd}||  dS )z<Test that cuf1 and cub1 are assigned KEY_RIGHT and KEY_LEFT.r   get_keyboard_sequencesc                    s   t | dd} |}|jr|j|v sJ ||j |jksJ |jrC|j|v s(J |jdkr9||j |jks7J d S ||j |jksEJ d S d S )NTkindforce_stylingrI   )r	   rM   rP   rN   KEY_BACKSPACErQ   )rV   r   keymaprS   r   r   r     s   
z/test_cuf1_and_cub1_as_RIGHT_LEFT.<locals>.childN)r.   rT   r   )r   r   r   rS   r    test_cuf1_and_cub1_as_RIGHT_LEFT  s   rZ   c                  C   s   t dd } | dd dS )z8ordereddict ensures sequences are ordered longest-first.c                 S   sP   t | dd}d }|j D ]\}}|d urt||ksJ |s!J t|}qd S )NTrU   )r	   _keymapr>   len)rV   r   maxlensequencer2   r   r   r   r     s   
z5test_get_keyboard_sequences_sort_order.<locals>.childzxterm-256color)rV   Nr   r   r   r   r   &test_get_keyboard_sequences_sort_order  s   
r_   c           
         s  ddl }td\}}}d \ d\}}}| td fdd | |jd	t|f| ff | |jd
|d|ff t	 }|d|_
|d|_|j|}	t|	 d|f|dtjf|dtjfd|f|d|fgksJ dS )z%Test keyboard.get_keyboard_sequence. r   Nr   zcap-small cap-large)s   seq-small-as   seq-large-abcdefgs	   seq-mixins   seq-alt-cuf1s   seq-alt-cub1_tigetstrc                    s    i|  S )Nr   )cap	CAP_LARGE	CAP_SMALL	SEQ_LARGE	SEQ_SMALLr   r   <lambda>  s
    z,test_get_keyboard_sequence.<locals>.<lambda>capability_namesDEFAULT_SEQUENCE_MIXINlatin1)r.   rangesplitsetattrr@   keyboardr=   decoder   rL   rM   rN   rT   listr>   rQ   rP   )
monkeypatchblessed	KEY_SMALL	KEY_LARGE	KEY_MIXIN	SEQ_MIXINSEQ_ALT_CUF1SEQ_ALT_CUB1r   rY   r   rb   r   test_get_keyboard_sequence  s8   

ry   c                  C   s  ddl m} m} |d}dddddd	d
}| d||}|dks!J |jdu s(J |jdks/J |jr4J t|dv s<J | d||d}|dksIJ |jdu sPJ |jdu sWJ |jr\J t|dv sdJ | d||}|dkspJ |jdkswJ |jdks~J |jsJ t|dv sJ | d||}|dksJ |jdksJ |jdksJ |jsJ t|dv sJ | d||}|dksJ |jdksJ |jdksJ |jsJ t|dv sJ | d||}|dksJ |jd	ksJ |jdksJ |jsJ t|dv sJ dS )z2Test resolve_sequence for order-dependent mapping.r   )resolve_sequenceOrderedDict))SEQ1r   )SEQ2   )KEY_LONGSEQ_longestr   )LONGSEQ   )LONGSEQ_longer   )L   KEY_SEQ1KEY_SEQ2r   KEY_LONGSEQKEY_LONGSEQ_longerKEY_L)r   r~   r   r   r   r   rG   Nr,   notfoundmappercodesn)zu'n'z'n'r|   r   )r   r   r   r   r   )r   r   Lxxxxxr   r   )r   r   )r.   rz   r{   r0   r2   r3   r4   )rz   r{   r   r   r6   r   r   r   test_resolve_sequence  sZ   	





r   c                  C   s4   ddl m}  g d}| |}|tg dksJ dS )zTest keyboard.prefixesr   )get_leading_prefixes)abcabdfejkl)aababdjjkN)r.   r   set)r   keyspfsr   r   r   test_keyboard_prefixesT  s   r   c                  C   s   t dd } | d dS )zA Test PC-Style function key translations when in ``keypad`` mode.c                 S   s  t | dd}ddlm} tj||j|jd}|tdjdks!J |tdjdks,J |td	jd
ks7J |tdjdksBJ |tdjdksMJ |tdjdksXJ |djdksaJ |djdksjJ |djdkssJ |djdks|J |djdksJ |djdksJ |djdksJ |djd ksJ |d!jd ksJ |d"jdksJ |d#jd$ksJ |d%jd&ksJ |d'jd(ksJ |d)jd*ksJ |d+jd,ksJ |d-jd.ksJ |d/jd0ksJ |d1jd2ksJ |d3jd4ksJ |d5jd6ksJ |d7jd8ksJ |d9jd:ks"J |d;jd<ks,J |d=jd>ks6J |d?jd@ks@J |dAjdBksJJ |dCjdDksTJ |dEjdFks^J |dGjdHkshJ |dIjdksrJ |dJjdKks|J |dLjdksJ |dMjdksJ |dNjdksJ |dOjd ksJ |dPjdksJ |dQjdksJ |dRjdksJ |dSjdksJ |dTjd ksJ |dUjdksJ |dVjdWksJ |dXjdYksJ |dZjd[ksJ |d\jd]ksJ d S )^NTrU   r   )rz   r   
   	KEY_ENTER      rX   	   KEY_TAB   
KEY_ESCAPE   
KEY_DELETEz[AKEY_UPz[BKEY_DOWNz[CrP   z[DrQ   z[U
KEY_PGDOWNz[VKEY_PGUPz[HKEY_HOMEz[FKEY_ENDz[KzOMzOjKEY_KP_MULTIPLYzOk
KEY_KP_ADDzOlKEY_KP_SEPARATORzOmKEY_KP_SUBTRACTzOnKEY_KP_DECIMALzOoKEY_KP_DIVIDEzOXKEY_KP_EQUALzOpKEY_KP_0zOqKEY_KP_1zOrKEY_KP_2zOsKEY_KP_3zOtKEY_KP_4zOuKEY_KP_5zOvKEY_KP_6zOwKEY_KP_7zOxKEY_KP_8zOyKEY_KP_9z[1~KEY_FINDz[2~
KEY_INSERTz[3~z[4~
KEY_SELECTz[5~z[6~z[7~z[8~z[OAz[OBz[OCz[ODz[OFz[OHzOPKEY_F1zOQKEY_F2zORKEY_F3zOSKEY_F4)	r	   r.   rz   	functoolspartialr[   	_keycodesunichrr0   )rV   r   rz   resolver   r   r   r   e  sr   z-test_keypad_mixins_and_aliases.<locals>.childxtermNr   r   r   r   r   test_keypad_mixins_and_aliases\  s   	
<r   ))__doc__r   r   signalr@   mathttyptysysosaccessoriesr   r   r   r   r   r   r	   r
   r   r   pytestr   sixversion_infochrr   r   r$   r%   r(   r7   r:   rE   rR   rZ   r_   ry   r   r   r   r   r   r   r   <module>   sB   0X   q)>