
    ѝi,                        S r SSKJr  SSKJr  SSKrSSKJr  SSKJrJ	r	  SSK
Jr  SSKJr   " S	 S
\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r\S:X  a  \R.                  " SS9  gg)zTest config_key, coverage 98%.

Coverage is effectively 100%.  Tkinter dialog is mocked, Mac-only line
may be skipped, and dummy function in bind test should not be called.
Not tested: exit with 'self.advanced or self.keys_ok(keys) ...' False.
    )
config_key)requiresN)mock)TkTclError)Func)	Mbox_funcc                       \ rS rSrSr " S S\R                  5      r\S 5       r	\S 5       r
S rS rS	 rS
 rS rS rS rS rS rS rSrg)ValidationTest   z.Test validation methods: ok, keys_ok, bind_ok.c                   D   ^  \ rS rSrU 4S jr\" 5       r\" 5       rSr	U =r
$ )ValidationTest.Validator   c                 F   > [         TU ]  " U0 UD6   " S S5      nX0l        g )Nc                   "    \ rS rSr\" 5       rSrg):ValidationTest.Validator.__init__.<locals>.list_keys_final    N)__name__
__module____qualname____firstlineno__r   get__static_attributes__r       3lib/python3.13/idlelib/idle_test/test_config_key.pylist_keys_finalr      s	    fr   r   super__init__r   selfargskwargsr   	__class__s       r   r    !ValidationTest.Validator.__init__   s%    Gd-f- #2 r   )r   )r   r   r   r   r    r   get_modifiersr	   	showerrorr   __classcell__r%   s   @r   	Validatorr      s    	3
 K	r   r+   c                     [        S5        [        5       U l        U R                  R                  5         S/SS//nU R	                  U R                  SU5      U l        g )Ngui	<Key-F12><Control-Key-x><Control-Key-X><<Test>>)r   r   rootwithdrawr+   dialog)clskeylists     r   
setUpClassValidationTest.setUpClass   sM    4=#46G"HI]]388ZA
r   c                 t    U ? U R                  R                  5         U R                  R                  5         U ?g Nr4   r2   update_idletasksdestroyr5   s    r   tearDownClassValidationTest.tearDownClass%   ,    J!!#Hr   c                 :    SU R                   R                  l        g )N )r4   r(   messager"   s    r   setUpValidationTest.setUp,   s    (*%r   c                 .   U R                   R                  R                  S5        U R                   R                  5         U R	                  U R                   R
                  S5        U R	                  U R                   R                  R                  S5        g )N rC   zNo key specified.)r4   
key_stringsetokassertEqualresultr(   rD   rE   s    r   test_ok_emptyValidationTest.test_ok_empty1   sc    ""3'++R0..668KLr   c                 x   U R                   R                  R                  S5        SU R                   R                  R                  l        U R                   R                  5         U R                  U R                   R
                  S5        U R                  U R                   R                  R                  S5        g )N	<Key-F11>F11rC   )
r4   rJ   rK   r   r   rN   rL   rM   r(   rD   rE   s    r   test_ok_goodValidationTest.test_ok_good7   sz    "";/16##''.++[9..66;r   c                     U R                  U R                  R                  S5      5        U R                  SU R                  R                  R
                  5        g )Nz<Control-ShiftzMissing the final)assertFalser4   keys_okassertInr(   rD   rE   s    r   test_keys_no_ending"ValidationTest.test_keys_no_ending>   s?    ,,-=>?)4;;+@+@+H+HIr   c                    SU R                   R                  R                  l        U R	                  U R                   R                  S5      5        U R                  SU R                   R                  R                  5        g )NAz<Key-A>zNo modifier)	r4   r   r   rN   rW   rX   rY   r(   rD   rE   s    r   test_keys_no_modifier_bad(ValidationTest.test_keys_no_modifier_badB   sU    14##''.,,Y78mT[[%:%:%B%BCr   c                    SU R                   R                  R                  l        U R	                  U R                   R                  S5      5        U R                  U R                   R                  R                  S5        g )NrS   rR   rC   )	r4   r   r   rN   
assertTruerX   rM   r(   rD   rE   s    r   test_keys_no_modifier_ok'ValidationTest.test_keys_no_modifier_okG   sU    16##''.++K89..66;r   c                 p   SU R                   R                  R                  l        S/U R                   R                  l        U R                  U R                   R                  S5      5        U R                  SU R                   R                  R                  5        / U R                   R                  l        g )NaShiftz<a>zshift modifier)
r4   r   r   rN   r'   rW   rX   rY   r(   rD   rE   s    r   test_keys_shift_bad"ValidationTest.test_keys_shift_badL   s|    14##''.,39!!(,,U34&(=(=(E(EF+-!!(r   c                    / SS4S/SS4S/SS44 H  u  pnU R                  XUS9   X R                  R                  R                  l        XR                  R
                  l        U R                  U R                  R                  U5      5        U R                  S	U R                  R                  R                  5        S S S 5        M     / U R                  R
                  l        g ! , (       d  f       M  = f)
NF12r.   Controlxr/   Xr0   )mfszalready in use)subTestr4   r   r   rN   r'   rW   rX   rY   r(   rD   )r"   modsfinalseqs       r   test_keys_dupValidationTest.test_keys_dupS   s    "$e[!9#,+s4E!F#,+s4E!F!HD 59>++//637))0  !4!4S!9:.0E0E0M0MN	 65!H ,.!!( 65s   BC((
C7	c                     U R                  U R                  R                  S5      5        U R                  U R                  R                  R
                  S5        g )Nz<Control-Shift-Key-a>rC   )ra   r4   bind_okrM   r(   rD   rE   s    r   test_bind_okValidationTest.test_bind_ok^   s>    ++,CDE..66;r   c                     U R                  U R                  R                  S5      5        U R                  SU R                  R                  R
                  5        g )Nz<Control-Shift>znot accepted)rW   r4   rx   rY   r(   rD   rE   s    r   test_bind_not_okValidationTest.test_bind_not_okb   s>    ,,->?@ndkk&;&;&C&CDr   r   N)r   r   r   r   __doc__r   GetKeysFramer+   classmethodr7   r?   rF   rO   rT   rZ   r^   rb   rg   ru   ry   r|   r   r   r   r   r   r      sw    4 J++   B B  +
M<JD
<
.	.<Er   r   c                   >    \ rS rSrSr\S 5       r\S 5       rS rSr	g)ToggleLevelTestg   z.Test toggle between Basic and Advanced frames.c                     [        S5        [        5       U l        U R                  R                  5         [        R
                  " U R                  S/ 5      U l        g Nr-   r1   )r   r   r2   r3   r   r   r4   r>   s    r   r7   ToggleLevelTest.setUpClassj   s<    4,,SXXz2F
r   c                 t    U ? U R                  R                  5         U R                  R                  5         U ?g r:   r;   r>   s    r   r?   ToggleLevelTest.tearDownClassq   rA   r   c                 v  ^ U R                   mU4S jnU R                  TR                  5        U R                  STR                  S   5        U" 5       u  p#U R                  X#5        TR                  5         U R                  TR                  5        U R                  STR                  S   5        U" 5       u  p#U R                  X25        TR                  R                  5         U R                  TR                  5        U R                  STR                  S   5        U" 5       u  p#U R                  X#5        g )Nc                     > [        TR                  5       5       H+  u  pUR                  S:X  a  U nUR                  S:X  d  M)  U nM-     WW4$ )zGet the stack order of the children of the frame.

winfo_children() stores the children in stack order, so
this can be used to check whether a frame is above or
below another one.
keyseq_basickeyseq_advanced)	enumeratewinfo_children_name)indexchildbasicadvancedr4   s       r   
stackorder5ToggleLevelTest.test_toggle_level.<locals>.stackorder{   sO     !*&*?*?*A B;;.0!E;;"33$H	 !C
 (?"r   AdvancedtextBasic)	r4   rW   r   rY   button_levelassertGreatertoggle_levelra   invoke)r"   r   r   r   r4   s       @r   test_toggle_level!ToggleLevelTest.test_toggle_levelx   s    	# 	)j&"5"5f"=>$,5+ 	(gv226:;$,8+ 	""$)j&"5"5f"=>$,5+r   r   N)
r   r   r   r   r~   r   r7   r?   r   r   r   r   r   r   r   g   s2    4G G  #,r   r   c                      \ rS rSrSr " S S\R                  5      r\S 5       r	\S 5       r
S rS r\R                  R                  \R                  S	5      S
 5       r\R                  R                  \R                  S	5      S 5       rSrg)KeySelectionTest   z#Test selecting key on Basic frames.c                   <   ^  \ rS rSrU 4S jrS r\" 5       rSrU =r	$ )KeySelectionTest.Basic   c                 F   > [         TU ]  " U0 UD6   " S S5      nX0l        g )Nc                   >    \ rS rSr\" 5       r\" 5       r\" 5       rSrg)8KeySelectionTest.Basic.__init__.<locals>.list_keys_final   r   N)	r   r   r   r   r   r   select_clearyviewr   r   r   r   r   r      s    f#vr   r   r   r!   s       r   r    KeySelectionTest.Basic.__init__   s'    Gd-f-  $3 r   c                 (    / SQU l         SS0U l        g )N)foobarBAZr   ZZZ)	modifiersmodifier_labelrE   s    r   set_modifiers_for_platform1KeySelectionTest.Basic.set_modifiers_for_platform   s    2DN#(%.Dr   )r   r   r   )
r   r   r   r   r    r   r	   r(   r   r)   r*   s   @r   r   r      s    	3	1 K	r   r   c                     [        S5        [        5       U l        U R                  R                  5         U R	                  U R                  S/ 5      U l        g r   )r   r   r2   r3   r   r4   r>   s    r   r7   KeySelectionTest.setUpClass   s:    4YYsxxR8
r   c                 t    U ? U R                  R                  5         U R                  R                  5         U ?g r:   r;   r>   s    r   r?   KeySelectionTest.tearDownClass   rA   r   c                 8    U R                   R                  5         g r:   )r4   clear_key_seqrE   s    r   rF   KeySelectionTest.setUp   s    !!#r   c                 V   U R                   nUR                  nU R                  nUR                  S   R	                  5         U" U" 5       S/5        UR                  S   R	                  5         U" U" 5       SS/5        UR                  S   R	                  5         U" U" 5       S/5        g )Nr   r   )r4   r'   rM   modifier_checkbuttonsr   )r"   r4   gmeqs       r   test_get_modifiers#KeySelectionTest.test_get_modifiers   s    !! 	$$U+224
24%$$U+224
24% $$U+224
24%r   r'   c                    U R                   nUR                  nUR                  R                  nU R                  nSUR                  l        / Ul        UR                  5         U" U" 5       S5        S/Ul        UR                  5         U" U" 5       S5        SUR                  l        SS/Ul        UR                  5         U" U" 5       S5        g )Nre   z<Key-a>mymodz<mymod-Key-a>rC   testz<mymod-test>)r4   r   rJ   r   rM   rN   return_valuebuild_key_stringr"   mock_modifiersr4   keystringr   s         r   test_build_key_string&KeySelectionTest.test_build_key_string   s    $$""&&&(#!
68Y'.i#!
68_%'.&7#!
68^$r   c                     U R                   nUR                  nUR                  R                  nU R                  nS/Ul        SUR                  l        UR                  5         U" U" 5       S5        g )Nrf   {z<Shift-Key-braceleft>)r4   r   rJ   r   rM   r   rN   final_key_selectedr   s         r   test_final_key_selected(KeySelectionTest.test_final_key_selected   s`    $$""&&'.i#!!#
68,-r   r   N)r   r   r   r   r~   r   r   r   r   r7   r?   rF   r   r   patchobjectr   r   r   r   r   r   r   r      s    ) 
''   9 9  $ 
ZZz..@% A%( 
ZZz..@	. A	.r   r   c                       \ rS rSrSr\S 5       r\S 5       r\R                  R                  \R                  S5      S 5       rSrg)	CancelWindowTest   z'Simulate user clicking [Cancel] button.c                     [        S5        [        5       U l        U R                  R                  5         [        R
                  " U R                  SS/ SS9U l        g Nr-   Titler1   T)_utestr   r   r2   r3   r   GetKeysWindowr4   r>   s    r   r7   CancelWindowTest.setUpClass   C    4--HHgz2d<
r   c                     U R                   R                  5         U ? U R                  R                  5         U R                  R	                  5         U ?g r:   r4   cancelr2   r<   r=   r>   s    r   r?   CancelWindowTest.tearDownClass   <    

J!!#Hr   rL   c                    U R                  U R                  R                  5       S5        U R                  R                  R	                  5         U R                  [        5         U R                  R                  5         S S S 5        U R                  U R                  R                  S5        UR                  5         g ! , (       d  f       NE= f)NToplevelrC   )	rM   r4   winfo_classbutton_cancelr   assertRaisesr   rN   assert_not_calledr"   mock_frame_oks     r   test_cancelCancelWindowTest.test_cancel  s    002J?!!((*x(KK##% )++R0'') )(s   $B>>
Cr   N)r   r   r   r   r~   r   r7   r?   r   r   r   r   r   r   r   r   r   r   r   r      sV    -< <   
ZZz..5* 6*r   r   c                       \ rS rSrSr\S 5       r\S 5       r\R                  R                  \R                  S5      S 5       rSrg)	OKWindowTesti  z#Simulate user clicking [OK] button.c                     [        S5        [        5       U l        U R                  R                  5         [        R
                  " U R                  SS/ SS9U l        g r   r   r>   s    r   r7   OKWindowTest.setUpClass  r   r   c                     U R                   R                  5         U ? U R                  R                  5         U R                  R	                  5         U ?g r:   r   r>   s    r   r?   OKWindowTest.tearDownClass  r   r   rL   c                 R   U R                  U R                  R                  5       S5        U R                  R                  R	                  5         U R                  [        5         U R                  R                  5         S S S 5        UR                  5         g ! , (       d  f       N= f)Nr   )rM   r4   r   	button_okr   r   r   assert_calledr   s     r   test_okOKWindowTest.test_ok   sm    002J?$$&x(KK##% )##% )(s   $B
B&r   N)r   r   r   r   r~   r   r7   r?   r   r   r   r   r   r   r   r   r   r   r   r     sV    )< <   
ZZz..5& 6&r   r   c                   >    \ rS rSrSr\S 5       r\S 5       rS rSr	g)WindowResultTesti)  zTest window result get and set.c                     [        S5        [        5       U l        U R                  R                  5         [        R
                  " U R                  SS/ SS9U l        g r   r   r>   s    r   r7   WindowResultTest.setUpClass,  r   r   c                     U R                   R                  5         U ? U R                  R                  5         U R                  R	                  5         U ?g r:   r   r>   s    r   r?   WindowResultTest.tearDownClass4  r   r   c                    U R                   nU R                  nSUl        U" UR                  S5        U" UR                  R                  S5        SUl        U" UR                  S5        U" UR                  R                  S5        SUR                  l        U" UR                  S5        U" UR                  R                  S5        g )NrC   r   r   )r4   rM   rN   frame)r"   r4   r   s      r   test_resultWindowResultTest.test_result<  s    
6=="
6<<r"
6==
6<<u%#
6==% 
6<<u%r   r   N)
r   r   r   r   r~   r   r7   r?   r  r   r   r   r   r   r   )  s0    %< <  &r   r   c                       \ rS rSrSrS rSrg)
HelperTestiM  z#Test module level helper functions.c                 ,   [         R                  nU R                  nU" U" S/ 5      S5        U" U" SSS/5      S5        U" U" SS/5      S5        U" U" SSS/5      S5        U" U" S/ SQ5      S5        U" U" S/ 5      S	5        U" U" S
S/5      S5        g )NqzKey-qrk   Altrf   zKey-Q)rk   r  rf   zPage Upz	Key-Prior*zKey-asterisk)r   translate_keyrM   )r"   trr   s      r   test_translate_keyHelperTest.test_translate_keyP  s    %% 	2c2; 
2cIu%&0 	2cG9w'
2cIw'('2
2c./9 	2ik*
2cG9~.r   r   N)r   r   r   r   r~   r  r   r   r   r   r  r  M  s
    )/r   r  __main__   )	verbosity)r~   idlelibr   test.supportr   unittestr   tkinterr   r   idlelib.idle_test.mock_idler   idlelib.idle_test.mock_tkr	   TestCaser   r   r   r   r   r   r  r   mainr   r   r   <module>r     s     !     , /SEX&& SEl4,h'' 4,nO.x(( O.d*x(( *:&8$$ &8!&x(( !&H/"" /, zMMA r   