
    (ph                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
JrJrJrJrJrJrJrJrJrJr  SSKrSSKrSSKr\R0                  S   S:X  a  \rS rS rS rS	 rS
 rS r S r!S r"S r#S r$S r%S r&S r'S r(g)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                  *    [         S 5       n U " 5         g)z:cbreak() should not call tty.setcbreak() without keyboard.c                  p   [         R                  " 5        n [        U S9n[        R                  " S5       nUR                  5          UR                  (       a   e S S S 5        UR                  b   e S S S 5        S S S 5        g ! , (       d  f       N/= f! , (       d  f       N(= f! , (       d  f       g = f)Nstreamztty.setcbreak)tempfileNamedTemporaryFiler
   mockpatchcbreakcalled_keyboard_fd)r   termmock_setcbreaks      N/var/www/html/venv/lib/python3.13/site-packages/blessed/tests/test_keyboard.pychild%test_break_input_no_kb.<locals>.child}   s    ((*fv.DO,[[]-44444 #((000 - +* #] -, +*s:    B'BBB4B'
BB
B$	 B''
B5Nr	   r   s    r   test_break_input_no_kbr!   {   s    1 1 
G    c                  *    [         S 5       n U " 5         g)z2raw should not call tty.setraw() without keyboard.c                  p   [         R                  " 5        n [        U S9n[        R                  " S5       nUR                  5          UR                  (       a   e S S S 5        S S S 5        UR                  b   e S S S 5        g ! , (       d  f       N/= f! , (       d  f       N8= f! , (       d  f       g = f)Nr   
tty.setraw)r   r   r
   r   r   rawr   r   )r   r   mock_setraws      r   r   #test_raw_input_no_kb.<locals>.child   s    ((*fv.DL)[XXZ*11111   * $$,,, +*  Z *) +*s:    B'BBB$B'
BB
B$	 B''
B5Nr   r    s    r   test_raw_input_no_kbr)      s    - - 
Gr"   c                  *    [         S 5       n U " 5         g)z0raw should call tty.setraw() when with keyboard.c                     [        5       n U R                  c   e[        R                  " S5       nU R	                  5          UR
                  (       d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr%   )r
   r   r   r   r&   r   )r   r'   s     r   r   %test_raw_input_with_kb.<locals>.child   s]    ~  ,,,ZZ%"))))  &% &%s#   A8A'A8'
A5	1A88
BNr   r    s    r   test_raw_input_with_kbr-      s    * * 
Gr"   c                  *    [         S 5       n U " 5         g)z>term._keyboard_fd should be None when os.isatty returns False.c                      [         R                  " S5       n SU l        [        5       nUR                  b   e S S S 5        g ! , (       d  f       g = f)Nz	os.isattyF)r   r   return_valuer
   r   )mock_isattyr   s     r   r   $test_notty_kb_is_None.<locals>.child   s=    ZZ$',K$>D$$,,, %$$s   !A
ANr   r    s    r   test_notty_kb_is_Noner3      s    
 - -
 
Gr"   c                  (   SSK Jn   U " 5       nUR                  b   eUR                  UR                  :X  d   eUR                  b   eUR
                  UR                  :X  d   eSSU-   :X  d   eUR                  (       a   e[        U5      S;   d   eg)z;Test keyboard.Keystroke constructor with default arguments.r   	KeystrokeNxzu''z''blessed.keyboardr6   _namename_codecodeis_sequencereprr6   kss     r   test_keystroke_default_argsrC     s    *	B8877bhh8877bhh4"9~~8    r"   c                  6   SSK Jn   U " SSSS9nUR                  S:X  d   eUR                  UR                  :X  d   eUR                  S:X  d   eUR
                  UR                  :X  d   eSSU-   :X  d   eUR                  (       d   e[        U5      S:X  d   eg)	z7Test keyboard.Keystroke constructor with set arguments.r   r5   r7   r   zthe X)ucsr>   r<   xxNr9   rA   s     r   test_a_keystrokerG     s    *	t!(	3B88x77bhh88q==77bhhD2I>>>8wr"   c                      SSK Jn Jn  [        U5      nU " 5       R	                  5        HC  u  p4XB;   a  X2U   :X  d   eM  [        [        U5      (       d   e[        [        U5      U:X  a  MC   e   g)z?Test all values returned by get_keyboard_codes are from curses.r   )get_keyboard_codesCURSES_KEYCODE_OVERRIDE_MIXINN)r:   rI   rJ   dictitemshasattrcursesgetattr)rI   rJ   
exemptionsvaluekeycodes        r   test_get_keyboard_codesrS     sn     34J,.446 w////vw''''vw'5000 7r"   c                  H   SSK Jn   [        R                  " 5       nSUl        SUl        [        U " U5      5      (       a   eSUl        SUl        [        U " U5      5      (       a   eSUl        SUl        U " U5      [        R                  [        R                  S.:X  d   eg	)
z:Test _alternative_left_right behavior for space/backspace.r   )_alternative_left_right  	seq-rightseq-left)rY   rZ   N)
r:   rU   r   Mock_cuf1_cub1boolrN   	KEY_RIGHTKEY_LEFT)rU   r   s     r   test_alternative_left_rightra     s    899;DDJDJ+D12222DJDJ+D12222DJDJ#D)&&__.& & ' &r"   c                 @   ^ SSK Jm  [        U4S j5       nU" U 5        g)z<Test that cuf1 and cub1 are assigned KEY_RIGHT and KEY_LEFT.r   )get_keyboard_sequencesc                   > [        U SS9nT" U5      nUR                  (       a0  UR                  U;   d   eX!R                     UR                  :X  d   eUR                  (       a`  UR                  U;   d   eUR                  S:X  a  X!R                     UR                  :X  d   eg X!R                     UR
                  :X  d   eg g )NTkindforce_stylingrX   )r
   r\   r_   r]   KEY_BACKSPACEr`   )rf   r   keymaprc   s      r   r   /test_cuf1_and_cub1_as_RIGHT_LEFT.<locals>.child  s    T:'-::::'''**%777::::'''zzT!jj)T-?-????jj)T]]::: r"   N)r:   rc   r	   )r   r   rc   s     @r    test_cuf1_and_cub1_as_RIGHT_LEFTrk     s"    7; ; 
)r"   c                  (    [         S 5       n U " SS9  g)z8ordereddict ensures sequences are ordered longest-first.c                     [        U SS9nS nUR                  R                  5        H-  u  p4Ub  [        U5      U::  d   eU(       d   e[        U5      nM/     g )NTre   )r
   _keymaprL   len)rf   r   maxlensequencer>   s        r   r   5test_get_keyboard_sequences_sort_order.<locals>.child  sT    T:"ll002NH!8}...O8]F	 3r"   zxterm-256color)rf   Nr   r    s    r   &test_get_keyboard_sequences_sort_orderrs     s    # # 
 r"   c           	      8  ^
^^^ SSK n[        S5      u  p#nSR                  5       u  mm
Su  mmpVnU R                  [        SU
UUU4S j5        U R                  UR
                  S[        UT4UT
445      5        U R                  UR
                  S	UR                  S
5      U445        [        R                  " 5       nUR                  S
5      Ul
        UR                  S
5      Ul        UR
                  R                  U5      n	[        U	R                  5       5      TR                  S
5      U4UR                  S
5      [        R                  4UR                  S
5      [        R                   4TR                  S
5      U4UR                  S
5      U4/:X  d   eg)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                    > TTTT0U    $ )N )cap	CAP_LARGE	CAP_SMALL	SEQ_LARGE	SEQ_SMALLs    r   <lambda>,test_get_keyboard_sequence.<locals>.<lambda>  s    Y	%.	%;;>%@r"   capability_namesDEFAULT_SEQUENCE_MIXINlatin1)r:   rangesplitsetattrrN   keyboardrK   decoder   r[   r\   r]   rc   listrL   r`   r_   )monkeypatchblessed	KEY_SMALL	KEY_LARGE	KEY_MIXIN	SEQ_MIXINSEQ_ALT_CUF1SEQ_ALT_CUB1r   ri   ry   rz   r{   r|   s             @@@@r   test_get_keyboard_sequencer     s   (-a%Y9288:Y	EAY	9L 
@A ((*<y)5()57 89
 ((0&--h7C3FG
 99;D$$X.DJ$$X.DJ44T:F			(	#Y/			X	&8			X	&(8(89			(	#Y/			(	#Y/$1 1 1 1r"   c                  L   SSK Jn Jn  U" S5      nSSSSSS	S
.nU " SX#5      nUS:X  d   eUR                  b   eUR                  S:X  d   eUR
                  (       a   e[        U5      S;   d   eU " SX#S9nUS:X  d   eUR                  b   eUR                  b   eUR
                  (       a   e[        U5      S;   d   eU " SX#5      nUS:X  d   eUR                  S:X  d   eUR                  S:X  d   eUR
                  (       d   e[        U5      S;   d   eU " SX#5      nUS:X  d   eUR                  S:X  d   eUR                  S:X  d   eUR
                  (       d   e[        U5      S;   d   eU " SX#5      nUS:X  d   eUR                  S:X  d   eUR                  S:X  d   eUR
                  (       d   e[        U5      S;   d   eU " SX#5      nUS:X  d   eUR                  S	:X  d   eUR                  S:X  d   eUR
                  (       d   e[        U5      S;   d   eg)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   rV   Nr8   notfoundmappercodesn)zu'n'z'n'r   r   )r   r   r   r   r   )r   r   Lxxxxxr   r   )r   r   )r:   r   r   r<   r>   r?   r@   )r   r   r   r   rB   s        r   test_resolve_sequencer     sN   > % &F &%E 
#v	-B9977??77d??~~8     
+f	BB::77??77??~~8((((	'6	1B==77k!!!77a<<>>>80000	+V	;B77n$$$77a<<>>>86666	*f	4B77n$$$77a<<>>>86666	)V	3B::77h77a<<>>>8****r"   c                  N    SSK Jn   / SQnU " U5      nU[        / SQ5      :X  d   eg)zTest keyboard.prefixesr   )get_leading_prefixes)abcabdfejkl)aababdjjkN)r:   r   set)r   keyspfss      r   test_keyboard_prefixesr   T  s(    5&D
t
$C#89999r"   c                  ,    [         S 5       n U " S5        g)z@Test PC-Style function key translations when in ``keypad`` mode.c                 t
   [        U SS9nSSKJn  [        R                  " UUR
                  UR                  S9nU" [        S5      5      R                  S:X  d   eU" [        S5      5      R                  S:X  d   eU" [        S	5      5      R                  S
:X  d   eU" [        S5      5      R                  S:X  d   eU" [        S5      5      R                  S:X  d   eU" [        S5      5      R                  S:X  d   eU" S5      R                  S:X  d   eU" S5      R                  S:X  d   eU" S5      R                  S:X  d   eU" S5      R                  S:X  d   eU" S5      R                  S:X  d   eU" S5      R                  S:X  d   eU" S5      R                  S:X  d   eU" S5      R                  S :X  d   eU" S!5      R                  S :X  d   eU" S"5      R                  S:X  d   eU" S#5      R                  S$:X  d   eU" S%5      R                  S&:X  d   eU" S'5      R                  S(:X  d   eU" S)5      R                  S*:X  d   eU" S+5      R                  S,:X  d   eU" S-5      R                  S.:X  d   eU" S/5      R                  S0:X  d   eU" S15      R                  S2:X  d   eU" S35      R                  S4:X  d   eU" S55      R                  S6:X  d   eU" S75      R                  S8:X  d   eU" S95      R                  S::X  d   eU" S;5      R                  S<:X  d   eU" S=5      R                  S>:X  d   eU" S?5      R                  S@:X  d   eU" SA5      R                  SB:X  d   eU" SC5      R                  SD:X  d   eU" SE5      R                  SF:X  d   eU" SG5      R                  SH:X  d   eU" SI5      R                  S:X  d   eU" SJ5      R                  SK:X  d   eU" SL5      R                  S:X  d   eU" SM5      R                  S:X  d   eU" SN5      R                  S:X  d   eU" SO5      R                  S :X  d   eU" SP5      R                  S:X  d   eU" SQ5      R                  S:X  d   eU" SR5      R                  S:X  d   eU" SS5      R                  S:X  d   eU" ST5      R                  S :X  d   eU" SU5      R                  S:X  d   eU" SV5      R                  SW:X  d   eU" SX5      R                  SY:X  d   eU" SZ5      R                  S[:X  d   eU" S\5      R                  S]:X  d   eg )^NTre   r   )r   r   
   	KEY_ENTER      rh   	   KEY_TAB   
KEY_ESCAPE   
KEY_DELETEz[AKEY_UPz[BKEY_DOWNz[Cr_   z[Dr`   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:   r   	functoolspartialrn   	_keycodesunichrr<   )rf   r   r   resolves       r   r   -test_keypad_mixins_and_aliases.<locals>.childe  sK   T:5##$4+/<<*...: vbz"'';666vbz"'';666vay!&&/999vay!&&)333vbz"''<777vc{#((L888y!&&(222y!&&*444y!&&+555y!&&*444y!&&,666y!&&*444y!&&*444y!&&)333y!&&)333y!&&+555y!&&*;;;;y!&&,666y!&&*<<<<y!&&*;;;;y!&&*::::y!&&/999y!&&.888y!&&*444y!&&*444y!&&*444y!&&*444y!&&*444y!&&*444y!&&*444y!&&*444y!&&*444y!&&*444z"'':555z"''<777z"''<777z"''<777z"'':555z"''<777z"'':555z"''9444z"''8333z"'':555z"'';666z"'':555z"''9444z"'':555y!&&(222y!&&(222y!&&(222y!&&(222r"   xtermNr   r    s    r   test_keypad_mixins_and_aliasesr   \  s      :3 :3x 
'Nr"   ))__doc__r   r   signalrN   mathttyptysysosaccessoriesr   r   r   r   r   r	   r
   r   r   r   pytestr   sixversion_infochrr   r!   r)   r-   r3   rC   rG   rS   ra   rk   rs   r   r   r   r   rw   r"   r   <module>r      s          
 
 
 	     
A!Fp

	\
1'"*!&1R;+|:Fr"   