a
    	3j%                     @   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 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rejdd 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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dd Ze Ze ZdS )zValidationTest.Validatorc                 O   s2   t jj| g|R 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   ]/www/server/python_manager/versions/3.9.10/lib/python3.9/idlelib/idle_test/test_config_key.pylist_keys_final   s   r   )r   GetKeysDialog__init__r   selfargskwargsr   r   r   r   r      s    z!ValidationTest.Validator.__init__N)r
   r   r   r   r   get_modifiersr   	showerrorr   r   r   r   	Validator   s   r   c                 C   sD   t d t | _| j  dgddgg}| j| jdd|dd| _d S )	Ngui	<Key-F12><Control-Key-x><Control-Key-X>Title<<Test>>TZ_utest)r   r   rootwithdrawr   dialog)clsZkeylistr   r   r   
setUpClass   s    
zValidationTest.setUpClassc                 C   s*   | j   | j  | j  | ` | `d S Nr#   cancelr!   Zupdate_idletasksZdestroyr$   r   r   r   tearDownClass(   s    


zValidationTest.tearDownClassc                 C   s   d| j j_d S )N )r#   r   messager   r   r   r   setUp/   s    zValidationTest.setUpc                 C   s>   | j jd | j   | | j jd | | j jjd d S )N r+   zNo key specified.)r#   
key_stringsetokassertEqualresultr   r,   r-   r   r   r   test_ok_empty4   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>F11r+   )
r#   r0   r1   r   r   r4   r2   r3   r   r,   r-   r   r   r   test_ok_good:   s
    
zValidationTest.test_ok_goodc                 C   s(   |  | jd | d| jjj d S )Nz<Control-ShiftzMissing the final)assertFalser#   keys_okassertInr   r,   r-   r   r   r   test_keys_no_endingA   s    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   r4   r9   r:   r;   r   r,   r-   r   r   r   test_keys_no_modifier_badE   s    z(ValidationTest.test_keys_no_modifier_badc                 C   s4   d| j jj_| | j d | | j jjd d S )Nr7   r6   r+   )	r#   r   r   r4   
assertTruer:   r3   r   r,   r-   r   r   r   test_keys_no_modifier_okJ   s    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   r4   r   r9   r:   r;   r   r,   r-   r   r   r   test_keys_shift_badO   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 ]t\}}}| j |||dJ || jjj_|| jj_| | j| | d	| jj	j
 W d    q 1 s0    Y  q g | jj_d S )
NZF12r   Controlxr   Xr   )mfszalready in use)ZsubTestr#   r   r   r4   r   r9   r:   r;   r   r,   )r   Zmodsfinalseqr   r   r   test_keys_dupV   s    


2zValidationTest.test_keys_dupc                 C   s(   |  | jd | | jjjd d S )Nz<Control-Shift-Key-a>r+   )r?   r#   bind_okr3   r   r,   r-   r   r   r   test_bind_oka   s    zValidationTest.test_bind_okc                 C   s(   |  | jd | d| jjj d S )Nz<Control-Shift>znot accepted)r9   r#   rM   r;   r   r,   r-   r   r   r   test_bind_not_oke   s    zValidationTest.test_bind_not_okN)r
   r   r   __doc__gkdr   classmethodr%   r*   r.   r5   r8   r<   r>   r@   rC   rL   rN   rO   r   r   r   r   r	      s    	

r	   c                   @   s0   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   s4   t d t | _| j  t| jddg dd| _d S Nr   r   r   Tr    r   r   r!   r"   rQ   r#   r)   r   r   r   r%   m   s    
zToggleLevelTest.setUpClassc                 C   s*   | j   | j  | j  | ` | `d S r&   r'   r)   r   r   r   r*   t   s    


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  j 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)	enumerateframeZwinfo_children_name)indexchildbasicadvancedr#   r   r   
stackorder~   s    

z5ToggleLevelTest.test_toggle_level.<locals>.stackorderZAdvancedtextBasic)	r#   r9   r\   r;   Zbutton_levelZassertGreaterZtoggle_levelr?   invoke)r   r^   r[   r\   r   r]   r   test_toggle_level{   s     



z!ToggleLevelTest.test_toggle_levelN)r
   r   r   rP   rR   r%   r*   rb   r   r   r   r   rS   j   s   

rS   c                   @   st   e Zd ZdZG dd deZedd Zedd Zdd	 Z	d
d Z
ejeddd Zeje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                    s*   t  j|i | G dd d}|| _d S )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   )superr   r   r   	__class__r   r   r      s    zKeySelectionTest.Basic.__init__c                 C   s   g d| _ ddi| _d S )N)fooZbarBAZrh   ZZZZ)	modifiersZmodifier_labelr-   r   r   r   set_modifiers_for_platform   s    
z1KeySelectionTest.Basic.set_modifiers_for_platform)r
   r   r   r   rj   r   r   __classcell__r   r   re   r   r`      s   r`   c                 C   s6   t d t | _| j  | j| jddg dd| _d S rT   )r   r   r!   r"   r`   r#   r)   r   r   r   r%      s    
zKeySelectionTest.setUpClassc                 C   s*   | j   | j  | j  | ` | `d S r&   r'   r)   r   r   r   r*      s    


zKeySelectionTest.tearDownClassc                 C   s   | j   d S r&   )r#   Zclear_key_seqr-   r   r   r   r.      s    zKeySelectionTest.setUpc                 C   sl   | j }|j}| j}|jd   || dg |jd   || ddg |jd   || dg d S )Nrg   rh   )r#   r   r3   Zmodifier_checkbuttonsra   )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 )NrA   z<Key-a>Zmymodz<mymod-Key-a>r+   testz<mymod-test>)r#   r   r0   r   r3   r4   return_valueZbuild_key_stringr   Zmock_modifiersr#   keystringrl   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 )NrB   {z<Shift-Key-braceleft>)r#   r   r0   r   r3   ro   r4   Zfinal_key_selectedrp   r   r   r   test_final_key_selected   s    z(KeySelectionTest.test_final_key_selectedN)r
   r   r   rP   rQ   r`   rR   r%   r*   r.   rm   r   Zpatchobjectrs   ru   r   r   r   r   rc      s   


rc   c                   @   s0   e Zd ZdZedd Zedd Zdd ZdS )	
CancelTestz'Simulate user clicking [Cancel] button.c                 C   s4   t d t | _| j  t| jddg dd| _d S rT   rU   r)   r   r   r   r%      s    
zCancelTest.setUpClassc                 C   s*   | j   | j  | j  | ` | `d S r&   r'   r)   r   r   r   r*      s    


zCancelTest.tearDownClassc                 C   sf   |  | j d | jj  | t | j  W d    n1 sH0    Y  |  | jjd d S )NZToplevelr+   )r3   r#   Zwinfo_classZbutton_cancelra   ZassertRaisesr   r4   r-   r   r   r   test_cancel  s
    (zCancelTest.test_cancelN)r
   r   r   rP   rR   r%   r*   rx   r   r   r   r   rw      s   

rw   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-qrD   AltrB   zKey-Q)rD   r{   rB   zPage Upz	Key-Prior*zKey-asterisk)r   Ztranslate_keyr3   )r   trrl   r   r   r   test_translate_key  s    zHelperTest.test_translate_keyN)r
   r   r   rP   r~   r   r   r   r   ry     s   ry   __main__   )	verbosity)rP   Zidlelibr   Ztest.supportr   Zunittestr   tkinterr   r   Zidlelib.idle_test.mock_idler   Zidlelib.idle_test.mock_tkr   r   rQ   ZTestCaser	   rS   rc   rw   ry   r
   mainr   r   r   r   <module>   s   W7R