B � f.}�@sNdZddlmZddlZddlZddlZddlmZmZddl Z ddl m Z ddlZddl m Z ej Z e jZiZe�d�Zed<e�d�Zed <e�d�Zed <e�d�Zed <d d �Zdd�ZGdd�de j�ZGdd�de j�ZGdd�de j�ZGdd�de j�ZGdd�de j�ZGdd�de j�Zedk�rJe j dd�dS)z�Test config, coverage 93%. (100% for IdleConfParser, IdleUserConfParser*, ConfigChanges). * Exception is OSError clause in Save method. Much of IdleConf is also exercised by ConfigDialog and test_configdialog. �)�configN)�captured_stderr�findfile)�mock)�Func��main� highlight�keys� extensionscCstt_dt_dS)NT)�testcfg�idleConf�userCfg�idlelib�testing�rr�B/opt/alt/python37/lib64/python3.7/idlelib/idle_test/test_config.py� setUpModulesrcCstt_dt_dS)NF)�usercfgr rrrrrrr�tearDownModule!src@s4eZdZdZdZdd�Zdd�Zdd�Zd d �Zd S) �IdleConfParserTestzTest that IdleConfParser worksz� [one] one = false two = true three = 10 [two] one = a string two = true three = false cCs�t�d�}|�|j�|j}|�|jdddd�d�|�|jdddd�d�||jddd d�d �||�dd�d �|�|jdddd�d�|�|jdddd�d�||�dd�d �||�dd�d �|�|�dd��||jdddd�d�dS)Nr�one�bool)�typeF�twoT�three�int� za string�true�false�notZexistZDEFAULT)�default)r�IdleConfParser� read_string� assertEqualZassertIs�GetZ assertIsNone)�self�parser�eqrrr�test_get5s  zIdleConfParserTest.test_getcCs\t�d�}|�|j�|j}|�|d�dddg�|�|d�dddg�|�|d�g�dS)Nrrrrz not exist)rr"r#� GetOptionList�assertCountEqualr$)r&r'Zget_listrrr�test_get_option_listJs   z'IdleConfParserTest.test_get_option_listcCs&t�d�}|��|�|��g�dS)Nr)rr"�Loadr$�sections)r&r'rrr�test_load_nothingRs z$IdleConfParserTest.test_load_nothingcCsFtd�}t�|�}|��|�|�dd�d�|�|�d�dg�dS)Nz cfgparser.1zFoo Bar�foo�newbar)rrr"r-r$r%r*)r&� config_pathr'rrr�test_load_fileWs  z!IdleConfParserTest.test_load_fileN) �__name__� __module__� __qualname__�__doc__rr)r,r/r3rrrrr&s  rc@sJeZdZdZddd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dS)�IdleUserConfParserTestz"Test that IdleUserConfParser worksrcCs t�|�S)N)r�IdleUserConfParser)r&�pathrrr� new_parserdsz!IdleUserConfParserTest.new_parsercCs�|��}|�d�|�|�ddd��|�|�ddd��|�|�ddd��|�|�dd�d�|�|�ddd��|�|��ddg�|�|�dd�d�dS)N�Foo�barrr�Bar) r;� add_section� assertTrue� SetOption� assertFalser$r%r+r.)r&r'rrr�test_set_optiongs z&IdleUserConfParserTest.test_set_optioncCsZ|��}|�d�|�ddd�|�|�dd��|�|�dd��|�|�dd��dS)Nr<r=rZNotZExist)r;� AddSectionrAr@Z RemoveOptionrB)r&r'rrr�test_remove_optionws  z)IdleUserConfParserTest.test_remove_optioncCsN|��}|�|��g�|�d�|�d�|�d�|�|��ddg�dS)Nr<r>)r;r$r.rDr+)r&r'rrr�test_add_section�s    z'IdleUserConfParserTest.test_add_sectioncCs^|��}|�d�|�d�|�ddd�|�|��dddg�|��|�|��dg�dS)Nr<r>ZIdle�name�val)r;rDrAr+r.ZRemoveEmptySectionsr$)r&r'rrr�test_remove_empty_sections�s  z1IdleUserConfParserTest.test_remove_empty_sectionscCsv|��}|�d�|�d�|�|���|�|��g�|�ddd�|�d�|�|���|�|��dg�dS)Nr<r>r=r) r;rDr@ZIsEmptyr$r.rArBr+)r&r'rrr� test_is_empty�s   z$IdleUserConfParserTest.test_is_emptyc Cs�t����}tj�|d�}|�|�}|�d�|�ddd�|�tj� |��|� �|� tj� |��|� d�|� �|�tj� |��WdQRXdS)Nztest.cfgr<r=r) �tempfileZTemporaryDirectory�osr:�joinr;rDrArB�existsZSaver@�remove_section)r&Ztdirr:r'rrr� test_save�s    z IdleUserConfParserTest.test_saveN)r) r4r5r6r7r;rCrErFrIrJrPrrrrr8as     r8c@s,eZdZdZedd��Zedd��ZdAdd�Zd d �Ze � e j � d �d �d d��Ze � e j � d � d�dd��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Z d4d5�Z!d6d7�Z"d8d9�Z#d:d;�Z$dd?�Z&d@S)B� IdleConfTestzTest for idleConfc Cs�i|_tjdd�}tdkr(tj�t�}ntj�t jd�}xD|j D]:}tj� |d|�}t |d��}|� �|j|<WdQRXqBWtj|_t�t_dS)NT)�_utest�__main__rz../config-%s.def�r)� config_stringr�IdleConfr4rLr:�dirname�__file__�abspath�sys� config_typesrM�open�read�_warn� orig_warnr)�cls�conf�idle_dir�ctyper2�frrr� setUpClass�s   zIdleConfTest.setUpClasscCs |jt_dS)N)r_rr^)r`rrr� tearDownClass�szIdleConfTest.tearDownClassFcCs tj|d�S)N)rR)rrV)r&rRrrr� new_config�szIdleConfTest.new_configcCsltjdd�}xZ|jD]P}t�d�|j|<|j|�|j|�t�d�|j|<|j|�|j|�qW|S)zbReturn a mocked idleConf Both default and user config used the same config-*.def T)rRr) rrVr[r"� defaultCfgr#rUr9r)r&rarcrrr� mock_config�s  zIdleConfTest.mock_config�winzthis is test for unix systemc Cs�|jdd�}tjddd��0tjddd��|�|��d�WdQRXWdQRXtjddd��Ftjd d d��,t�d ��|�|��d �WdQRXWdQRXWdQRXtjd dd��:|�t��$|�t��|��WdQRXWdQRXWdQRXdS)NT)rRzos.path.expanduserz /home/foo)� return_valuezos.path.existsz/home/foo/.idlerc�~z os.getcwdz/home/foo/cpythonzos.mkdirz/home/foo/cpython/.idlercz os.path.joinz/path/not/exists)rgr�patchr$� GetUserCfgDir� assertRaises� SystemExit�FileNotFoundError)r&rarrr�test_get_user_cfg_dir_unix�s $  $  z'IdleConfTest.test_get_user_cfg_dir_unixzthis is test for Windows systemc Cs�|jdd�}tjddd��0tjddd��|�|��d�WdQRXWdQRXtjddd��Ftjd d d��,t�d ��|�|��d �WdQRXWdQRXWdQRXtjd dd��:|�t��$|�t��|��WdQRXWdQRXWdQRXdS)NT)rRzos.path.expanduserzC:\foo)rkzos.path.existszC:\foo\.idlercrlz os.getcwdzC:\foo\cpythonzos.mkdirzC:\foo\cpython\.idlercz os.path.joinz/path/not/exists)rgrrmr$rnrorprq)r&rarrr�test_get_user_cfg_dir_windows�s $  $  z*IdleConfTest.test_get_user_cfg_dir_windowsc Cs6|jdd�}d}tj�ddi��(tjd|d��|��WdQRXWdQRX|�|j��|j�|�|j ��|j�x |j� �D]}|� |t j �q�Wx |j � �D]}|� |t j�q�Wx6|j��D](\}}|�|jtj�|d|�d ���q�Wx>|j ��D]0\}}|�|jtj�|j�pd d|�d ���q�WdS) NT)rRz /home/foor4Z__foo__zos.path.dirname)rkzconfig-z.def�#z.cfg)rgrrm�dictZCreateConfigHandlersr+rhr r[r�valuesZassertIsInstancerr"r9�itemsr$�filerLr:rMZuserdir)r&rarbZdefault_parserZ user_parserZcfg_typer'rrr�test_create_config_handlers s" z(IdleConfTest.test_create_config_handlerscCs�|jdd�}td�}t�|�|jd<t�|�|jd<|��|j}||jd� dd�d�||jd� d�dg�||jd� dd�d�||jd� d�dg�dS)NT)rRz cfgparser.1r0zFoo Barr1) rgrrr"rhr9rZ LoadCfgFilesr$r%r*)r&rar2r(rrr�test_load_cfg_files&s z IdleConfTest.test_load_cfg_filesc Cs>|��}t�d��"}|��|�|jt|j��WdQRXdS)Nz&idlelib.config.IdleUserConfParser.Save)rirrmZSaveUserCfgFilesr$� call_count�lenr)r&ra�mrrr�test_save_user_cfg_files;s z%IdleConfTest.test_save_user_cfg_filesc Cs�|��}|j}||�ddd�d�||jddddd�d�t�d��V}||jddd dd�d�||�ddd �d�||jddd d d �d �||jd �WdQRXdS)Nr� EditorWindow�widthZ80r)r�Pzidlelib.config._warnZfont� NotExistsZNE)r!�)rir$� GetOptionrrmr{)r&rar(r^rrr�test_get_optionBs zIdleConfTest.test_get_optioncCs2|��}|�dddd�|�|�ddd�d�dS)Nrr<r=r1)rirAr$r�)r&rarrrrCNszIdleConfTest.test_set_optionc Cs�|��}|�|�dd�ddddddd d g�|�|�d d�ddddddd d g�|�tj��|�d d�WdQRX|�tj��|�dd �WdQRXdS)Nr!rZGeneralrZPyShell�Indent�Theme�KeysZHistory� HelpFiles�userZfoobarZ notexists)rir+�GetSectionListror�InvalidConfigSetZInvalidConfigType)r&rarrr�test_get_section_listTs      z"IdleConfTest.test_get_section_listc Cs�|��}|j}||�dd�ddd��||�dd�ddd��|�dd d d �|�dd d d �t�d��||�d d�d d d��WdQRXdS)Nz IDLE ClassicZnormalz#000000z#ffffff)Z foregroundZ backgroundZcursorZblackr �Foobarznormal-foregroundz#747474znormal-backgroundz#171717zidlelib.config._warn)rir$Z GetHighlightrArrm)r&rar(rrr�test_get_highlightes   zIdleConfTest.test_get_highlightc CsL|��}|�|�dd�|�dd��|�tj��|�dd�WdQRXdS)Nr!z IDLE Classicr��bad)rir$Z GetThemeDictrorZ InvalidTheme)r&rarrr�test_get_theme_dictws  z IdleConfTest.test_get_theme_dictcCs8|��}|�|��|�d��|�|��|�d��dS)Nr�r�)rir$Z CurrentTheme�current_colors_and_keys� CurrentKeys)r&rarrr�test_get_current_theme_and_keys�sz,IdleConfTest.test_get_current_theme_and_keyscCs|��}|�|�d�d�dS)Nr�z IDLE Classic)rir$r�)r&rarrr�test_current_colors_and_keys�sz)IdleConfTest.test_current_colors_and_keyscCs^tj}|jdd�}dt_|�|��d�dt_|�|��d�dt_|�|��d�|t_dS) NT)rRZwin32zIDLE Classic Windows�darwinzIDLE Classic OSXz some-linuxzIDLE Modern Unix)rZ�platformrgr$� default_keys)r&�current_platformrarrr�test_default_keys�s zIdleConfTest.test_default_keyscCs�t�d�|j}tj}||dd�g�||�dg�||dd�dg�||dd�ddg�||ddd �ddg�t�d�t�d�dS) Nzn [ZzDummy] enable = True [DISABLE] enable = False T)Z shell_only�ZzDummy)� editor_onlyF)� active_onlyZDISABLE)r�r�)�userextnr#r$r Z GetExtensionsrO)r&r(ZiGErrr�test_get_extensions�s z IdleConfTest.test_get_extensionscCs0|��}|�|�|�dd��dddddg�dS)Nr!r Z AutoCompleteZ CodeContextZFormatParagraphZ ParenMatchr�)rir+ZRemoveKeyBindNamesr�)r&rarrr�test_remove_key_bind_names�sz'IdleConfTest.test_remove_key_bind_namescCs>t�d�|j}|t�d�d�|t�d�d�t�d�dS)Nz= [ZzDummy] enable = True zz-inr�zz-out)r�r#r$r ZGetExtnNameForEventrO)r&r(rrr�test_get_extn_name_for_event�s z)IdleConfTest.test_get_extn_name_for_eventcCs0t�d�|�t�d�ddgi�t�d�dS)Nz= [ZzDummy] enable = True r�z<>z!)r�r#r$r ZGetExtensionKeysrO)r&rrr�test_get_extension_keys�s   z$IdleConfTest.test_get_extension_keyscCsNt�d�|j}tj}||d�i�dgdgd�}||d�|�t�d�dS)Nz= [ZzDummy] enable = True r�z!z!)z<>z <>r�)r�r#r$r ZGetExtensionBindingsrO)r&r(ZiGEBZexpectrrr�test_get_extension_bindings�s z(IdleConfTest.test_get_extension_bindingscCs�|��}|j}||�dd�ddg�||�dd�ddg�||�dd�d d g�||�d d�d g�||�d d�d g�||�dd�g�||�dd�g�dS)NzIDLE Modern Unixz<>zzzIDLE Classic Unixz z zIDLE Classic WindowszzzIDLE Classic MaczzIDLE Classic OSXz NOT EXISTS)rir$Z GetKeyBinding)r&rar(rrr�test_get_keybinding�s      z IdleConfTest.test_get_keybindingcCs8tj}|��}dt_|�|��|�|����|t_dS)Nz some-linux)rZr�rir$ZGetCurrentKeySet� GetKeySetr�)r&r�rarrr�test_get_current_keyset�s  z$IdleConfTest.test_get_current_keysetcCsj|��}|jd�d�|jd�d�|jd�ddd�|jd�ddd�|�|�d�d d �dS) Nr r�ZFoobar_cfgBindingsZenable�TrueZnewfoozzIDLE Modern Unixz <>r)rirhr?�setr$r�)r&rarrr�test_get_keyset�s zIdleConfTest.test_get_keysetcCsL|��}|�|�d��|�|�d��|�|�d��|�|�d��dS)N�copyZcutzdel-word-rightz not-exists)rir@Z IsCoreBindingrB)r&rarrr�test_is_core_bindings z!IdleConfTest.test_is_core_bindingc Cs|��}|�|�d�g�|�|�d�g�|�tj��|�|�d�g�WdQRX|�|��|�d�|�d��|jd� ddd�|jd� ddd �|jd� dd d �|jd� dd d �|�|�d�dddg�|�|��|�d�|�d��dS)Nr!r�r�rr��4zPython;https://python.org�3zPython:https://python.org�2z/Pillow;https://pillow.readthedocs.io/en/latest/�1z/IDLE;C:/Programs/Python36/Lib/idlelib/help.html)�IDLEz*C:/Programs/Python36/Lib/idlelib/help.htmlr�)ZPillowz(https://pillow.readthedocs.io/en/latest/r�)�Pythonzhttps://python.orgr�) rir$ZGetExtraHelpSourceListrorr�r+ZGetAllExtraHelpSourcesListrrA)r&rarrr�test_extra_help_source_lists& z(IdleConfTest.test_extra_help_source_listcCs�ddlm}ddlm}ddlm}|��}|d�|�}|��|�|dd|d��}|� |� |d d �|d |d dkr|d n|d |df�|� �~dS)Nr)�requires)�Tk)�FontZguiZ TkFixedFontT)rGrN�rootrrZfamily�sizerZweight) � test.supportr�Ztkinterr�Z tkinter.fontr�riZwithdrawZactualr$ZGetFontZdestroy)r&r�r�r�rar�rdrrr� test_get_font*s    (zIdleConfTest.test_get_fontcCs�|��}|j}||��ddg�||��dddg�||��ddg�||�d�dd d g�||�d �dd g�||�d �dddg�||�d�dddg�dS)Nz<>z z<>z z z<>zzIDLE Classic WindowszzzIDLE Classic OSXzzIDLE Classic Unixz z zIDLE Modern Unix)rir$Z GetCoreKeys)r&rar(rrr�test_get_core_keys=s  zIdleConfTest.test_get_core_keysN)F)'r4r5r6r7� classmethodrerfrgri�unittestZskipIfrZr�� startswithrrrsryrzr~r�rCr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrQ�s<          rQc@sReZdZdZejZdZe��Zdd�Z dd�Z dd�Z d d �Z d d �Z d d�ZdS)�CurrentColorKeysTesta Test colorkeys function with user config [Theme] and [Keys] patterns. colorkeys = config.IdleConf.current_colors_and_keys Test all patterns written by IDLE and some errors Item 'default' should really be 'builtin' (versus 'custom). z IDLE ClassiccCs~|�|�d�|j�t�d�|�|�d�|j�dtdd<|�|�d�d�dtdd<|�|�d�|j�t�d�dS)Nr�z< [Theme] default = True zIDLE NewrGz non-existent)r$� colorkeys� default_theme�usermainr#rO)r&rrr�test_old_builtin_themeXs  z+CurrentColorKeysTest.test_old_builtin_themecCsht�d�|�|�d�d�dtdd<|�|�d�d�dtdd<|�|�d�|j�t�d�dS)NzZ [Theme] default = True name2 = IDLE Dark r�z IDLE DarkzIDLE NewrGz non-existent�name2)r�r#r$r�r�rO)r&rrr�test_new_builtin_themejs  z+CurrentColorKeysTest.test_new_builtin_themecCspt�d�|�|�d�|j�t�d�|�|�d�d�dtdd<|�|�d�d�t�d�t�d�dS)Nz\ [Theme] default = False name = Custom Dark r�z[Custom Dark] a=bz Custom Darkz non-existentr�)r�r#r$r�r��userhighrO)r&rrr�test_user_override_themezs   z-CurrentColorKeysTest.test_user_override_themecCs^|�|�d�|j�t�d�|�|�d�d�dtdd<|�|�d�|j�t�d�dS)Nr�z` [Keys] default = True name = IDLE Classic Unix zIDLE Classic Unixz non-existentrG)r$r�r�r�r#rO)r&rrr�test_old_builtin_keys�s z*CurrentColorKeysTest.test_old_builtin_keyscCsht�d�|�|�d�d�dtdd<|�|�d�d�dtdd<|�|�d�|j�t�d�dS)Nz` [Keys] default = True name2 = IDLE Modern Unix r�zIDLE Modern UnixzIDLE Classic UnixrGz non-existentr�)r�r#r$r�r�rO)r&rrr�test_new_builtin_keys�s  z*CurrentColorKeysTest.test_new_builtin_keyscCspt�d�|�|�d�|j�t�d�|�|�d�d�dtdd<|�|�d�d�t�d�t�d�dS)Nz[ [Keys] default = False name = Custom Keys r�z[Custom Keys] a=bz Custom Keysz non-existentr�)r�r#r$r�r��userkeysrO)r&rrr�test_user_override_keys�s   z,CurrentColorKeysTest.test_user_override_keysN)r4r5r6r7r r�r�r�r�r�r�r�r�r�r�rrrrr�Msr�c@s�eZdZiiiid�Zdd�Zdddiiddd iid d d iiid�Zd d�Zdd�Zdd�Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�ZdS) � ChangesTest)rr r r cCs:|j}|�dddd�|�dddd�|�d d d d �|S) Nr�Msec�mitem�mvalr �Hsec�hitem�hvalr �Ksec�kitem�kval)�changes� add_option)r&r�rrr�load�s zChangesTest.loadr�r�r�r�r�r�r�r�r�cCst��|_dS)N)rZ ConfigChangesr�)r&rrr�setUp�szChangesTest.setUpcCs|�|j|j�dS)N)r$r��empty)r&rrr� test_init�szChangesTest.test_initcCs8|��}|�||j�|�dddd�|�||j�dS)Nrr�r�r�)r�r$�loadedr�)r&r�rrr�test_add_option�szChangesTest.test_add_optioncCs�|jj}|�|dddd��|�|dddd��|�tddd�|�|dddd��|�tddd�|�|dddd��|�t�dd��t�d�dS)Nrr�Zwhat�0z use-spacesr�)r�� save_optionr@rBr$r�� has_optionrO)r&r�rrr�test_save_option�szChangesTest.test_save_optioncCs�|��}|�|���|�tddd�|�tddd�|�tddd �|�d ddd�|�|���t� d�t� d�t� d�dS) Nr�r�r�r�r�r�r�r�r�r) r�r@�save_allr$r�r�r�r�rBrO)r&r�rrr�test_save_added�s  zChangesTest.test_save_addedcCsV|j}|�dddd�|�dddd�|��|�t�dd��|�t�dd��dS)Nrr�r�ZidledocZELDIZcodeldi)r�r�r�r�rBr�r�r@)r&r�rrr�test_save_help�s zChangesTest.test_save_helpcCs|j}|�dddd�dS)Nrr�z use-spacesr�)r�r�)r&r�rrr�test_save_default�szChangesTest.test_save_defaultc Cs�|��}|�dd�|�||j�x\dD]T\}}t|�|dd�|�||�|�t��|||t||WdQRXq(WdS)NrZfake))rr�)r r�rG�value)r�Zdelete_sectionr$r�r rAro�KeyError)r&r�ZcfgtypeZsectionrrr�test_delete_sections    zChangesTest.test_delete_sectioncCs"|��}|��|�||j�dS)N)r��clearr$r�)r&r�rrr� test_clear szChangesTest.test_clearN)r4r5r6r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��s       r�c@seZdZdd�ZdS)� WarningTestc Cs�|j}t�t_t��}t�dd�WdQRX|tjdh�||��d�t��}t�dd�WdQRX||��d�t��}t�dd�WdQRX|tjddh�||��d �dS) N�warning�key)r�r�zwarning r�warn2�yek)r�r�zwarn2 )r$r�rZ_warnedrr^�getvalue)r&ZEqual�stderrrrr� test_warnszWarningTest.test_warnN)r4r5r6r�rrrrr�sr�rS�)� verbosity)!r7rrrZrLrKr�rrr�rZidlelib.idle_test.mock_idlerr rrr r9r�r�r�r�rrZTestCaserr8rQr�r�r�r4rrrrr�s:   ;SoV