o
    JAf,                     @   s   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
 d
ejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZedkrwejdd dS dS )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                   @   s   e Zd ZdZG dd dejZedd Zedd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )ValidationTestz.Test validation methods: ok, keys_ok, bind_ok.c                       s(   e Zd Z fddZe Ze Z  ZS )zValidationTest.Validatorc                    *   t  j|i | G dd d}|| _d S )Nc                   @   s   e Zd Ze ZdS )z:ValidationTest.Validator.__init__.<locals>.list_keys_finalN)__name__
__module____qualname__r   get r   r   8/usr/lib/python3.10/idlelib/idle_test/test_config_key.pylist_keys_final   s    
r   super__init__r   selfargskwargsr   	__class__r   r   r      s   
z!ValidationTest.Validator.__init__)	r   r   r   r   r   get_modifiersr   	showerror__classcell__r   r   r   r   	Validator   s    r   c                 C   s>   t d t | _| j  dgddgg}| | jd|| _d S )Ngui	<Key-F12><Control-Key-x><Control-Key-X><<Test>>)r   r   rootwithdrawr   dialog)clsZkeylistr   r   r   
setUpClass   s
   
zValidationTest.setUpClassc                 C       | ` | j  | j  | `d S Nr&   r$   update_idletasksdestroyr'   r   r   r   tearDownClass%      

zValidationTest.tearDownClassc                 C   s   d| j j_d S )N )r&   r   messager   r   r   r   setUp,      zValidationTest.setUpc                 C   s>   | j jd | j   | | j jd | | j jjd d S )N r1   zNo key specified.)r&   
key_stringsetokassertEqualresultr   r2   r3   r   r   r   test_ok_empty1   s   
zValidationTest.test_ok_emptyc                 C   sJ   | j jd d| j jj_| j   | | j jd | | j jj	d d S )N	<Key-F11>F11r1   )
r&   r7   r8   r   r   r;   r9   r:   r   r2   r3   r   r   r   test_ok_good7   s
   
zValidationTest.test_ok_goodc                 C   (   |  | jd | d| jjj d S )Nz<Control-ShiftzMissing the final)assertFalser&   keys_okassertInr   r2   r3   r   r   r   test_keys_no_ending>      z"ValidationTest.test_keys_no_endingc                 C   s4   d| j jj_| | j d | d| j jj d S )NAz<Key-A>zNo modifier)	r&   r   r   r;   rA   rB   rC   r   r2   r3   r   r   r   test_keys_no_modifier_badB      z(ValidationTest.test_keys_no_modifier_badc                 C   s4   d| j jj_| | j d | | j jjd d S )Nr>   r=   r1   )	r&   r   r   r;   
assertTruerB   r:   r   r2   r3   r   r   r   test_keys_no_modifier_okG   rH   z'ValidationTest.test_keys_no_modifier_okc                 C   sJ   d| j jj_dg| j j_| | j d | d| j jj	 g | j j_d S )NaShiftz<a>zshift modifier)
r&   r   r   r;   r   rA   rB   rC   r   r2   r3   r   r   r   test_keys_shift_badL   s
   z"ValidationTest.test_keys_shift_badc              	   C   s   g ddfdgddfdgddffD ]:\}}}| j |||d% || jjj_|| jj_| | j| | d	| jj	j
 W d    n1 sEw   Y  qg | jj_d S )
NZF12r    Controlxr!   Xr"   )mfszalready in use)ZsubTestr&   r   r   r;   r   rA   rB   rC   r   r2   )r   Zmodsfinalseqr   r   r   test_keys_dupS   s   


zValidationTest.test_keys_dupc                 C   s(   |  | jd | | jjjd d S )Nz<Control-Shift-Key-a>r1   )rI   r&   bind_okr:   r   r2   r3   r   r   r   test_bind_ok^   rE   zValidationTest.test_bind_okc                 C   r@   )Nz<Control-Shift>znot accepted)rA   r&   rW   rC   r   r2   r3   r   r   r   test_bind_not_okb   rE   zValidationTest.test_bind_not_okN)r   r   r   __doc__r   GetKeysFramer   classmethodr(   r/   r4   r<   r?   rD   rG   rJ   rM   rV   rX   rY   r   r   r   r   r	      s"    	

r	   c                   @   0   e Zd ZdZedd Zedd Zdd ZdS )	ToggleLevelTestz.Test toggle between Basic and Advanced frames.c                 C   s0   t d t | _| j  t| jdg | _d S Nr   r#   )r   r   r$   r%   r   r[   r&   r.   r   r   r   r(   j      
zToggleLevelTest.setUpClassc                 C   r)   r*   r+   r.   r   r   r   r/   q   r0   zToggleLevelTest.tearDownClassc                    s   | j   fdd}|  j | d jd  | \}}| ||    |  j | d jd  | \}}| ||  j  |  j | d jd  | \}}| || d S )Nc                     s:   t   D ]\} }|jdkr| }|jdkr| }q||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.
            Zkeyseq_basicZkeyseq_advanced)	enumerateZwinfo_children_name)indexchildbasicadvancedr&   r   r   
stackorder{   s   

z5ToggleLevelTest.test_toggle_level.<locals>.stackorderZAdvancedtextBasic)	r&   rA   rf   rC   Zbutton_levelZassertGreaterZtoggle_levelrI   invoke)r   rh   re   rf   r   rg   r   test_toggle_levelx   s    



z!ToggleLevelTest.test_toggle_levelN)r   r   r   rZ   r\   r(   r/   rl   r   r   r   r   r^   g   s    

r^   c                   @   sz   e Zd ZdZG dd dejZedd Zedd Z	dd	 Z
d
d Zejejddd Zejejddd ZdS )KeySelectionTestz#Test selecting key on Basic frames.c                       s*   e Zd Z fddZdd Ze Z  ZS )zKeySelectionTest.Basicc                    r
   )Nc                   @   s   e Zd Ze Ze Ze ZdS )z8KeySelectionTest.Basic.__init__.<locals>.list_keys_finalN)r   r   r   r   r   Zselect_clearZyviewr   r   r   r   r      s    
r   r   r   r   r   r   r      s   
zKeySelectionTest.Basic.__init__c                 C   s   g d| _ ddi| _d S )N)foobarBAZrp   ZZZZ)	modifiersZmodifier_labelr3   r   r   r   set_modifiers_for_platform   s   
z1KeySelectionTest.Basic.set_modifiers_for_platform)r   r   r   r   rr   r   r   r   r   r   r   r   rj      s    rj   c                 C   s0   t d t | _| j  | | jdg | _d S r_   )r   r   r$   r%   rj   r&   r.   r   r   r   r(      r`   zKeySelectionTest.setUpClassc                 C   r)   r*   r+   r.   r   r   r   r/      r0   zKeySelectionTest.tearDownClassc                 C   s   | j   d S r*   )r&   Zclear_key_seqr3   r   r   r   r4      r5   zKeySelectionTest.setUpc                 C   sl   | j }|j}| j}|jd   || dg |jd   || ddg |jd   || dg d S )Nrn   rp   )r&   r   r:   Zmodifier_checkbuttonsrk   )r   r&   Zgmeqr   r   r   test_get_modifiers   s   z#KeySelectionTest.test_get_modifiersr   c                 C   s   | j }|j}|jj}| j}d|j_g |_|  || d dg|_|  || d d|j_ddg|_|  || d d S )NrK   z<Key-a>Zmymodz<mymod-Key-a>r1   testz<mymod-test>)r&   r   r7   r   r:   r;   return_valueZbuild_key_stringr   Zmock_modifiersr&   keystringrs   r   r   r   test_build_key_string   s   
z&KeySelectionTest.test_build_key_stringc                 C   sB   | j }|j}|jj}| j}dg|_d|j_|  || d d S )NrL   {z<Shift-Key-braceleft>)r&   r   r7   r   r:   rv   r;   Zfinal_key_selectedrw   r   r   r   test_final_key_selected   s   z(KeySelectionTest.test_final_key_selectedN)r   r   r   rZ   r   r[   rj   r\   r(   r/   r4   rt   r   patchobjectrz   r|   r   r   r   r   rm      s    


rm   c                   @   @   e Zd ZdZedd Zedd Zej	e
jddd Zd	S )
CancelWindowTestz'Simulate user clicking [Cancel] button.c                 C   6   t d t | _| j  tj| jddg dd| _d S Nr   ZTitler#   T)Z_utestr   r   r$   r%   r   ZGetKeysWindowr&   r.   r   r   r   r(         
zCancelWindowTest.setUpClassc                 C   *   | j   | ` | j  | j  | `d S r*   r&   cancelr$   r,   r-   r.   r   r   r   r/      
   


zCancelWindowTest.tearDownClassr9   c                 C   sn   |  | j d | jj  | t | j  W d    n1 s$w   Y  |  | jjd |  d S )NToplevelr1   )	r:   r&   winfo_classZbutton_cancelrk   assertRaisesr   r;   Zassert_not_calledr   Zmock_frame_okr   r   r   test_cancel  s   zCancelWindowTest.test_cancelN)r   r   r   rZ   r\   r(   r/   r   r}   r~   r   r[   r   r   r   r   r   r          

r   c                   @   r   )
OKWindowTestz#Simulate user clicking [OK] button.c                 C   r   r   r   r.   r   r   r   r(     r   zOKWindowTest.setUpClassc                 C   r   r*   r   r.   r   r   r   r/     r   zOKWindowTest.tearDownClassr9   c                 C   s^   |  | j d | jj  | t | j  W d    n1 s$w   Y  |  d S )Nr   )r:   r&   r   Z	button_okrk   r   r   Zassert_calledr   r   r   r   test_ok   s   zOKWindowTest.test_okN)r   r   r   rZ   r\   r(   r/   r   r}   r~   r   r[   r   r   r   r   r   r     r   r   c                   @   r]   )	WindowResultTestzTest window result get and set.c                 C   r   r   r   r.   r   r   r   r(   ,  r   zWindowResultTest.setUpClassc                 C   r   r*   r   r.   r   r   r   r/   4  r   zWindowResultTest.tearDownClassc                 C   sr   | j }| j}d|_||jd ||jjd d|_||jd ||jjd d|j_||jd ||jjd d S )Nr1   ro   rn   )r&   r:   r;   frame)r   r&   rs   r   r   r   test_result<  s   zWindowResultTest.test_resultN)r   r   r   rZ   r\   r(   r/   r   r   r   r   r   r   )  s    

r   c                   @   s   e Zd ZdZdd ZdS )
HelperTestz#Test module level helper functions.c                 C   s   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 d S )NqzKey-qrN   AltrL   zKey-Q)rN   r   rL   zPage Upz	Key-Prior*zKey-asterisk)r   Ztranslate_keyr:   )r   trrs   r   r   r   test_translate_keyP  s   zHelperTest.test_translate_keyN)r   r   r   rZ   r   r   r   r   r   r   M  s    r   __main__   )	verbosity)rZ   Zidlelibr   Ztest.supportr   Zunittestr   tkinterr   r   Zidlelib.idle_test.mock_idler   Zidlelib.idle_test.mock_tkr   ZTestCaser	   r^   rm   r   r   r   r   r   mainr   r   r   r   <module>   s$    V7R$