
    iޏ                     t   S r SSKJr  SSKrSSKrSSKrSSKJrJrJ	r	  0 SS/ 4/_SS/ 4/_SS	/ 4/_S
S/ 4/_SSS/4S/ 4/_SS	S/4S/ 4/_SSS/4S/ 4/_SS/ 4/_SS/ 4/_SS/ 4/_SS/ 4/_SS/ 4/_SS/ 4/_SS/ 4/_S S!/ 4/_S"S#/ 4/_S$S%/ 4/_/ S&/ 4S&/ 4/S'.Er
S5S( jr/ r/ rS) rS* \R                  l        S+ \R                  l        \
R$                  \R                  l        S, \R                  l        S- \R                  l        S. \R                  l        \" \S5      /r\" \	S5      /r\\-   r\" \S5      /r\" \	S5      /r\\-   r\" \S
5      /r\" \	S
5      /r\\-   r\" \S5      /r \" \	S5      /r!\ \!-   r"\" \S5      /r#\" \	S5      /r$\#\$-   r%\" \S5      /r&\" \	S5      /r'\&\'-   r(\" \S5      \" \	S5      /r)\" \S5      \" \	S5      /r*\" \S5      /r+\" \	S5      /r,\" \S5      \" \	S5      /r-S6S/ jr.\" \S0S19/r/ " S2 S3\R`                  5      r1\2S4:X  a  \Rf                  " 5         gg)7a:  
Side effects are avoided using two techniques:

- Low level OS requests (keyboard._os_keyboard) are mocked out by rewriting
the functions at that namespace. This includes a list of dummy keys.
- Events are pumped manually by the main test class, and accepted events
are tested against expected values.

Fake user events are appended to `input_events`, passed through
keyboard,_listener.direct_callback, then, if accepted, appended to
`output_events`. Fake OS events (keyboard.press) are processed
and added to `output_events` immediately, mimicking real functionality.
    )print_functionN   )KeyboardEventKEY_DOWNKEY_UPspaceab   c   AshiftBCalt   zleft alt
left shift   right shift   	left ctrl   	backspace   z	caps lock	   +
   ,   _      none
duplicatedc                 B    [        X=(       d    [        U   S   S   XS9$ )Nr   )
event_type	scan_codenametime)r   
dummy_keys)r+   r-   r,   r.   s       \/home/kali/github-search/github-env/lib/python3.13/site-packages/keyboard/_keyboard_tests.py
make_eventr1   4   s'    J:]zRVGWXYGZ[\G]dhtt    c                 x    [         R                  R                  U 5      (       a  [        R	                  U 5        g g N)keyboard	_listenerdirect_callbackoutput_eventsappend)events    r0   send_instant_eventr;   ;   s,    ))%00U# 1r2   c                      g r4    r=   r2   r0   <lambda>r>   @   s    Tr2   c                     g r4   r=   )callbacks    r0   r>   r>   A   s    r2   c                 6    [        [        [        S U 5      5      $ r4   )r;   r1   r   r,   s    r0   r>   r>   C   s    0B:hX\^gCh0ir2   c                 6    [        [        [        S U 5      5      $ r4   )r;   r1   r   rB   s    r0   r>   r>   D   s    2DZPVX\^gEh2ir2   c                 F    [         R                  [        [        SU S95      $ )N  r+   r,   r-   )r8   r9   r   r   )chars    r0   r>   r>   E   s&    -2F2F}`htw  C  HD  3Er2   c                 .    [         R                  " S5      $ )NrE   )r5   presses    r0   r>   r>   a   s    ,r2   rE   rB   c                      \ rS rSrS rS rSS j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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"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/ r0S0 r1S1 r2S2 r3S3 r4S4 r5S5 r6S6 r7S7 r8S8 r9S9 r:S: r;S; r<S< r=S= r>S> r?S? r@S@ rASA rBSB rCSC rDSD rESE rFSF rGSG rHSH rFSI rISJ rJSK rKSL rLSM rMSN rNSO rOSP rPSQ rQSR rRSS rSST rTSU rUSV rVSW rWSX rXSY rYSZ rZS[ r[S\ r\S] r]S^ r^S_ r_S` r`Sa raSb rbSc rcSd rdSe reSf rfSg rfSh rgSi rhSj riSk rjSl rkSm rlSn rmSo rnSp roSq rpSr rnSs rqSt rrSu rsSv rtSw ruSx rvSy rwSz rxS{ ryS| rzS} r{S~ r|S r}S r~S rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)TestKeyboardd   c                 .    [         R                  " 5         g r4   )r5   
unhook_allselfs    r0   tearDownTestKeyboard.tearDowne   s    r2   c                    [         S S 2	 [        S S 2	 S [        l        [        R                  R                  5         [        R                  R                  5         [        R                  R                  5         [        R                  R                  5         [        R                  R                  5         0 [        l        g r4   )input_eventsr8   r5   
_recording_pressed_eventsclear_physically_pressed_keys_logically_pressed_keys_hotkeysr6   init_word_listenersrQ   s    r0   setUpTestKeyboard.setUpj   s}     O!"  &&())//1((..0!!#% r2   Nc                    [         R                  U5        [         (       a[  [         R                  S5      n[        R                  R                  U5      (       a  [        R                  U5        [         (       a  M[  Ub%  S nU R                  U" [        5      U" U5      5        [        S S 2	 [        R                  R                  R                  5         g )Nr   c                 2    SR                  S U  5       5      $ )Nr    c              3      #    U  H5  oR                   [        :X  a  S OSS-   [        UR                  5      -   v   M7     g7f)dur$   N)r+   r   strr,   ).0rK   s     r0   	<genexpr>4TestKeyboard.do.<locals>.<lambda>.<locals>.<genexpr>~   s7     *{xzst<<83KCQTX[+[^abcbmbm^n+nxzs   =?)join)ess    r0   r>   !TestKeyboard.do.<locals>.<lambda>~   s    #((*{xz*{"{r2   )rV   extendpopr5   r6   r7   r8   r9   assertEqualqueuerj   )rR   manual_eventsexpectedr:   to_namess        r0   doTestKeyboard.dow   s    M*l $$Q'E!!11%88$$U+ l {HXm4hx6HI!  %%'r2   c                     [        [        SS5      nSS KnU R                  U[	        S0 UR                  UR                  5       5      D65        g )Nu   á '"rE   r   r=   )r1   r   jsonro   r   loadsto_json)rR   r:   rw   s      r0   test_event_jsonTestKeyboard.test_event_json   s:    8Y4 L

5==?0K LMr2   c                 |    [         R                   H(  nU R                  [         R                  " U5      5        M*     g r4   )r5   all_modifiers
assertTrueis_modifier)rR   r-   s     r0   test_is_modifier_name"TestKeyboard.test_is_modifier_name   s)    **DOOH0067 +r2   c                 z    [        S5       H,  nU R                  [        R                  " U5      US;   5        M.     g )Nr!   )r   r   r   r   )rangero   r5   r   rR   is     r0   test_is_modifier_scan_code'TestKeyboard.test_is_modifier_scan_code   s0    rAX11!4a<6GH r2   c                     [         R                  5        HE  u  pUS;   a  M  [        S U 5       5      nU R                  [        R
                  " U5      U5        MG     g )Nr'   c              3   *   #    U  H	  u  pUv   M     g 7fr4   r=   )rg   r,   	modifierss      r0   rh   <TestKeyboard.test_key_to_scan_codes_brute.<locals>.<genexpr>   s     K7+?9Y7s   )r/   itemstuplero   r5   key_to_scan_codes)rR   r-   entriesrr   s       r0   test_key_to_scan_codes_brute)TestKeyboard.test_key_to_scan_codes_brute   sM    '--/MD--xK7KKHX77=xH 0r2   c                 v    [        S5       H*  nU R                  [        R                  " U5      U45        M,     g )Nr!   )r   ro   r5   r   r   s     r0   $test_key_to_scan_code_from_scan_code1TestKeyboard.test_key_to_scan_code_from_scan_code   s-    rAX77:QDA r2   c                     U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        g )Nr	   r   r   r   r   ro   r5   r   rQ   s    r0   !test_key_to_scan_code_from_letter.TestKeyboard.test_key_to_scan_code_from_letter   s8    33C8$?33C8&Ar2   c                    U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      [        R                  " S5      5        g )Nr   )r   r   SHIFTctrlCONTROLr   rQ   s    r0   %test_key_to_scan_code_from_normalized2TestKeyboard.test_key_to_scan_code_from_normalized   s_    33G<eD33G<eD33F;X=W=WXa=bcr2   c                     U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        g )Nr   r   r   r   r   rQ   s    r0   )test_key_to_scan_code_from_sided_modifier6TestKeyboard.test_key_to_scan_code_from_sided_modifier   s8    33LA4H33MBDIr2   c                     U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        g )Nr$   )r%   right_shiftr   r   rQ   s    r0   !test_key_to_scan_code_underscores.TestKeyboard.test_key_to_scan_code_underscores   s8    33C8%@33MBDIr2   c                     U R                  [        5         [        R                  " S 5        S S S 5        g ! , (       d  f       g = fr4   assertRaises
ValueErrorr5   r   rQ   s    r0    test_key_to_scan_code_error_none-TestKeyboard.test_key_to_scan_code_error_none   s*    z*&&t, +**	   6
Ac                     U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = fN r   rQ   s    r0   !test_key_to_scan_code_error_empty.TestKeyboard.test_key_to_scan_code_error_empty   *    z*&&r* +**r   c                     U R                  [        5         [        R                  " 0 5        S S S 5        g ! , (       d  f       g = fr4   r   rQ   s    r0   !test_key_to_scan_code_error_other.TestKeyboard.test_key_to_scan_code_error_other   r   r   c                 T    U R                  [        R                  " / SQ5      S5        g )N)r!   r   r	   )r!   r   r   r   rQ   s    r0   test_key_to_scan_code_list'TestKeyboard.test_key_to_scan_code_list   s    33LA:Nr2   c                     U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = f)Nr(   r   rQ   s    r0   test_key_to_scan_code_empty(TestKeyboard.test_key_to_scan_code_empty   s*    z*&&v. +**r   c                 P    U R                  [        R                  " S5      S5        g )Nr)   )r&   r   rQ   s    r0    test_key_to_scan_code_duplicated-TestKeyboard.test_key_to_scan_code_duplicated   s    33LA5Ir2   c                     U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        g )Nr	   r   r   ))r   ro   r5   parse_hotkeyrQ   s    r0   test_parse_hotkey_simple%TestKeyboard.test_parse_hotkey_simple   s8    ..s3Z@..s3\Br2   c                     U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S5      5        g )Nr    plusr"   commar   rQ   s    r0   test_parse_hotkey_separators)TestKeyboard.test_parse_hotkey_separators   sN    ..s3X5J5J65RS..s3X5J5J75STr2   c                     U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        g )Nzleft shift + a))r   r   zleft shift+ar   rQ   s    r0   test_parse_hotkey_keys#TestKeyboard.test_parse_hotkey_keys   s;    ../?@BRS..~>@PQr2   c                     U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        g )Nza,br   r   a, br   rQ   s    r0   test_parse_hotkey_simple_steps+TestKeyboard.test_parse_hotkey_simple_steps   s:    ..u57HI..v68IJr2   c                 P    U R                  [        R                  " S5      S5        g )Nza+b, b+c))r   r   )r   r   r   rQ   s    r0   test_parse_hotkey_steps$TestKeyboard.test_parse_hotkey_steps   s    ..z:<UVr2   c                 :   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU R                  [         R                  " S5      XU4X4U445        g )Nr   r   r	   r
   r   zalt+shift+a, alt+b, c)r5   r   ro   r   )rR   	alt_codesshift_codesa_codesb_codesc_codess         r0   test_parse_hotkey_example&TestKeyboard.test_parse_hotkey_example   s    ..u5	009,,S1,,S1,,S1../FG9cjJknw  nB  EL  DN  JO  	Pr2   c                 T    U R                  [        R                  " / SQ5      S5        g )N)r   r   r   )r   r   r   r   rQ   s    r0   !test_parse_hotkey_list_scan_codes.TestKeyboard.test_parse_hotkey_list_scan_codes   s    ..y9;PQr2   c                 |    [         R                  " S5      nU R                  [         R                  " U5      S5        g Nr	   r   )r5   r   ro   )rR   results     r0   &test_parse_hotkey_deep_list_scan_codes3TestKeyboard.test_parse_hotkey_deep_list_scan_codes   s-    &&s+..v6
Cr2   c                 T    U R                  [        R                  " / SQ5      S5        g )N)r	   r
   r   r   r   rQ   s    r0   test_parse_hotkey_list_names)TestKeyboard.test_parse_hotkey_list_names   s    ..?AVWr2   c                 N    U R                  [        R                  " S5      5        g Nr	   )assertFalser5   
is_pressedrQ   s    r0   test_is_pressed_none!TestKeyboard.test_is_pressed_none   s    ,,S12r2   c                 x    U R                  [        5        U R                  [        R                  " S5      5        g r   rt   d_ar~   r5   r   rQ   s    r0   test_is_pressed_true!TestKeyboard.test_is_pressed_true   s$    ++C01r2   c                 x    U R                  [        5        U R                  [        R                  " S5      5        g Nr   r   rQ   s    r0   #test_is_pressed_true_scan_code_true0TestKeyboard.test_is_pressed_true_scan_code_true   s$    ++A./r2   c                 x    U R                  [        5        U R                  [        R                  " S5      5        g )Nr   rt   r   r   r5   r   rQ   s    r0   $test_is_pressed_true_scan_code_false1TestKeyboard.test_is_pressed_true_scan_code_false   s&    ,,Q/0r2   c                 x    U R                  [        5        U R                  [        R                  " S5      5        g )Nr   r  rQ   s    r0   &test_is_pressed_true_scan_code_invalid3TestKeyboard.test_is_pressed_true_scan_code_invalid   s&    ,,R01r2   c                     U R                  [        [        -   [        -   5        U R	                  [
        R                  " S5      5        U R                  [
        R                  " S5      5        g Nr	   r
   )rt   r   u_ad_br   r5   r   r~   rQ   s    r0   test_is_pressed_false"TestKeyboard.test_is_pressed_false   sF    C,,S12++C01r2   c                     U R                  [        [        -   5        U R                  [        R
                  " S5      5        g Nshift+a)rt   d_shiftr   r~   r5   r   rQ   s    r0   test_is_pressed_hotkey_true(TestKeyboard.test_is_pressed_hotkey_true   s)    ++I67r2   c                     U R                  [        [        -   [        -   5        U R	                  [
        R                  " S5      5        g r  )rt   r  r   r	  r   r5   r   rQ   s    r0   test_is_pressed_hotkey_false)TestKeyboard.test_is_pressed_hotkey_false   s/    C ,,Y78r2   c                     U R                  [        [        -   5        U R                  [        5         [
        R                  " S5        S S S 5        g ! , (       d  f       g = fNr   )rt   r	  r   r   r   r5   r   rQ   s    r0   test_is_pressed_multi_step_fail,TestKeyboard.test_is_pressed_multi_step_fail   s:    Cz*' +**s   A
A c                 j    [         R                  " SSSS9  U R                  / [        [        -   5        g )Nr	   Tdo_press
do_release)r5   sendrt   r   r	  rQ   s    r0   test_send_single_press_release+TestKeyboard.test_send_single_press_release   s$    cDT:CGr2   c                 \    [         R                  " SSSS9  U R                  / [        5        g )Nr	   TFr  )r5   r  rt   r   rQ   s    r0   test_send_single_press#TestKeyboard.test_send_single_press   s     cDU;Cr2   c                 \    [         R                  " SSSS9  U R                  / [        5        g )Nr	   FTr  )r5   r  rt   r	  rQ   s    r0   test_send_single_release%TestKeyboard.test_send_single_release   s     cEd;Cr2   c                 T    [         R                  " SSSS9  U R                  / / 5        g )Nr	   Fr  )r5   r  rt   rQ   s    r0   test_send_single_none"TestKeyboard.test_send_single_none   s    cEe<Br2   c                 \    [         R                  " S5        U R                  / [        5        g r   )r5   rI   rt   r   rQ   s    r0   
test_pressTestKeyboard.test_press   s    sCr2   c                 \    [         R                  " S5        U R                  / [        5        g r   )r5   releasert   r	  rQ   s    r0   test_releaseTestKeyboard.test_release   s    Cr2   c                 j    [         R                  " S5        U R                  / [        [        -   5        g r   )r5   press_and_releasert   r   r	  rQ   s    r0   test_press_and_release#TestKeyboard.test_press_and_release  s"    ""3'CGr2   c                     [         R                  " SSSS9  U R                  / [        [        -   [
        -   [        -   5        g )Nctrl+aTr  )r5   r  rt   d_ctrlr   r	  u_ctrlrQ   s    r0    test_send_modifier_press_release-TestKeyboard.test_send_modifier_press_release  s-    h$?F3JsN6)*r2   c                 x    [         R                  " SSSS9  U R                  / [        [        -   [
        -   5        g )Nctrl+shift+aFTr  )r5   r  rt   r	  u_shiftr8  rQ   s    r0   test_send_modifiers_release(TestKeyboard.test_send_modifiers_release	  s)    nuFCK&'r2   c                    ^ / mU4S jn[         R                  " USS5        U R                  T5        [        R                  " S5        U R                  T5        g )Nc                 D   > U S:X  a  US:X  d   eTR                  S5        g )Nr   r   T)r9   )arg1arg2	triggereds     r0   fn(TestKeyboard.test_call_later.<locals>.fn  s$    19**T"r2   )r   r   {Gz?皙?)r5   
call_laterr   r.   sleepr~   )rR   rE  rD  s     @r0   test_call_laterTestKeyboard.test_call_later  sG    		# 	B-#

4	"r2   c                   ^  ST l         U 4S jn[        R                  " USS9nT R                  [        [
        -   [        [
        -   5        T R                  T R                   S5        [        R                  " U5        T R                  [        [
        -   [        [
        -   5        T R                  T R                   S5        [        R                  " USS9  T R                  [        [
        -   [        [
        -   5        T R                  T R                   S5        [        R                  " 5         T R                  [        [
        -   [        [
        -   5        T R                  T R                   S5        g )Nr   c                 h   > TR                  U R                  S5        T=R                  S-  sl        g )Nr	   r   )ro   r-   r   rK   rR   s    r0   count1TestKeyboard.test_hook_nonblocking.<locals>.count  s$    QVVS)FFaKFr2   Fsuppressr   r   )	r   r5   hookrt   r   r	  ro   unhookrP   rR   rP  rT  s   `  r0   test_hook_nonblocking"TestKeyboard.test_hook_nonblocking  s    	 }}UU3CS!#CS!#ee,CS!#CS!#r2   c                   ^  ST l         U 4S jn[        R                  " USS9nT R                  [        [
        -   [
        5        T R                  T R                   S5        [        R                  " U5        T R                  [        [
        -   [        [
        -   5        T R                  T R                   S5        [        R                  " USS9  T R                  [        [
        -   [
        5        T R                  T R                   S5        [        R                  " 5         T R                  [        [
        -   [        [
        -   5        T R                  T R                   S5        g )Nr   c                    > TR                  U R                  SS/5        T=R                  S-  sl        U R                  S:H  $ )Nr	   r
   r   )assertInr-   r   rO  s    r0   rP  .TestKeyboard.test_hook_blocking.<locals>.count*  s4    MM!&&3*-FFaKF66S= r2   TrR  r   r   )	r   r5   rT  rt   r   r
  ro   rU  rP   rV  s   `  r0   test_hook_blockingTestKeyboard.test_hook_blocking(  s    	! }}UT2C#CS!#ed+C#CS!#r2   c                 r   ^  [         R                  " U 4S j5        T R                  [        [        -   5        g )Nc                    > TR                  U R                  S5      =(       a     TR                  U R                  [        5      $ r   ro   r-   r+   r   rO  s    r0   r>   8TestKeyboard.test_on_press_nonblocking.<locals>.<lambda>;  s3    D$4$4QVVS$A$ndFVFVWXWcWcemFn$nr2   )r5   on_pressrt   r   r	  rQ   s   `r0   test_on_press_nonblocking&TestKeyboard.test_on_press_nonblocking:  s"    noCr2   c                     [         R                  " S SS9  U R                  [        [        SS5      /[
        -   [
        5        g )Nc                      U R                   S:H  $ r   rB   rJ   s    r0   r>   5TestKeyboard.test_on_press_blocking.<locals>.<lambda>>  s    AKK1$4r2   TrR  r   r   )r5   rc  rt   r1   r   r   rQ   s    r0   test_on_press_blocking#TestKeyboard.test_on_press_blocking=  s2    4tDHc2./#5s;r2   c                 r   ^  [         R                  " U 4S j5        T R                  [        [        -   5        g )Nc                    > TR                  U R                  S5      =(       a     TR                  U R                  [        5      $ r   ro   r-   r+   r   rO  s    r0   r>   .TestKeyboard.test_on_release.<locals>.<lambda>A  s3    d&6&6qvvs&C&nHXHXYZYeYegmHn&nr2   )r5   
on_releasert   r   r	  rQ   s   `r0   test_on_releaseTestKeyboard.test_on_release@  s"    noCr2   c                     U R                  [        5         [        R                  " SS 5        S S S 5        g ! , (       d  f       g = f)Ninvalidc                     g r4   r=   rJ   s    r0   r>   4TestKeyboard.test_hook_key_invalid.<locals>.<lambda>F  s    4r2   )r   r   r5   hook_keyrQ   s    r0   test_hook_key_invalid"TestKeyboard.test_hook_key_invalidD  s,    z*i8 +**s	   8
Ac                 (  ^  ST l         U 4S jn[        R                  " SU5      nT R                  [        5        T R                  T R                   S5        T R                  [        [        -   5        T R                  T R                   S5        T R                  [        [        SS5      /5        T R                  T R                   S5        [        R                  " U5        T R                  [        5        T R                  T R                   S5        g )Nr   c                 0   > T=R                   S-  sl         g r   )r   r:   rR   s    r0   rP  5TestKeyboard.test_hook_key_nonblocking.<locals>.countI  s    FFaKFr2   r   r   r   r   r   r   r5   rv  rt   r   ro   r	  r
  r1   r   
unhook_keyrV  s   `  r0   test_hook_key_nonblocking&TestKeyboard.test_hook_key_nonblockingG  s    	  e,#C#Hc2./0#D!#r2   c                   ^  ST l         U 4S jn[        R                  " SUSS9nT R                  [        [        5        T R                  T R                   S5        T R                  [        [        -   [        [        -   5        T R                  T R                   S5        T R                  [        [        SS5      // 5        T R                  T R                   S	5        [        R                  " U5        T R                  [        [        SS5      /[        [        SS5      /5        T R                  T R                   S	5        g )
Nr   c                 L   > T=R                   S-  sl         U R                  S:H  $ r   )r   r,   r{  s    r0   rP  2TestKeyboard.test_hook_key_blocking.<locals>.countW  s    FFaKF??a''r2   r   TrR  r   r   r   r   r}  rV  s   `  r0   test_hook_key_blocking#TestKeyboard.test_hook_key_blockingU  s    	(   ed;S#CS!#Hc2./4#D!Hc2./*XsB2O1PQ#r2   c                    ^  [         R                  " SU 4S j5        T R                  [        [        -   [
        -   [        -   5        g )Nr   c                    > TR                  U R                  S5      =(       a     TR                  U R                  [        5      $ r   ra  rO  s    r0   r>   <TestKeyboard.test_on_press_key_nonblocking.<locals>.<lambda>e  s3    T-=-=affc-J-wtO_O_`a`l`lnvOw-wr2   )r5   on_press_keyrt   r   r	  r
  u_brQ   s   `r0   test_on_press_key_nonblocking*TestKeyboard.test_on_press_key_nonblockingd  s,    c#wxCC r2   c                     [         R                  " SS SS9  U R                  [        [        SS5      /[
        -   [
        5        g )Nr   c                      U R                   S:H  $ r   rB   rJ   s    r0   r>   9TestKeyboard.test_on_press_key_blocking.<locals>.<lambda>h  s    Q[[A-=r2   TrR  r   )r5   r  rt   r1   r   r   rQ   s    r0   test_on_press_key_blocking'TestKeyboard.test_on_press_key_blockingg  s4    c#=MHc2./#5s;r2   c                 t   ^  [         R                  " SU 4S j5        T R                  [        [        -   5        g )Nr	   c                    > TR                  U R                  S5      =(       a     TR                  U R                  [        5      $ r   rm  rO  s    r0   r>   2TestKeyboard.test_on_release_key.<locals>.<lambda>k  s4    t/?/?/L/wQUQaQabcbnbnpvQw/wr2   )r5   on_release_keyrt   r   r	  rQ   s   `r0   test_on_release_key TestKeyboard.test_on_release_keyj  s$    %wxCr2   c                 R   [         R                  " S5      nU R                  [        [        -   [        5        U R                  [        [        SS5      /[        [        SS5      /5        [         R                  " U5        U R                  [        [        -   [        [        -   5        g )Nr	   r   r   )r5   	block_keyrt   r   r
  r1   r   unblock_key)rR   blockeds     r0   test_block_keyTestKeyboard.test_block_keyn  sn    $$S)CHc2./*XsB2O1PQW%CS!r2   c                     [         R                  " S5        U R                  [        [        -   [        5        U R                  [        [        SS5      // 5        g )Nr   r   )r5   r  rt   r   r
  r1   r   rQ   s    r0   test_block_key_ambiguous%TestKeyboard.test_block_key_ambiguoust  s<    3CHc2./4r2   c                 6   [         R                  " SS5      nU R                  [        [        -   [
        -   [        [        -   [        -   5        [         R                  " U5        U R                  [        [        -   [
        -   [        [        -   [
        -   5        g r  )	r5   	remap_keyrt   r   d_cr	  r
  r  unremap_keyrR   mappeds     r0   test_remap_key_simple"TestKeyboard.test_remap_key_simpley  s^    ##C-CSWS[)V$CSWS[)r2   c                     [         R                  " SS5        U R                  [        [        -   [        [        -   5        U R                  [        [        SS5      /[        5        g )Nr   r
   r   )r5   r  rt   r   r
  r1   r   rQ   s    r0   test_remap_key_ambiguous%TestKeyboard.test_remap_key_ambiguous~  sB    3$CS!Hc2./5r2   c                 R   [         R                  " SS5      nU R                  [        [        -   [
        -   [        [        -   [        -   [        -   [        -   5        [         R                  " U5        U R                  [        [        -   [
        -   [        [        -   [
        -   5        g )Nr	   zshift+b)r5   r  rt   r   r  r	  r  r
  r  r=  r  r  s     r0   test_remap_key_multiple$TestKeyboard.test_remap_key_multiple  sh    ##C3CWS[_S089V$CSWS[)r2   c                     U R                  [        [        -   5        U R                  [	        [
        R                  " 5       5      SS/5        U R                  / [        [        -   5        g Nr   r   )	rt   r   r  ro   sortedr5   stash_stater	  r=  rQ   s    r0   test_stash_stateTestKeyboard.test_stash_state  sF    G 4 4 67!Q@CK r2   c                     U R                  [        5        [        R                  " SS/5        U R                  / [        [
        -   [        -   5        g r  )rt   r
  r5   restore_stater  r   r  rQ   s    r0   test_restore_stateTestKeyboard.test_restore_state  s5    1v&CGGO$r2   c                     U R                  [        5        [        R                  " SS/5        U R                  / [        [
        -   5        g r  )rt   r
  r5   restore_modifiersr  r  rQ   s    r0   test_restore_modifieres$TestKeyboard.test_restore_modifieres  s1    ""Aq6*CK r2   c                 h    [         R                  " SSS9  U R                  / [        [        -   5        g Nr	   Fexact)r5   writert   r   r	  rQ   s    r0   test_write_simpleTestKeyboard.test_write_simple  s"    s%(CGr2   c                     [         R                  " SSS9  U R                  / [        [        -   [
        -   [        -   5        g )NabFr  )r5   r  rt   r   r	  r
  r  rQ   s    r0   test_write_multiple TestKeyboard.test_write_multiple  s*    t5)CGCKO$r2   c                     [         R                  " SSS9  U R                  / [        [        -   [
        -   [        -   [        -   [        -   5        g )NAbFr  )	r5   r  rt   r  r   r	  r=  r
  r  rQ   s    r0   test_write_modifiers!TestKeyboard.test_write_modifiers  s5    t5)GCKOG+C/34r2   c                     U R                  [        5        [        R                  " SSS9  U R                  / [        [
        -   [        -   [        -   5        g r  )rt   r  r5   r  r=  r   r	  rQ   s    r0   test_write_stash_restore%TestKeyboard.test_write_stash_restore  s7    s%(GCKOG+,r2   c                     [         R                   " 5       n[        R                  " SSSS9  U R                  / [        [
        -   [        -   [        -   5        U R                  [         R                   " 5       U-
  S5        g )Nr  rG  F)delayr  gQ?)	r.   r5   r  rt   r   r	  r
  r  assertGreater)rR   	last_times     r0   r  r    sR    IIK	t4u5CGCKO$499;2E:r2   c           
          [         R                  " SSS9  U R                  / [        [        SSS9[        [        SSS9/5        g )Nr  Tr  rE   r	   rF   r
   )r5   r  rt   r   r   rQ   s    r0   test_write_unicode_explicit(TestKeyboard.test_write_unicode_explicit  sK    t4(]h#CPR_ks  @C  JM  SN  O  	Pr2   c           	          [         R                  " SSS9  U R                  / [        [        SSS9/[
        -   [        -   5        g )Nu   ábFr  rE      árF   )r5   r  rt   r   r   r
  r  rQ   s    r0   test_write_unicode_fallback(TestKeyboard.test_write_unicode_fallback  s6    vU+]h#ERSTWWX[[\r2   c                     [         R                  " 5         U R                  [        [        -   5        U R                  [         R                  " 5       [        [        -   5        g r4   )r5   start_recordingrt   r   r	  ro   stop_recordingrQ   s    r0   test_start_stop_recording&TestKeyboard.test_start_stop_recording  s;      "C002CG<r2   c                     U R                  [        5         [        R                  " 5         S S S 5        g ! , (       d  f       g = fr4   )r   r   r5   r  rQ   s    r0   test_stop_recording_error&TestKeyboard.test_stop_recording_error  s(    z*##% +**s	   5
Ac                   ^ [         R                  R                  5       mU4S jnSSKJn  U" US9nSUl        UR                  5         [        R                  " S5        U R                  [        [        -   [        -   [        [        -   5        U R                  TR                  SS9[        [        -   [        -   5        g )	Nc                  N   > T R                  [        R                  " SSS95        g )Nr   TrR  )putr5   recordrp   s   r0   process)TestKeyboard.test_record.<locals>.process  s    IIhoog=>r2   r   ThreadtargetTrG        ?timeout)r5   _queueQueue	threadingr  daemonstartr.   rJ  rt   du_adu_bdu_spacero   getrR   r  r  trp   s       @r0   test_recordTestKeyboard.test_record  s    %%'	?$'"		

4T	("DI.3/d81CDr2   c                     [         R                  " [        [        -   S5        U R	                  / [        [        -   5        g Nr   )r5   playr   r	  rt   rQ   s    r0   test_play_nodelayTestKeyboard.test_play_nodelay  s&    c#gq!CGr2   c                     U R                  [        5        [        R                  " [        [
        -   S5        U R                  / [        [        -   [
        -   [        -   5        g r  )rt   r7  r5   r  r   r	  r8  rQ   s    r0   test_play_stashTestKeyboard.test_play_stash  s:    c#gq!F3JsN6)*r2   c                 .   [         R                   " 5       n[        [        SSS5      [        [        SSS5      /n[        R
                  " US5        U R                  / [        [        -   5        U R                  [         R                   " 5       U-
  S5        g )Nr	   r   rN   gq=
ף Y@g{Gzt?)
r.   r1   r   r   r5   r  rt   r   r	  r  )rR   r  eventss      r0   test_play_delayTestKeyboard.test_play_delay  si    IIK	XsAs3ZQPV5WXfa CG499;2E:r2   c                     [         [        -   [        -   [        -   [         -   [        -   [
        -   [        -   [         -   nU R                  [        [        R                  " U5      5      SS/5        g )NzaA r	   )r  r  du_backspacer  r=  r  du_ctrlro   listr5   get_typed_stringsrR   r  s     r0   test_get_typed_strings_simple*TestKeyboard.test_get_typed_strings_simple  sR    d<'/4W<XEgMdRh88@AE3<Pr2   c                    [         [        -   [        -   nU R                  [	        [
        R                  " U5      5      S/5        [        [         -   [        -   nU R                  [	        [
        R                  " U5      5      S/5        g )Nr	   r  )r  r  r
  ro   r  r5   r  r  s     r0    test_get_typed_strings_backspace-TestKeyboard.test_get_typed_strings_backspace  sc    d<'h88@AC5Id"4'h88@AD6Jr2   c                     [         [        -   [        -   [        -   [        -   [
        -   [        -   nU R                  [        [        R                  " U5      5      SS/5        g )NzAB r	   )
r  r  r  r=  r  r  ro   r  r5   r  r  s     r0   test_get_typed_strings_shift)TestKeyboard.test_get_typed_strings_shift  sH    d"7*83G;D@h88@AE3<Pr2   c                     [         [        -   [        -   [        -   [         -   [        -   [        -   [
        -   [        -   [        -   [         -   nU R                  [        [        R                  " U5      5      SS/5        g )NzaAb r   )r  r  r
  r  du_capslockr=  r  r  ro   r  r5   r  r  s     r0   test_get_typed_strings_all'TestKeyboard.test_get_typed_strings_all  s^    d<'/4[@EgMhVW^^_cch88@AFC=Qr2   c                 R    U R                  [        R                  " S/5      S5        g r   ro   r5   get_hotkey_namerQ   s    r0   test_get_hotkey_name_simple(TestKeyboard.test_get_hotkey_name_simple  s    113%8#>r2   c                 T    U R                  [        R                  " / SQ5      S5        g )N)r	   r   r   r<  r  rQ   s    r0   test_get_hotkey_name_modifiers+TestKeyboard.test_get_hotkey_name_modifiers  s    112HI>Zr2   c                 T    U R                  [        R                  " SS/5      S5        g )Nr   r   z
ctrl+shiftr  rQ   s    r0   test_get_hotkey_name_normalize+TestKeyboard.test_get_hotkey_name_normalize  s"    117K2HI<Xr2   c                 R    U R                  [        R                  " S/5      S5        g Nr    r   r  rQ   s    r0   test_get_hotkey_name_plus&TestKeyboard.test_get_hotkey_name_plus  s    113%8&Ar2   c                 T    U R                  [        R                  " SS/5      S5        g r'  r  rQ   s    r0   test_get_hotkey_name_duplicated,TestKeyboard.test_get_hotkey_name_duplicated  s!    113-@&Ir2   c                 T    U R                  [        R                  " / SQ5      S5        g )N)r    r   r   WINz	right altzctrl+alt+shift+windows+plusr  rQ   s    r0   test_get_hotkey_name_full&TestKeyboard.test_get_hotkey_name_full  s&    112ab  eB  	Cr2   c                 T    U R                  [        R                  " / SQ5      S5        g )N)r   r
   !r	   z
ctrl+!+a+br  rQ   s    r0   test_get_hotkey_name_multiple*TestKeyboard.test_get_hotkey_name_multiple  s    112IJLYr2   c                     U R                  [        [        -   [        -   [        -   5        U R                  [        R                  " 5       S5        g )Nctrl+a+b)rt   du_cr7  r   r
  ro   r5   r  rQ   s    r0   !test_get_hotkey_name_from_pressed.TestKeyboard.test_get_hotkey_name_from_pressed  s4    VC#$113Z@r2   c                 R  ^ [         R                  R                  5       mU4S jnSSKJn  U" US9nSUl        UR                  5         [        R                  " S5        U R                  [        [        -   [        -   [        -   5        U R                  TR                  SS9S	5        g )
Nc                  N   > T R                  [        R                  " 5       5        g r4   )r  r5   read_hotkeyr  s   r0   r  .TestKeyboard.test_read_hotkey.<locals>.process  s    IIh**,-r2   r   r  r  TrG  r  r  r6  )r5   r  r  r  r  r  r  r.   rJ  rt   r7  r   r
  r8  ro   r  r  s       @r0   test_read_hotkeyTestKeyboard.test_read_hotkey  sw    %%'	.$'"		

4s
3v%&3/<r2   c                 8  ^ [         R                  R                  5       mU4S jnSSKJn  U" US9nSUl        UR                  5         [        R                  " S5        U R                  [        / 5        U R                  TR                  SS9[        S   5        g )	Nc                  L   > T R                  [        R                  " SS95        g NTrR  )r  r5   
read_eventr  s   r0   r  -TestKeyboard.test_read_event.<locals>.process  s    IIh))489r2   r   r  r  TrG  r  r  r5   r  r  r  r  r  r  r.   rJ  rt   r   ro   r  r  s       @r0   test_read_eventTestKeyboard.test_read_event  sp    %%'	:$'"		

4R3/Q8r2   c                 *  ^ [         R                  R                  5       mU4S jnSSKJn  U" US9nSUl        UR                  5         [        R                  " S5        U R                  [        / 5        U R                  TR                  SS9S	5        g )
Nc                  L   > T R                  [        R                  " SS95        g rB  )r  r5   read_keyr  s   r0   r  +TestKeyboard.test_read_key.<locals>.process  s    IIh''67r2   r   r  r  TrG  r  r  r	   rE  r  s       @r0   test_read_keyTestKeyboard.test_read_key  sl    %%'	8$'"		

4R3/5r2   c                    ^  ST l         U 4S jnSSKJn  U" US9nSUl        UR	                  5         [
        R                  " S5        T R                  T R                   5        g )NFc                  >   > [         R                  " 5         ST l        g NT)r5   waitrD  rQ   s   r0   r  0TestKeyboard.test_wait_infinite.<locals>.process  s    MMO!DNr2   r   r  r  TrG  )rD  r  r  r  r  r.   rJ  r   rR   r  r  r  s   `   r0   test_wait_infiniteTestKeyboard.test_wait_infinite  sL    	" 	%'"		

4(r2   c                 J  ^ [         R                  R                  5       mU4S jnSSKJn  U" US9nSUl        UR                  5         TR                  S5        [        R                  " S5        U R                  [        / 5        U R                  TR                  SS	95        g )
Nc                  z   > T R                  [        R                  " T R                  SS9SS9=(       d    S5        g )Nr  r  TrR  )r  r5   rQ  r  r  s   r0   r  5TestKeyboard.test_wait_until_success.<locals>.process)  s*    IIhmmEIIcI$:TJRdSr2   r   r  r  Tr	   rG  r  r  )r5   r  r  r  r  r  r  r  r.   rJ  rt   r   r~   r  r  s       @r0   test_wait_until_success$TestKeyboard.test_wait_until_success'  st    %%'	T$'"				#

4R		#	./r2   c                    ^  U 4S jnSSK Jn  U" US9nSUl        UR                  5         [        R
                  " S5        T R                  [        5        g )Nc                  P   > [         R                  " SSS9  T R                  5         g Nr	   TrR  )r5   rQ  failrQ   s   r0   r  2TestKeyboard.test_wait_until_fail.<locals>.process4  s    MM#-IIKr2   r   r  r  TrG  )r  r  r  r  r.   rJ  rt   r
  rS  s   `   r0   test_wait_until_fail!TestKeyboard.test_wait_until_fail3  s>    	 	%'"		

4r2   c                 t    [         R                  " SS SS9  U R                  [        [        [        -   5        g )Nr	   c                  (    [        5       =(       d    S$ rP  triggerr=   r2   r0   r>   ITestKeyboard.test_add_hotkey_single_step_suppress_allow.<locals>.<lambda>?  s    ):d):r2   TrR  )r5   
add_hotkeyrt   r   triggered_eventrQ   s    r0   *test_add_hotkey_single_step_suppress_allow7TestKeyboard.test_add_hotkey_single_step_suppress_allow>  s(    C!:TJ_S()r2   c                    ^ ^ [        5       m[        R                  " SUU 4S jT4SS9  T R                  [        [
        [        -   5        g )Nr	   c                 \   > TR                  U T5      =(       d    [        5       =(       d    S$ rP  )assertIsre  )r	   argrR   s    r0   r>   NTestKeyboard.test_add_hotkey_single_step_suppress_args_allow.<locals>.<lambda>C  s     4==C+@+UGI+UQU+Ur2   T)argsrS  )objectr5   rg  rt   r   rh  )rR   rn  s   `@r0   /test_add_hotkey_single_step_suppress_args_allow<TestKeyboard.test_add_hotkey_single_step_suppress_args_allowA  s7    hC!U]`\bmqr_S()r2   c                 l    [         R                  " S[        SS9  U R                  [        [
        5        g r]  )r5   rg  re  rt   r   rh  rQ   s    r0   +test_add_hotkey_single_step_suppress_single8TestKeyboard.test_add_hotkey_single_step_suppress_singleE  s"    C48_%r2   c                     [         R                  " [         R                  " S[        SS95        U R	                  [
        [
        5        g r]  )r5   remove_hotkeyrg  re  rt   r   rQ   s    r0   ,test_add_hotkey_single_step_suppress_removed9TestKeyboard.test_add_hotkey_single_step_suppress_removedH  s-    x223$OPSr2   c                 $   [         R                  " [         R                  " S[        SS95        U R	                  [
        [        -   [
        [        -   5        U R                  [         R                  R                  [        S   S   S      S5        g )Nr6  TrR  r   r   )r5   rx  rg  re  rt   r7  r   ro   r6   filtered_modifiersr/   rQ   s    r0   ry  rz  K  sh    x228WtTUs
F3J'++>>z+?VWX?YZ[?\]_`ar2   c                    [         R                  " S[        SS9nU R                  [	        [         R
                  R                  R                  5       5      5        U R                  [	        [         R
                  R                  R                  5       5      5        U R                  [         R                  0 5        U" 5         U R                  [        [         R
                  R                  R                  5       5      (       + 5        U R                  [        [         R
                  R                  R                  5       5      (       + 5        U R                  [         R                  0 5        g )Nr  TrR  r5   rg  re  r~   allr6   blocking_hotkeysvaluesr|  assertNotEqualr\   anyro   rR   removes     r0   test_remove_hotkey_internal(TestKeyboard.test_remove_hotkey_internalO  s    $$Y$GH..??FFHIJH..AAHHJKLH--r2C 2 2 E E L L NOOPC 2 2 C C J J LMMN**B/r2   c                    [         R                  " S[        SS9nU R                  [	        [         R
                  R                  R                  5       5      5        U R                  [	        [         R
                  R                  R                  5       5      5        U R                  [         R                  0 5        U" 5         U R                  [        [         R
                  R                  R                  5       5      (       + 5        U R                  [        [         R
                  R                  R                  5       5      (       + 5        U R                  [         R                  0 5        g N
shift+a, bTrR  r~  r  s     r0   +test_remove_hotkey_internal_multistep_start8TestKeyboard.test_remove_hotkey_internal_multistep_startX  s    $$\7TJH..??FFHIJH..AAHHJKLH--r2C 2 2 E E L L NOOPC 2 2 C C J J LMMN**B/r2   c                 *   [         R                  " S[        SS9nU R                  [        [
        -   [        -   5        U R                  [        [         R                  R                  R                  5       5      5        U R                  [        [         R                  R                  R                  5       5      (       + 5        U R                  [         R                  0 5        U" 5         U R                  [        [         R                  R                  R                  5       5      (       + 5        U R                  [        [         R                  R                  R                  5       5      (       + 5        U R                  [         R                  0 5        g r  )r5   rg  re  rt   r  r  r=  r~   r  r6   r  r  r|  r  r\   ro   r  s     r0   )test_remove_hotkey_internal_multistep_end6TestKeyboard.test_remove_hotkey_internal_multistep_enda  s    $$\7TJW$%H..??FFHIJC 2 2 E E L L NOOPH--r2C 2 2 E E L L NOOPC 2 2 C C J J LMMN**B/r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        5        g Nr<  TrR  )r5   rg  re  rt   r7  r  r   rh  rQ   s    r0   3test_add_hotkey_single_step_suppress_with_modifiers@TestKeyboard.test_add_hotkey_single_step_suppress_with_modifiersk  s+    NGdCws"O4r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        -   [
        [        -   [        -   [        -   5        g r  )r5   rg  re  rt   r7  r  r=  r   rQ   s    r0   Ktest_add_hotkey_single_step_suppress_with_modifiers_fail_unrelated_modifierXTestKeyboard.test_add_hotkey_single_step_suppress_with_modifiers_fail_unrelated_modifiern  s>    NGdCww&s*GGOF,B3,FGr2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [
        [        -   [        -   5        g r  )r5   rg  re  rt   r7  r  r  rQ   s    r0   Ftest_add_hotkey_single_step_suppress_with_modifiers_fail_unrelated_keySTestKeyboard.test_add_hotkey_single_step_suppress_with_modifiers_fail_unrelated_keyq  s4    NGdCwt#WV^D%89r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        -   [
        [        -   [        -   [        -   5        g r  )	r5   rg  re  rt   r7  r  r  r   rh  rQ   s    r0   Atest_add_hotkey_single_step_suppress_with_modifiers_unrelated_keyNTestKeyboard.test_add_hotkey_single_step_suppress_with_modifiers_unrelated_keyt  s>    NGdCwt#C')<_)LMr2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        -   [        -   [        -   [
        [        -   [        -   [        -   [        -   [        -   5        g r  )r5   rg  re  rt   r7  r  r  r   r8  r=  rh  rQ   s    r0   ;test_add_hotkey_single_step_suppress_with_modifiers_releaseHTestKeyboard.test_add_hotkey_single_step_suppress_with_modifiers_releasew  sT    NGdCwt#C'.w6t8KO8[\b8bcj8jkr2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        5        g r  )r5   rg  re  rt   r  r7  r   rh  rQ   s    r0   @test_add_hotkey_single_step_suppress_with_modifiers_out_of_orderMTestKeyboard.test_add_hotkey_single_step_suppress_with_modifiers_out_of_orderz  s+    NGdCs"O4r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [
        -   [        [        -   [        -   [        -   5        g Nr6  TrR  r5   rg  re  rt   r7  r  r  rh  rQ   s    r0   <test_add_hotkey_single_step_suppress_with_modifiers_repeatedITestKeyboard.test_add_hotkey_single_step_suppress_with_modifiers_repeated}  s?    Hg=tD %v'=d'B?'RSr2   c                     [         R                  " S[        SSS9  U R                  [        [
        -   [        -   [
        -   [        [        -   [        -   [        -   5        g Nr6  TrS  trigger_on_releaser  rQ   s    r0   r  r    sB    HgQUVtD %v'=d'B?'RSr2   c                     [         R                  " S[        SSS9  U R                  [        [
        -   [        -   [        -   [        -   [        [
        -   [        -   [        -   [        -   5        g r  	r5   rg  re  rt   r7  r  r  r=  r8  rQ   s    r0   Ctest_add_hotkey_single_step_suppress_with_modifier_superset_releasePTestKeyboard.test_add_hotkey_single_step_suppress_with_modifier_superset_release  sL    HgQUVwt#G+F2F7N44G4OPV4VWr2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        -   [        -   [        [
        -   [        -   [        -   [        -   5        g r  r  rQ   s    r0   ;test_add_hotkey_single_step_suppress_with_modifier_supersetHTestKeyboard.test_add_hotkey_single_step_suppress_with_modifier_superset  sI    Hg=wt#G+F2F7N44G4OPV4VWr2   c                 n    [         R                  " S[        SSS9  U R                  [        [
        5        g )Nr	   r   Tr  rS  )r5   rg  re  rt   r  rh  rQ   s    r0   #test_add_hotkey_single_step_timeout0TestKeyboard.test_add_hotkey_single_step_timeout  s$    C!dCo&r2   c                     [         R                  " S[        SSS9  [        R                  " S5        U R                  [        [        -   [        5        g )Nr   rG  Tr  gQ?)	r5   rg  re  r.   rJ  rt   r  r  rh  rQ   s    r0   (test_add_hotkey_multi_step_first_timeout5TestKeyboard.test_add_hotkey_multi_step_first_timeout  s4    FGTDI

4T	?+r2   c                     [         R                  " S[        SSS9  U R                  [        / 5        [
        R                  " S5        U R                  [        [        [        -   5        g )Nr   rG  Tr  rH  )r5   rg  re  rt   r  r.   rJ  r  rQ   s    r0   'test_add_hotkey_multi_step_last_timeout4TestKeyboard.test_add_hotkey_multi_step_last_timeout  sB    FGTDIb

4d4i r2   c                     [         R                  " S[        SSS9  U R                  [        / 5        [
        R                  " S5        U R                  [        [        5        g )Nr   rH  Tr  rG  )	r5   rg  re  rt   r  r.   rJ  r  rh  rQ   s    r0   *test_add_hotkey_multi_step_success_timeout7TestKeyboard.test_add_hotkey_multi_step_success_timeout  s>    FGTDIb

4o&r2   c                 $   [         R                  " S[        SSS9  U R                  [        [
        -   / 5        [        R                  " S5        U R                  [        [        [
        -   5        U R                  [
        [        -   [        5        g )Nza, b, arG  Tr  rH  )	r5   rg  re  rt   r  r  r.   rJ  rh  rQ   s    r0   )test_add_hotkey_multi_step_suffix_timeout6TestKeyboard.test_add_hotkey_multi_step_suffix_timeout  sX    IwtLT	2

4d4i T	?+r2   c                     [         R                  " SS SS9  U R                  [        [        -   [
        [        -   [        -   5        g )Nr   c                  (    [        5       =(       d    S$ rP  rd  r=   r2   r0   r>   ?TestKeyboard.test_add_hotkey_multi_step_allow.<locals>.<lambda>  s    GI,=,=r2   TrR  )r5   rg  rt   r  r  rh  rQ   s    r0    test_add_hotkey_multi_step_allow-TestKeyboard.test_add_hotkey_multi_step_allow  s1    F$=MT	?4/45r2   c                   ^ [         R                  R                  5       m[         R                  " SU4S jSS9  U R	                  [
        [        -   [        -   [        -   5        U R                  TR                  SS95        g )Nctrl+shift+a+bc                  &   > T R                  S5      $ rP  r  r  s   r0   r>   FTestKeyboard.test_add_hotkey_single_step_nonsuppress.<locals>.<lambda>      eiior2   FrR  r  r  r5   r  r  rg  rt   r  r7  r   r
  r~   r  rR   rp   s    @r0   'test_add_hotkey_single_step_nonsuppress4TestKeyboard.test_add_hotkey_single_step_nonsuppress  s[    %%',.EPUVs"3&'		#	./r2   c                   ^ [         R                  R                  5       m[         R                  " SU4S jSS9  U R	                  [
        [        -   [        -   [        -   5        U R	                  [
        [        -   [        -   [        -   5        U R                  TR                  SS95        U R                  TR                  SS95        g )Nr  c                  &   > T R                  S5      $ rP  r  r  s   r0   r>   OTestKeyboard.test_add_hotkey_single_step_nonsuppress_repeated.<locals>.<lambda>  r  r2   FrR  r  r  r  r  s    @r0   0test_add_hotkey_single_step_nonsuppress_repeated=TestKeyboard.test_add_hotkey_single_step_nonsuppress_repeated  s    %%',.EPUVs"3&'s"3&'		#	./		#	./r2   c                    ^ [         R                  R                  5       m[         R                  " SU4S jSS9  U R	                  [
        [        -   [        -   5        U R                  TR                  SS95        g )Nr<  c                  &   > T R                  S5      $ rP  r  r  s   r0   r>   aTestKeyboard.test_add_hotkey_single_step_nosuppress_with_modifiers_out_of_order.<locals>.<lambda>  s    EIIdOr2   FrR  r  r  )
r5   r  r  rg  rt   r  r7  r   r~   r  r  s    @r0   Btest_add_hotkey_single_step_nosuppress_with_modifiers_out_of_orderOTestKeyboard.test_add_hotkey_single_step_nosuppress_with_modifiers_out_of_order  sT    %%'N,CeTs"#		#	./r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        -   [        [
        -   [        -   [        -   5        g r]  )r5   rg  re  rt   r  r   u_cr	  rQ   s    r0   1test_add_hotkey_single_step_suppress_regression_1>TestKeyboard.test_add_hotkey_single_step_suppress_regression_1  s:    C48CCSS1r2   c                     [         R                  " SS5        U R                  [        [        -   [
        [        -   5        g r  )r5   remap_hotkeyrt   r   r	  r
  r  rQ   s    r0   test_remap_hotkey_single%TestKeyboard.test_remap_hotkey_single  s(    c3'CS!r2   c                     [         R                  " SS5        U R                  [        [        -   [
        [        -   [        -   [        -   5        g )Nr	   z	ctrl+b, c)	r5   r  rt   r   r	  r7  r  r8  r7  rQ   s    r0   test_remap_hotkey_complex_dst*TestKeyboard.test_remap_hotkey_complex_dst  s2    c;/CV+D01r2   c                     [         R                  " SS5        U R                  [        [        -   [
        -   [        -   [        5        g Nr<  r
   )r5   r  rt   r7  r  r   r	  r  rQ   s    r0   test_remap_hotkey_modifiers(TestKeyboard.test_remap_hotkey_modifiers  s.    nc2ws"3&-r2   c                     [         R                  " SS5        U R                  [        [        -   [
        -   [
        -   [        [        -   5        g r  )r5   r  rt   r7  r  r  r  rQ   s    r0   "test_remap_hotkey_modifiers_repeat/TestKeyboard.test_remap_hotkey_modifiers_repeat  s2    nc2wt#D($t)4r2   c                 F   [         R                  " SS5        U R                  [        [        -   [
        -   [        -   [        -   [        [        -   [
        -   [        -   [        -   [        -   [        -   [        -   [        -   [        -   [        -   [        -   [        -   5        g r  )
r5   r  rt   r7  r  r7  r  r=  r8  r  rQ   s    r0   !test_remap_hotkey_modifiers_state.TestKeyboard.test_remap_hotkey_modifiers_state  s    nc2wt#D(-wv~d/B7/J6/QRV/VW]/]^e/efm/mnt/tuy/y  {A  0A  BI  0I  	Jr2   c                 \    [         R                  " SSSS9  U R                  [        / 5        g Nr	   r
   T)r  )r5   r  rt   r   rQ   s    r0   $test_remap_hotkey_release_incomplete1TestKeyboard.test_remap_hotkey_release_incomplete  s"    c34@Rr2   c                 d    [         R                  " SSSS9  U R                  [        [        5        g r  )r5   r  rt   r  r  rQ   s    r0   "test_remap_hotkey_release_complete/TestKeyboard.test_remap_hotkey_release_complete  s"    c34@dr2   c                 P    U R                  [        R                  " S5      S5        g )N   )))r  ro   r5   parse_hotkey_combinationsrQ   s    r0   (test_parse_hotkey_combinations_scan_code5TestKeyboard.test_parse_hotkey_combinations_scan_code  s    ;;B?Mr2   c                 P    U R                  [        R                  " S5      S5        g r   r  rQ   s    r0   %test_parse_hotkey_combinations_single2TestKeyboard.test_parse_hotkey_combinations_single  s    ;;C@*Mr2   c                 P    U R                  [        R                  " S5      S5        g )Nr  ))r   r   )r   r   r  rQ   s    r0   .test_parse_hotkey_combinations_single_modifier;TestKeyboard.test_parse_hotkey_combinations_single_modifier  s    ;;IFH[\r2   c                 P    U R                  [        R                  " S5      S5        g )Nzshift+ctrl+a)))r   r   r   )r   r   r   r  rQ   s    r0   /test_parse_hotkey_combinations_single_modifiers<TestKeyboard.test_parse_hotkey_combinations_single_modifiers  s    ;;NKMfgr2   c                 P    U R                  [        R                  " S5      S5        g )Nr   r   r  rQ   s    r0   $test_parse_hotkey_combinations_multi1TestKeyboard.test_parse_hotkey_combinations_multi  s    ;;FCEWXr2   c                 P    U R                  [        R                  " S5      S5        g )Nr  )r  r   r  rQ   s    r0   -test_parse_hotkey_combinations_multi_modifier:TestKeyboard.test_parse_hotkey_combinations_multi_modifier  s    ;;LIKfgr2   c                     U R                  [        R                  " [        R                  " S5      5      [        R                  " S5      5        g r  r  rQ   s    r0   (test_parse_hotkey_combinations_list_list5TestKeyboard.test_parse_hotkey_combinations_list_list  sI    ;;H<^<^_e<fgiq  jL  jL  MS  jT  	Ur2   c                     U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = fr   )r   r   r5   r  rQ   s    r0   )test_parse_hotkey_combinations_fail_empty6TestKeyboard.test_parse_hotkey_combinations_fail_empty  s*    z*..r2 +**r   c                 *   [         R                  " S[        SS9  U R                  [        / 5        U R                  [         R                  R                  S   / 5        U R                  [        [         R                  R                  S   5      S5        g )Nr   TrR  r   r   r   )	r5   rg  re  rt   r  ro   r6   r  lenrQ   s    r0   -test_add_hotkey_multistep_suppress_incomplete:TestKeyboard.test_add_hotkey_multistep_suppress_incomplete  si    FGd;b++<<TBBGX//@@FGKr2   c                 z    [         R                  " S[        SS9  U R                  [        [
        -   [        5        g Nr   TrR  )r5   rg  re  rt   r  r  rh  rQ   s    r0   r  r    s&    FGd;T	?+r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        -   [        5        g r  )	r5   rg  re  rt   r  r  r=  r  rh  rQ   s    r0   +test_add_hotkey_multistep_suppress_modifier8TestKeyboard.test_add_hotkey_multistep_suppress_modifier  s0    L'DAW$T)?;r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        [
        -   5        g r  )r5   rg  re  rt   r  r7  rQ   s    r0   'test_add_hotkey_multistep_suppress_fail4TestKeyboard.test_add_hotkey_multistep_suppress_fail  s*    FGd;T	49%r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        5        g Nza, b, cTrR  )r5   rg  re  rt   r  r  r7  rh  rQ   s    r0   .test_add_hotkey_multistep_suppress_three_steps;TestKeyboard.test_add_hotkey_multistep_suppress_three_steps  s*    Iw>T	$0r2   c                     [         R                  " S[        SSS9  U R                  [        [        -   [
        -   [        5        g )Nza, a, cTr  )r5   rg  re  rt   r  r7  rh  rQ   s    r0   2test_add_hotkey_multistep_suppress_repeated_prefix?TestKeyboard.test_add_hotkey_multistep_suppress_repeated_prefix  s-    IwRVWT	$0r2   c                 \   [         R                  " S[        SS9  U R                  [        [        -   [
        -   [        [        -   5        U R                  [         R                  R                  S   / 5        U R                  [        [         R                  R                  S   5      S5        g )Nr   TrR  r   r   r   )r5   rg  re  rt   r  r  rh  ro   r6   r  r  rQ   s    r0   /test_add_hotkey_multistep_suppress_repeated_key<TestKeyboard.test_add_hotkey_multistep_suppress_repeated_key  sv    FGd;T	$_ 45++<<TBBGX//@@FGKr2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [        -   [        -   [        [
        -   [        -   [        -   [        -   5        g r  )	r5   rg  re  rt   r  r   r  r	  r7  rQ   s    r0   0test_add_hotkey_multi_step_suppress_regression_1=TestKeyboard.test_add_hotkey_multi_step_suppress_regression_1  sD    FGd;CC$c#gck#od&:;r2   c                     [         R                  " S[        SS9  U R                  [        [
        -   [        -   [
        -   [        -   [        [
        -   [        -   [
        -   [        -   5        g r!  )r5   rg  re  rt   r  r  r  rQ   s    r0   +test_add_hotkey_multi_step_suppress_replays8TestKeyboard.test_add_hotkey_multi_step_suppress_replays  sF    Iw>T	$t#H,d4inT.A(.JKr2   c                   ^ [         R                  R                  5       mU4S jn[         R                  " SU5        U R	                  [
        [        -   [        -   [        -   5        U R                  TR                  SS95        g )Nc                  (   > T R                  S5        g r   r  r  s   r0   free9TestKeyboard.test_add_word_listener_success.<locals>.free      IIaLr2   abcr  r  r5   r  r  add_word_listenerrt   r  r  r7  r  r~   r  rR   r2  rp   s     @r0   test_add_word_listener_success+TestKeyboard.test_add_word_listener_success  sZ    %%'	""5$/T	$x'(		#	./r2   c                 f  ^ [         R                  R                  5       mU4S jn[         R                  " SU5        U R	                  [
        [        -   [        -   5        U R                  [         R                  R                  5         TR                  SS9  S S S 5        g ! , (       d  f       g = f)Nc                  (   > T R                  S5        g r   r  r  s   r0   r2  ATestKeyboard.test_add_word_listener_no_trigger_fail.<locals>.free  r4  r2   r5  rG  r  r5   r  r  r7  rt   r  r  r7  r   Emptyr  r8  s     @r0   &test_add_word_listener_no_trigger_fail3TestKeyboard.test_add_word_listener_no_trigger_fail	  sp    %%'	""5$/T	$x445IIdI# 655s   	B""
B0c           	        ^ [         R                  R                  5       mU4S jn[         R                  " SUSS9  U R	                  [
        [        -   [        -   [        [        SSS9/-   5        U R                  [         R                  R                  5         TR                  SS9  S S S 5        g ! , (       d  f       g = f)	Nc                  (   > T R                  S5        g r   r  r  s   r0   r2  >TestKeyboard.test_add_word_listener_timeout_fail.<locals>.free  r4  r2   r5  r   r  r   r   )r-   r.   rG  )r5   r  r  r7  rt   r  r  r7  r1   r   r   r?  r  r8  s     @r0   #test_add_word_listener_timeout_fail0TestKeyboard.test_add_word_listener_timeout_fail  s    %%'	""5$:T	$
8' JKKLx445IIdI# 655s   B22
C c                 p    [         R                  " S[        5        [         R                  " S[        5        g )Nr5  )r5   r7  re  rQ   s    r0   test_duplicated_word_listener*TestKeyboard.test_duplicated_word_listener  s"    ""5'2""5'2r2   c                   ^ [         R                  R                  5       mU4S jn[         R                  " SU5        [         R                  " S5        U R                  [        [        -   [        -   [        -   5        U R                  [         R                  R                  5         TR                  SS9  S S S 5        g ! , (       d  f       g = f)Nc                  (   > T R                  S5        g r   r  r  s   r0   r2  8TestKeyboard.test_add_word_listener_remove.<locals>.free  r4  r2   r5  rG  r  )r5   r  r  r7  remove_word_listenerrt   r  r  r7  r  r   r?  r  r8  s     @r0   test_add_word_listener_remove*TestKeyboard.test_add_word_listener_remove  s    %%'	""5$/%%e,T	$x'(x445IIdI# 655s   &B??
Cc                   ^ [         R                  R                  5       mU4S jn[         R                  " SUSS9  U R	                  [
        [
        -   [        -   [        -   [        -   5        U R                  TR                  SS95        g )Nc                  (   > T R                  S5        g r   r  r  s   r0   r2  @TestKeyboard.test_add_word_listener_suffix_success.<locals>.free'  r4  r2   r5  T)match_suffixr  r  r6  r8  s     @r0   %test_add_word_listener_suffix_success2TestKeyboard.test_add_word_listener_suffix_success%  sa    %%'	""5$TBT	$t#H,-		#	./r2   c                 t  ^ [         R                  R                  5       mU4S jn[         R                  " SU5        U R	                  [
        [
        -   [        -   [        -   5        U R                  [         R                  R                  5         TR                  SS9  S S S 5        g ! , (       d  f       g = f)Nc                  (   > T R                  S5        g r   r  r  s   r0   r2  =TestKeyboard.test_add_word_listener_suffix_fail.<locals>.free.  r4  r2   r5  rG  r  r>  r8  s     @r0   "test_add_word_listener_suffix_fail/TestKeyboard.test_add_word_listener_suffix_fail,  su    %%'	""5$/T	$t#$x445IIdI# 655s   B))
B7)r   rD  r4   )__name__
__module____qualname____firstlineno__rS   r_   rt   rz   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/  r3  r9  r>  rK  rW  r]  rd  ri  rp  rw  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/  r3  r8  r>  rF  rL  rT  rY  r`  ri  rr  ru  ry  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  r"  r%  r(  r+  r.  r9  r@  rE  rH  rN  rT  rY  __static_attributes__r=   r2   r0   rM   rM   d   s=   
&(N
8II
BBdJJ-++O/JCURKWPRDX32012289(
+(#$"$$<9$$!<"5
*
6*!%!
%5-;
P]=&E+;QK
QR?[YBJCZA
=
9
6
)0	**&b00	05H:Nl5TTXX',!
'
,60
00
2"2.5JNN]hYhU3
L
,<&11L
<L0$$3$0$r2   rM   __main__r  r4   )4__doc__
__future__r   unittestr.   r5   _keyboard_eventr   r   r   r/   r1   rV   r8   r;   _os_keyboardr]   listen__getitem__map_namerI   r.  type_unicoder   r	  r  r
  r  r  r  r  r7  r7  r8  r  r  r=  du_shiftd_altu_altdu_altr
  r  d_spaceu_spacer  re  rh  TestCaserM   r[  mainr=   r2   r0   <module>rr     s   &    < <q"gY 1b' 1b'	
 1b' 1wi.2r(	# 1wi.2r(	# 1wi.2r(	# 
QG9 !R	 Ar7) QG9  1b'!$ 1b'%& 1b''* 2r(+, 2r(-. 2r(/2 8b"X&5
:u $
 *   4   !+!7!7   i    i    &E   " (C !&#
3w(C !&#
3w(C !&#
3w
X{
+	,
V[
)	*
-h-
.fl+
,7?	He	$%	FE	"#	u8[1:fk3RS(K0*V[2QRh(
)fg&
'x):fg+FG
, S9:O$8$$ O$l zMMO r2   