
    z%i,                        d Z ddlmZ ddlmZ ddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZ  G d	 d
ej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Z G d dej                        Zedk(  r ej.                  d       yy)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                       e Zd ZdZ G d dej
                        Zed        Zed        Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zy)ValidationTestz.Test validation methods: ok, keys_ok, bind_ok.c                   :     e Zd Z fdZ e       Z e       Z xZS )ValidationTest.Validatorc                 F    t        |   |i |  G d d      }|| _        y )Nc                       e Zd Z e       Zy):ValidationTest.Validator.__init__.<locals>.list_keys_finalN)__name__
__module____qualname__r   get     U/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/idlelib/idle_test/test_config_key.pylist_keys_finalr      s	    fr   r   super__init__r   selfargskwargsr   	__class__s       r   r   z!ValidationTest.Validator.__init__   s'    Gd-f- #2D r   )	r   r   r   r   r   get_modifiersr	   	showerror__classcell__r    s   @r   	Validatorr      s    	3
 K	r   r%   c                     t        d       t               | _        | j                  j                          dgddgg}| j	                  | j                  d|      | _        y )Ngui	<Key-F12><Control-Key-x><Control-Key-X><<Test>>)r   r   rootwithdrawr%   dialog)clskeylists     r   
setUpClasszValidationTest.setUpClass   sM    4=#46G"HI]]388ZA
r   c                 t    | ` | j                  j                          | j                  j                          | `y Nr.   r,   update_idletasksdestroyr/   s    r   tearDownClasszValidationTest.tearDownClass%   ,    J!!#Hr   c                 :    d| j                   j                  _        y )N )r.   r"   messager   s    r   setUpzValidationTest.setUp,   s    (*%r   c                 .   | j                   j                  j                  d       | j                   j                          | j	                  | j                   j
                  d       | j	                  | j                   j                  j                  d       y )N r;   zNo key specified.)r.   
key_stringsetokassertEqualresultr"   r<   r=   s    r   test_ok_emptyzValidationTest.test_ok_empty1   sc    ""3'++R0..668KLr   c                 x   | j                   j                  j                  d       d| j                   j                  j                  _        | j                   j                          | j                  | j                   j
                  d       | j                  | j                   j                  j                  d       y )N	<Key-F11>F11r;   )
r.   rA   rB   r   r   rE   rC   rD   r"   r<   r=   s    r   test_ok_goodzValidationTest.test_ok_good7   sz    "";/16##''.++[9..66;r   c                     | j                  | j                  j                  d             | j                  d| j                  j                  j
                         y )Nz<Control-ShiftzMissing the final)assertFalser.   keys_okassertInr"   r<   r=   s    r   test_keys_no_endingz"ValidationTest.test_keys_no_ending>   s?    ,,-=>?)4;;+@+@+H+HIr   c                    d| j                   j                  j                  _        | j	                  | j                   j                  d             | j                  d| j                   j                  j                         y )NAz<Key-A>zNo modifier)	r.   r   r   rE   rL   rM   rN   r"   r<   r=   s    r   test_keys_no_modifier_badz(ValidationTest.test_keys_no_modifier_badB   sU    14##''.,,Y78mT[[%:%:%B%BCr   c                    d| j                   j                  j                  _        | j	                  | j                   j                  d             | j                  | j                   j                  j                  d       y )NrI   rH   r;   )	r.   r   r   rE   
assertTruerM   rD   r"   r<   r=   s    r   test_keys_no_modifier_okz'ValidationTest.test_keys_no_modifier_okG   sU    16##''.++K89..66;r   c                 p   d| j                   j                  j                  _        dg| j                   j                  _        | j                  | j                   j                  d             | j                  d| j                   j                  j                         g | j                   j                  _        y )NaShiftz<a>zshift modifier)
r.   r   r   rE   r!   rL   rM   rN   r"   r<   r=   s    r   test_keys_shift_badz"ValidationTest.test_keys_shift_badL   s|    14##''.,39!!(,,U34&(=(=(E(EF+-!!(r   c                    g ddfdgddfdgddffD ]  \  }}}| j                  |||      5  || j                  j                  j                  _        || j                  j
                  _        | j                  | j                  j                  |             | j                  d	| j                  j                  j                         d d d         g | j                  j
                  _        y # 1 sw Y   xY w)
NF12r(   Controlxr)   Xr*   )mfszalready in use)subTestr.   r   r   rE   r!   rL   rM   rN   r"   r<   )r   modsfinalseqs       r   test_keys_dupzValidationTest.test_keys_dupS   s    "$e[!9#,+s4E!F#,+s4E!F!H 	OD% 5 O9>++//637))0  !4!4S!9:.0E0E0M0MN	O O	O ,.!!(O Os   BC--C6	c                     | j                  | j                  j                  d             | j                  | j                  j                  j
                  d       y )Nz<Control-Shift-Key-a>r;   )rT   r.   bind_okrD   r"   r<   r=   s    r   test_bind_okzValidationTest.test_bind_ok^   s>    ++,CDE..66;r   c                     | j                  | j                  j                  d             | j                  d| j                  j                  j
                         y )Nz<Control-Shift>znot accepted)rL   r.   rh   rN   r"   r<   r=   s    r   test_bind_not_okzValidationTest.test_bind_not_okb   s>    ,,->?@ndkk&;&;&C&CDr   N)r   r   r   __doc__r   GetKeysFramer%   classmethodr1   r8   r>   rF   rJ   rO   rR   rU   rY   rf   ri   rk   r   r   r   r   r      sw    4 J++   B B  +
M<JD
<
.	.<Er   r   c                   6    e Zd ZdZed        Zed        Zd Zy)ToggleLevelTestz.Test toggle between Basic and Advanced frames.c                     t        d       t               | _        | j                  j                          t	        j
                  | j                  dg       | _        y Nr'   r+   )r   r   r,   r-   r   rm   r.   r7   s    r   r1   zToggleLevelTest.setUpClassj   s<    4,,SXXz2F
r   c                 t    | ` | j                  j                          | j                  j                          | `y r3   r4   r7   s    r   r8   zToggleLevelTest.tearDownClassq   r9   r   c                    | j                   fd}| j                  j                         | j                  dj                  d           |       \  }}| j                  ||       j                          | j                  j                         | j                  dj                  d           |       \  }}| j                  ||       j                  j                          | j                  j                         | j                  dj                  d           |       \  }}| j                  ||       y )Nc                      t        j                               D ](  \  } }|j                  dk(  r| }|j                  dk(  s'| }* fS )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advancedr.   s       r   
stackorderz5ToggleLevelTest.test_toggle_level.<locals>.stackorder{   sU     !*&*?*?*A B %u;;.0!E;;"33$H	%
 (?"r   AdvancedtextBasic)	r.   rL   r~   rN   button_levelassertGreatertoggle_levelrT   invoke)r   r   r}   r~   r.   s       @r   test_toggle_levelz!ToggleLevelTest.test_toggle_levelx   s   	# 	)j&"5"5f"=>$,x5(+ 	(gv226:;$,x8U+ 	""$)j&"5"5f"=>$,x5(+r   N)r   r   r   rl   rn   r1   r8   r   r   r   r   rp   rp   g   s2    4G G  #,r   rp   c                      e Zd ZdZ G d dej
                        Zed        Zed        Z	d Z
d Zej                  j                  ej
                  d      d	        Zej                  j                  ej
                  d      d
        Zy)KeySelectionTestz#Test selecting key on Basic frames.c                   2     e Zd Z fdZd Z e       Z xZS )KeySelectionTest.Basicc                 F    t        |   |i |  G d d      }|| _        y )Nc                   6    e Zd Z e       Z e       Z e       Zy)8KeySelectionTest.Basic.__init__.<locals>.list_keys_finalN)r   r   r   r   r   select_clearyviewr   r   r   r   r      s    f#vr   r   r   r   s       r   r   zKeySelectionTest.Basic.__init__   s)    Gd-f-  $3D r   c                 (    g d| _         ddi| _        y )N)foobarBAZr   ZZZ)	modifiersmodifier_labelr=   s    r   set_modifiers_for_platformz1KeySelectionTest.Basic.set_modifiers_for_platform   s    2DN#(%.Dr   )r   r   r   r   r   r	   r"   r#   r$   s   @r   r   r      s    	3	1 K	r   r   c                     t        d       t               | _        | j                  j                          | j	                  | j                  dg       | _        y rr   )r   r   r,   r-   r   r.   r7   s    r   r1   zKeySelectionTest.setUpClass   s:    4YYsxxR8
r   c                 t    | ` | j                  j                          | j                  j                          | `y r3   r4   r7   s    r   r8   zKeySelectionTest.tearDownClass   r9   r   c                 8    | j                   j                          y r3   )r.   clear_key_seqr=   s    r   r>   zKeySelectionTest.setUp   s    !!#r   c                 V   | j                   }|j                  }| j                  }|j                  d   j	                           | |       dg       |j                  d   j	                           | |       ddg       |j                  d   j	                           | |       dg       y )Nr   r   )r.   r!   rD   modifier_checkbuttonsr   )r   r.   gmeqs       r   test_get_modifiersz#KeySelectionTest.test_get_modifiers   s    !! 	$$U+224
24%$$U+224
24% $$U+224
24%r   r!   c                    | j                   }|j                  }|j                  j                  }| j                  }d|j                  _        g |_        |j                           | |       d       dg|_        |j                           | |       d       d|j                  _        ddg|_        |j                           | |       d       y )NrW   z<Key-a>mymodz<mymod-Key-a>r;   testz<mymod-test>)r.   r   rA   r   rD   rE   return_valuebuild_key_stringr   mock_modifiersr.   keystringr   s         r   test_build_key_stringz&KeySelectionTest.test_build_key_string   s    $$""&&&(#!
68Y'.i#!
68_%'.&7#!
68^$r   c                     | j                   }|j                  }|j                  j                  }| j                  }dg|_        d|j                  _        |j                           | |       d       y )NrX   {z<Shift-Key-braceleft>)r.   r   rA   r   rD   r   rE   final_key_selectedr   s         r   test_final_key_selectedz(KeySelectionTest.test_final_key_selected   s`    $$""&&'.i#!!#
68,-r   N)r   r   r   rl   r   rm   r   rn   r1   r8   r>   r   r   patchobjectr   r   r   r   r   r   r      s    ) 
''   9 9  $ 
ZZz..@% A%( 
ZZz..@	. A	.r   r   c                       e Zd ZdZed        Zed        Zej                  j                  e
j                  d      d        Zy)CancelWindowTestz'Simulate user clicking [Cancel] button.c                     t        d       t               | _        | j                  j                          t	        j
                  | j                  ddg d      | _        y Nr'   Titler+   T)_utestr   r   r,   r-   r   GetKeysWindowr.   r7   s    r   r1   zCancelWindowTest.setUpClass   C    4--HHgz2d<
r   c                     | j                   j                          | ` | j                  j                          | j                  j	                          | `y r3   r.   cancelr,   r5   r6   r7   s    r   r8   zCancelWindowTest.tearDownClass   <    

J!!#Hr   rC   c                    | j                  | j                  j                         d       | j                  j                  j	                          | j                  t              5  | j                  j                          d d d        | j                  | j                  j                  d       |j                          y # 1 sw Y   @xY w)NToplevelr;   )	rD   r.   winfo_classbutton_cancelr   assertRaisesr   rE   assert_not_calledr   mock_frame_oks     r   test_cancelzCancelWindowTest.test_cancel  s    002J?!!((*x( 	&KK##%	&++R0'')	& 	&s   $B>>CN)r   r   r   rl   rn   r1   r8   r   r   r   r   rm   r   r   r   r   r   r      sV    -< <   
ZZz..5* 6*r   r   c                       e Zd ZdZed        Zed        Zej                  j                  e
j                  d      d        Zy)OKWindowTestz#Simulate user clicking [OK] button.c                     t        d       t               | _        | j                  j                          t	        j
                  | j                  ddg d      | _        y r   r   r7   s    r   r1   zOKWindowTest.setUpClass  r   r   c                     | j                   j                          | ` | j                  j                          | j                  j	                          | `y r3   r   r7   s    r   r8   zOKWindowTest.tearDownClass  r   r   rC   c                 H   | j                  | j                  j                         d       | j                  j                  j	                          | j                  t              5  | j                  j                          d d d        |j                          y # 1 sw Y   xY w)Nr   )rD   r.   r   	button_okr   r   r   assert_calledr   s     r   test_okzOKWindowTest.test_ok   st    002J?$$&x( 	&KK##%	&##%	& 	&s   $BB!N)r   r   r   rl   rn   r1   r8   r   r   r   r   rm   r   r   r   r   r   r     sV    )< <   
ZZz..5& 6&r   r   c                   6    e Zd ZdZed        Zed        Zd Zy)WindowResultTestzTest window result get and set.c                     t        d       t               | _        | j                  j                          t	        j
                  | j                  ddg d      | _        y r   r   r7   s    r   r1   zWindowResultTest.setUpClass,  r   r   c                     | j                   j                          | ` | j                  j                          | j                  j	                          | `y r3   r   r7   s    r   r8   zWindowResultTest.tearDownClass4  r   r   c                    | j                   }| j                  }d|_         ||j                  d        ||j                  j                  d       d|_         ||j                  d        ||j                  j                  d       d|j                  _         ||j                  d        ||j                  j                  d       y )Nr;   r   r   )r.   rD   rE   frame)r   r.   r   s      r   test_resultzWindowResultTest.test_result<  s    
6=="
6<<r"
6==
6<<u%#
6==% 
6<<u%r   N)r   r   r   rl   rn   r1   r8   r   r   r   r   r   r   )  s0    %< <  &r   r   c                       e Zd ZdZd Zy)
HelperTestz#Test module level helper functions.c                 ,   t         j                  }| j                  } | |dg       d        | |dddg      d        | |ddg      d        | |dddg      d        | |dg d      d        | |dg       d	        | |d
dg      d       y )NqzKey-qr\   AltrX   zKey-Q)r\   r   rX   zPage Upz	Key-Prior*zKey-asterisk)r   translate_keyrD   )r   trr   s      r   test_translate_keyzHelperTest.test_translate_keyP  s    %% 	2c2; 
2cIu%&0 	2cG9w'
2cIw'('2
2c./9 	2ik*
2cG9~.r   N)r   r   r   rl   r   r   r   r   r   r   M  s
    )/r   r   __main__   )	verbosity)rl   idlelibr   test.supportr   unittestr   tkinterr   r   idlelib.idle_test.mock_idler   idlelib.idle_test.mock_tkr	   TestCaser   rp   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HMMA r   