B � f�%�@s�dZddlmZddlmZddlZddlmZddlmZm Z ddl m Z ddl m Z ejZGd d �d ej�ZGd d �d ej�ZGd d�dej�ZGdd�dej�ZGdd�dej�Zedkr�ejdd�dS)z�Test 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�eZdZdZGdd�de�Zedd��Zedd��Zdd �Z d d �Z d d �Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd�ZdS)�ValidationTestz.Test validation methods: ok, keys_ok, bind_ok.c@s eZdZdd�Ze�Ze�ZdS)zValidationTest.ValidatorcOs,tjj|f|�|�Gdd�d�}||_dS)Nc@seZdZe�ZdS)z:ValidationTest.Validator.__init__..list_keys_finalN)�__name__� __module__� __qualname__r�get�rr�F/opt/alt/python37/lib64/python3.7/idlelib/idle_test/test_config_key.py�list_keys_finalsr)r� GetKeysDialog�__init__r)�self�args�kwargsrrrrrsz!ValidationTest.Validator.__init__N)r r r rr� get_modifiersr� showerrorrrrr� ValidatorsrcCsDtd�t�|_|j��dgddgg}|j|jdd|dd�|_dS) N�guiz zz�Titlez<>T)�_utest)rr�root�withdrawr�dialog)�clsZkeylistrrr� setUpClasss  zValidationTest.setUpClasscCs*|j��|j��|j��|`|`dS)N)r�cancelr�update_idletasks�destroy)rrrr� tearDownClass(s   zValidationTest.tearDownClasscCsd|jj_dS)N�)rr�message)rrrr�setUp/szValidationTest.setUpcCs>|jj�d�|j��|�|jjd�|�|jjjd�dS)N� r%zNo key specified.)r� key_string�set�ok� assertEqual�resultrr&)rrrr� test_ok_empty4s zValidationTest.test_ok_emptycCsJ|jj�d�d|jjj_|j��|�|jjd�|�|jjj d�dS)Nz �F11r%) rr)r*rr r-r+r,rr&)rrrr� test_ok_good:s   zValidationTest.test_ok_goodcCs(|�|j�d��|�d|jjj�dS)Nzz No modifier) rrr r-r1r2r3rr&)rrrr�test_keys_no_modifier_badEs z(ValidationTest.test_keys_no_modifier_badcCs4d|jjj_|�|j�d��|�|jjjd�dS)Nr/z r%) rrr r-� assertTruer2r,rr&)rrrr�test_keys_no_modifier_okJs z'ValidationTest.test_keys_no_modifier_okcCsJd|jjj_dg|jj_|�|j�d��|�d|jjj �g|jj_dS)N�a�Shiftzzshift modifier) rrr r-rr1r2r3rr&)rrrr�test_keys_shift_badOs   z"ValidationTest.test_keys_shift_badc Cs�x�gddfdgddfdgddffD]`\}}}|j|||d��@||jjj_||jj_|�|j�|��|�d |jj j �WdQRXq"Wg|jj_dS) NZF12z �Control�xz�Xz)�m�f�szalready in use) ZsubTestrrr r-rr1r2r3rr&)rZmods�final�seqrrr� test_keys_dupVs     zValidationTest.test_keys_dupcCs(|�|j�d��|�|jjjd�dS)Nzr%)r7r�bind_okr,rr&)rrrr� test_bind_okaszValidationTest.test_bind_okcCs(|�|j�d��|�d|jjj�dS)Nzz not accepted)r1rrEr3rr&)rrrr�test_bind_not_okeszValidationTest.test_bind_not_okN)r r r �__doc__�gkdr� classmethodr r$r'r.r0r4r6r8r;rDrFrGrrrrr s  r c@s0eZdZdZedd��Zedd��Zdd�ZdS) �ToggleLevelTestz.Test toggle between Basic and Advanced frames.cCs4td�t�|_|j��t|jddgdd�|_dS)Nrrz<>T)r)rrrrrIr)rrrrr ms zToggleLevelTest.setUpClasscCs*|j��|j��|j��|`|`dS)N)rr!rr"r#)rrrrr$ts   zToggleLevelTest.tearDownClasscs�|j��fdd�}|��j�|�d�jd�|�\}}|�||����|��j�|�d�jd�|�\}}|�||��j��|��j�|�d�jd�|�\}}|�||�dS)Ncs@x6t�j���D]$\}}|jdkr&|}|jdkr|}qW||fS)z�Get 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_basicZkeyseq_advanced)� enumerate�frameZwinfo_children�_name)�indexZchild�basic�advanced)rrr� stackorder~s   z5ToggleLevelTest.test_toggle_level..stackorderZAdvanced�text�Basic) rr1rQr3Z button_levelZ assertGreaterZ toggle_levelr7�invoke)rrRrPrQr)rr�test_toggle_level{s           z!ToggleLevelTest.test_toggle_levelN)r r r rHrJr r$rVrrrrrKjs  rKc@steZdZdZGdd�de�Zedd��Zedd��Zdd �Z d d �Z e j � ed �d d��Ze j � ed �dd��ZdS)�KeySelectionTestz#Test selecting key on Basic frames.cs*eZdZ�fdd�Zdd�Ze�Z�ZS)zKeySelectionTest.Basiccs&t�j||�Gdd�d�}||_dS)Nc@seZdZe�Ze�Ze�ZdS)z8KeySelectionTest.Basic.__init__..list_keys_finalN)r r r rr Z select_clearZyviewrrrrr�sr)�superrr)rrrr)� __class__rrr�szKeySelectionTest.Basic.__init__cCsdddg|_ddi|_dS)N�fooZbar�BAZZZZZ)Z modifiersZmodifier_label)rrrr�set_modifiers_for_platform�s z1KeySelectionTest.Basic.set_modifiers_for_platform)r r r rr\rr� __classcell__rr)rYrrT�s rTcCs6td�t�|_|j��|j|jddgdd�|_dS)Nrrz<>T)r)rrrrrTr)rrrrr �s zKeySelectionTest.setUpClasscCs*|j��|j��|j��|`|`dS)N)rr!rr"r#)rrrrr$�s   zKeySelectionTest.tearDownClasscCs|j��dS)N)rZ clear_key_seq)rrrrr'�szKeySelectionTest.setUpcCsl|j}|j}|j}|jd��||�dg�|jd��||�ddg�|jd��||�dg�dS)NrZr[)rrr,Zmodifier_checkbuttonsrU)rrZgm�eqrrr�test_get_modifiers�sz#KeySelectionTest.test_get_modifiersrcCs�|j}|j}|jj}|j}d|j_g|_|��||�d�dg|_|��||�d�d|j_ddg|_|��||�d�dS)Nr9zZmymodz r%Ztestz )rrr)r r,r-� return_valueZbuild_key_string)r�mock_modifiersr�key�stringr^rrr�test_build_key_string�s   z&KeySelectionTest.test_build_key_stringcCsB|j}|j}|jj}|j}dg|_d|j_|��||�d�dS)Nr:�{z)rrr)r r,r`r-Zfinal_key_selected)rrarrbrcr^rrr�test_final_key_selected�sz(KeySelectionTest.test_final_key_selectedN)r r r rHrIrTrJr r$r'r_rZpatch�objectrdrfrrrrrW�s  rWc@s0eZdZdZedd��Zedd��Zdd�ZdS) � CancelTestz'Simulate user clicking [Cancel] button.cCs4td�t�|_|j��t|jddgdd�|_dS)Nrrz<>T)r)rrrrrIr)rrrrr �s zCancelTest.setUpClasscCs*|j��|j��|j��|`|`dS)N)rr!rr"r#)rrrrr$�s   zCancelTest.tearDownClassc CsR|�|j��d�|jj��|�t��|j��WdQRX|�|jjd�dS)NZToplevelr%)r,rZ winfo_classZ button_cancelrUZ assertRaisesrr-)rrrr� test_cancels   zCancelTest.test_cancelN)r r r rHrJr r$rirrrrrh�s  rhc@seZdZdZdd�ZdS)� HelperTestz#Test module level helper functions.cCs�tj}|j}||dg�d�||dddg�d�||ddg�d�||dddg�d�||ddddg�d�||dg�d�||d dg�d �dS) N�qzKey-qr<ZAltr:zKey-QzPage Upz Key-Prior�*z Key-asterisk)rZ translate_keyr,)rZtrr^rrr�test_translate_keyszHelperTest.test_translate_keyN)r r r rHrmrrrrrj srj�__main__�)� verbosity)rHZidlelibrZ test.supportrZunittestrZtkinterrrZidlelib.idle_test.mock_idlerZidlelib.idle_test.mock_tkrrrIZTestCaser rKrWrhrjr �mainrrrr�s     W7R