U Å:âeZ<ã@s~dZddlmZddlZddlmZddlmZmZddl Z ddlm Z ddl m Z Gdd „d ej ƒZGd d „d ej ƒZGd d „d ej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGd d!„d!ej ƒZGd"d#„d#ej ƒZGd$d%„d%ej ƒZed&krzejd'd(d)dS)*a½Test query, coverage 93%). Non-gui tests for Query, SectionName, ModuleName, and HelpSource use dummy versions that extract the non-gui methods and add other needed attributes. GUI tests create an instance of each class and simulate entries and button clicks. Subclass tests only target the new code in the subclass definition. The appearance of the widgets is checked by the Query and HelpSource htests. These are run by running query.py. é)ÚqueryN©Úrequires)ÚTkÚEND)Úmock)ÚVarc@sFeZdZdZGdd„dƒZdd„Zdd„Zdd „Zd d „Zd d „Z dS)Ú QueryTestzTest Query base class.c@s<eZdZejjZejjZejjZdd„Zdd„Z dd„Z dS)zQueryTest.Dummy_QuerycCs&t|d|_ddi|_d|_d|_dS)N©ÚvalueÚtextÚF)rÚentryÚ entry_errorÚresultÚ destroyed©ÚselfZ dummy_entry©rúA/usr/local/python38/lib/python3.8/idlelib/idle_test/test_query.pyÚ__init__!s  zQueryTest.Dummy_Query.__init__cCs||jd<dS©Nr ©r©rÚmessagerrrÚ showerror&szQueryTest.Dummy_Query.showerrorcCs d|_dS©NT)r©rrrrÚdestroy(szQueryTest.Dummy_Query.destroyN) Ú__name__Ú __module__Ú __qualname__rÚQueryÚentry_okÚokÚcancelrrrrrrrÚ Dummy_Querys r&cCsD| d¡}| | ¡d¡| |j|jfd¡| d|jd¡dS)Nú ©NFz blank liner )r&Ú assertEqualr#rrÚassertInr©rÚdialogrrrÚtest_entry_ok_blank+s zQueryTest.test_entry_ok_blankcCsD| d¡}|j}|| ¡dƒ||j|jfdƒ||jddƒdS)Nú good Úgoodr(r r )r&r)r#rrr)rr,ÚEqualrrrÚtest_entry_ok_good1s  zQueryTest.test_entry_ok_goodcCsT| d¡}t ¡|j_| | ¡d¡| |jjj¡|j`| |j |j fd¡dS)Nr r() r&rÚMockrZ focus_setr)r$Ú assertTrueÚcalledrrr+rrrÚ test_ok_blank8s   zQueryTest.test_ok_blankcCs2| d¡}| | ¡d¡| |j|jfd¡dS)Nr/)r/T)r&r)r$rrr+rrrÚ test_ok_good@s zQueryTest.test_ok_goodcCs2| d¡}| | ¡d¡| |j|jfd¡dS)Nzdoes not matterr)r&r)r%rrr+rrrÚ test_cancelEs zQueryTest.test_cancelN) rr r!Ú__doc__r&r-r1r5r6r7rrrrr sr c@s>eZdZdZGdd„dƒZdd„Zdd„Zdd „Zd d „Zd S) ÚSectionNameTestz#Test SectionName subclass of Query.c@s*eZdZejjZdgZdd„Zdd„ZdS)z!SectionNameTest.Dummy_SectionNameÚusedcCst|d|_ddi|_dS©Nr r r ©rrrrrrrrQs z*SectionNameTest.Dummy_SectionName.__init__cCs||jd<dSrrrrrrrTsz+SectionNameTest.Dummy_SectionName.showerrorN) rr r!rÚ SectionNamer#Ú used_namesrrrrrrÚDummy_SectionNameNsr?cCs0| d¡}| | ¡d¡| d|jd¡dS©Nr'zno namer ©r?r)r#r*rr+rrrÚtest_blank_section_nameWs z'SectionNameTest.test_blank_section_namecCs0| d¡}| | ¡d¡| d|jd¡dS)Nr:Zuser rAr+rrrÚtest_used_section_name\s z&SectionNameTest.test_used_section_namecCs0| d¡}| | ¡d¡| d|jd¡dS)NZ goodgoodgoodgoodgoodgoodgoodgoodzlonger than 30r rAr+rrrÚtest_long_section_nameas z&SectionNameTest.test_long_section_namecCs0| d¡}| | ¡d¡| |jdd¡dS)Nr.r/r r )r?r)r#rr+rrrÚtest_good_section_namefs z&SectionNameTest.test_good_section_nameN) rr r!r8r?rBrCrDrErrrrr9Ks  r9c@s>eZdZdZGdd„dƒZdd„Zdd„Zdd „Zd d „Zd S) ÚModuleNameTestz"Test ModuleName subclass of Query.c@s(eZdZejjZdZdd„Zdd„ZdS)zModuleNameTest.Dummy_ModuleNamer cCst|d|_ddi|_dSr;r<rrrrrrs z(ModuleNameTest.Dummy_ModuleName.__init__cCs||jd<dSrrrrrrrusz)ModuleNameTest.Dummy_ModuleName.showerrorN) rr r!rÚ ModuleNamer#Útext0rrrrrrÚDummy_ModuleNameosrIcCs0| d¡}| | ¡d¡| d|jd¡dSr@©rIr)r#r*rr+rrrÚtest_blank_module_namexs z%ModuleNameTest.test_blank_module_namecCs0| d¡}| | ¡d¡| d|jd¡dS)NZ __name_xyz123_should_not_exist__z not foundr rJr+rrrÚtest_bogus_module_name}s z%ModuleNameTest.test_bogus_module_namecCs0| d¡}| | ¡d¡| d|jd¡dS)NÚ itertoolsz source-basedr rJr+rrrÚtest_c_source_name‚s z!ModuleNameTest.test_c_source_namecCsd| d¡}| | ¡ d¡¡| |jdd¡| d¡}| | ¡ d¡¡| |jdd¡dS)NÚidlelibú __init__.pyr r zos.pathzpath.py)rIr3r#Úendswithr)rr+rrrÚtest_good_module_name‡s   z$ModuleNameTest.test_good_module_nameN) rr r!r8rIrKrLrNrRrrrrrFls  rFc@s6eZdZdZGdd„dƒZdd„Zdd„Zdd „Zd S) ÚGotoTestzTest Goto subclass of Query.c@s$eZdZejjZdd„Zdd„ZdS)zGotoTest.Dummy_ModuleNamecCst|d|_ddi|_dSr;r<rrrrr•s z"GotoTest.Dummy_ModuleName.__init__cCs||jd<dSrrrrrrr˜sz#GotoTest.Dummy_ModuleName.showerrorN)rr r!rÚGotor#rrrrrrrI“srIcCs0| d¡}| | ¡d¡| d|jd¡dS)NÚaznot a base 10 integerr rJr+rrrÚtest_bogus_goto›s zGotoTest.test_bogus_gotocCs0| d¡}| | ¡d¡| d|jd¡dS)NÚ0znot a positive integerr rJr+rrrÚ test_bad_goto s zGotoTest.test_bad_gotocCs0| d¡}| | ¡d¡| |jdd¡dS)NÚ1ér r )rIr)r#rr+rrrÚtest_good_goto¥s zGotoTest.test_good_gotoN)rr r!r8rIrVrXr[rrrrrSs rSc@s&eZdZdZGdd„dƒZdd„ZdS)ÚHelpsourceBrowsefileTestz8Test browse_file method of ModuleName subclass of Query.c@seZdZejjZeƒZdS)z)HelpsourceBrowsefileTest.Dummy_HelpSourceN)rr r!rÚ HelpSourceÚ browse_filerÚpathvarrrrrÚDummy_HelpSource°sr`c CsŒ| ¡}ddd„dfddd„tfddd„dfddd„tffD]J\}}}| ¡2|j |¡||_| ¡| |j ¡|¡W5QRXq»ózBHelpsourceBrowsefileTest.test_file_replaces_path..cSstS©N©Ú__file__rbrrrre¼rfZhtestcSsdSrarrbrrrre½rfcSstSrgrhrbrrrre¾rf) r`riÚsubTestr_ÚsetZ askfilenamer^r)Úget)rr,ÚpathÚfuncrrrrÚtest_file_replaces_path´s    ü  z0HelpsourceBrowsefileTest.test_file_replaces_pathN)rr r!r8r`rorrrrr\­sr\c@sPeZdZdZGdd„dƒZejZedd„ƒZ dd„Z dd „Z d d „Z d d „Z dS)ÚHelpsourcePathokTestz4Test path_ok method of HelpSource subclass of Query.c@s&eZdZejjZdd„Zddd„ZdS)z%HelpsourcePathokTest.Dummy_HelpSourcecCst|d|_ddi|_dSr;)rrmÚ path_error)rZ dummy_pathrrrrËs z.HelpsourcePathokTest.Dummy_HelpSource.__init__NcCs||jd<dSr)rq)rrZwidgetrrrrÎsz/HelpsourcePathokTest.Dummy_HelpSource.showerror)N)rr r!rr]Úpath_okrrrrrrr`Ésr`cCs |jt_dSrg)Ú orig_platformrÚplatform©ÚclsrrrÚ tearDownClassÒsz"HelpsourcePathokTest.tearDownClasscCs0| d¡}| | ¡d¡| d|jd¡dS)Nr'z no help filer )r`r)rrr*rqr+rrrÚtest_path_ok_blankÖs z'HelpsourcePathokTest.test_path_ok_blankcCs4| td¡}| | ¡d¡| d|jd¡dS)Nz bad-bad-badz not existr )r`rir)rrr*rqr+rrrÚtest_path_ok_badÛsz%HelpsourcePathokTest.test_path_ok_badc Cs`| d¡}|j}dD]F}| ¡4|j |¡| | ¡|¡| |jdd¡W5QRXqdS)Nr )z www.py.orgz http://py.orgr )r`r)rjrmrkrrrq)rr,r0ZurlrrrÚtest_path_ok_webàs   z%HelpsourcePathokTest.test_path_ok_webc Csh| d¡}dD]T\}}| ¡>|t_|j t¡| | ¡|t¡| |j dd¡W5QRXqdS)Nr ))Údarwinúfile://)Úotherr r ) r`rjrrtrmrkrir)rrrq)rr,rtÚprefixrrrÚtest_path_ok_fileés    z&HelpsourcePathokTest.test_path_ok_fileN)rr r!r8r`rrtrsÚ classmethodrwrxryrzrrrrrrpÆs  rpc@s&eZdZdZGdd„dƒZdd„ZdS)ÚHelpsourceEntryokTestz5Test entry_ok method of HelpSource subclass of Query.c@s,eZdZejjZiZiZdd„Zdd„Z dS)z&HelpsourceEntryokTest.Dummy_HelpSourcecCs|jSrg)ÚnamerrrrÚitem_okúsz.HelpsourceEntryokTest.Dummy_HelpSource.item_okcCs|jSrg)rmrrrrrrüsz.HelpsourceEntryokTest.Dummy_HelpSource.path_okN) rr r!rr]r#rrqrƒrrrrrrr`ös r`c CsN| ¡}dD]<\}}}| ¡$|||_|_| | ¡|¡W5QRXq dS)N))NNN)Núdoc.txtN)ÚdocNN)r…r„)r…r„)r`rjr‚rmr)r#)rr,r‚rmrrrrÚtest_entry_ok_helpsourceÿs  z.HelpsourceEntryokTest.test_entry_ok_helpsourceN)rr r!r8r`r†rrrrrós rc@s6eZdZdZGdd„dƒZdd„Zdd„Zdd „Zd S) ÚCustomRunCLIargsokTestz6Test cli_ok method of the CustomRun subclass of Query.c@s$eZdZejjZdd„Zdd„ZdS)z&CustomRunCLIargsokTest.Dummy_CustomRuncCst|d|_ddi|_dSr;r<rrrrrs z/CustomRunCLIargsokTest.Dummy_CustomRun.__init__cCs||jd<dSrrrrrrrsz0CustomRunCLIargsokTest.Dummy_CustomRun.showerrorN)rr r!rÚ CustomRunÚ cli_args_okrrrrrrÚDummy_CustomRunsrŠcCs| d¡}| | ¡g¡dS)Nr')rŠr)r‰r+rrrÚtest_blank_argss z&CustomRunCLIargsokTest.test_blank_argscCs0| d¡}| | ¡d¡| d|jd¡dS)Nz'no-closing-quotez No closingr )rŠr)r‰r*rr+rrrÚtest_invalid_argss z(CustomRunCLIargsokTest.test_invalid_argscCsPddddddg}| d |¡d¡}| | ¡|d g¡| |jd d ¡dS) Nz-nZ10z --verbosez-pz/pathz--namer'z "my name"zmy namer r )rŠÚjoinr)r‰r)rÚargsr,rrrÚtest_good_args sz%CustomRunCLIargsokTest.test_good_argsN)rr r!r8rŠr‹rŒrrrrrr‡ s r‡c@s&eZdZdZGdd„dƒZdd„ZdS)ÚCustomRunEntryokTestz8Test entry_ok method of the CustomRun subclass of Query.c@s&eZdZejjZiZeƒZdd„Z dS)z$CustomRunEntryokTest.Dummy_CustomRuncCs|jSrg)Úcli_argsrrrrr‰.sz0CustomRunEntryokTest.Dummy_CustomRun.cli_args_okN) rr r!rrˆr#rrÚ restartvarr‰rrrrrŠ*srŠc Csp| ¡}dD]^}|j |¡ddgdg|fffD]8\}}|j||d||_| | ¡|¡W5QRXq0q dS)N>FT)NNzmy arg)Úrestartr‘)rŠr’rkrjr‘r)r#)rr,r“r‘rrrrÚtest_entry_ok_customrun1s ÿ z,CustomRunEntryokTest.test_entry_ok_customrunN)rr r!r8rŠr”rrrrr'src@sDeZdZedd„ƒZedd„ƒZdd„Zdd„Zd d „Zd d „Z d S)Ú QueryGuiTestcCsBtdƒtƒ|_}|j ¡tj|dddd|_t ¡|j_ dS)NÚguiZTESTÚtestT©Ú_utest) rrÚrootÚwithdrawrr"r,rr2r)rvršrrrÚ setUpClass@s   zQueryGuiTest.setUpClasscCs|j`|`|j ¡|`dSrg)r,rršrurrrrwHs zQueryGuiTest.tearDownClasscCs(|jj dd¡d|j_|jj ¡dS)NrÚend)r,rÚdeleterrZ reset_mockrrrrÚsetUpOszQueryGuiTest.setUpcCs>|j}|j dd¡|j ¡| |jd¡| |jj ¡dS©NrÚabc) r,rÚinsertÚ button_okÚinvoker)rr3rr4r+rrrÚ test_click_okTs  zQueryGuiTest.test_click_okcCs0|j}|j ¡| |jd¡| |jj¡dSrg)r,r£r¤r)rZ assertFalserr4r+rrrÚtest_click_blank[s zQueryGuiTest.test_click_blankcCs>|j}|j dd¡|j ¡| |jd¡| |jj ¡dSr ) r,rr¢Z button_cancelr¤r)rr3rr4r+rrrÚtest_click_cancelas  zQueryGuiTest.test_click_cancelN) rr r!r€rœrwrŸr¥r¦r§rrrrr•>s  r•c@s eZdZedd„ƒZdd„ZdS)ÚSectionnameGuiTestcCs tdƒdS©Nr–rrurrrrœkszSectionnameGuiTest.setUpClasscCsltƒ}| ¡tj|dddhdd}|j}| |jdh¡|j dd¡|j  ¡| |j d¡|  ¡dS)NÚTÚtr¡Tr˜rZokay) rr›rr=r)r>rr¢r£r¤rr)rršr,r0rrrÚtest_click_section_nameos z*SectionnameGuiTest.test_click_section_nameN)rr r!r€rœr¬rrrrr¨is r¨c@s eZdZedd„ƒZdd„ZdS)ÚModulenameGuiTestcCs tdƒdSr©rrurrrrœ}szModulenameGuiTest.setUpClasscCsjtƒ}| ¡tj|ddddd}| |jd¡| |j ¡d¡|j  ¡|  |j   d¡¡|  ¡dS)Nrªr«rOTr˜rP)rr›rrGr)rHrrlr£r¤r3rrQr©rršr,rrrÚtest_click_module_names z(ModulenameGuiTest.test_click_module_nameN©rr r!r€rœr¯rrrrr­{s r­c@s eZdZedd„ƒZdd„ZdS)Ú GotoGuiTestcCs tdƒdSr©rrurrrrœŽszGotoGuiTest.setUpClasscCsRtƒ}| ¡tj|dddd}|j dd¡|j ¡| |j d¡|  ¡dS)Nrªr«Tr˜rZ22é) rr›rrTrr¢r£r¤r)rrr®rrrr¯’s z"GotoGuiTest.test_click_module_nameNr°rrrrr±Œs r±c@s eZdZedd„ƒZdd„ZdS)ÚHelpsourceGuiTestcCs tdƒdSr©rrurrrrœžszHelpsourceGuiTest.setUpClasscCs„tƒ}| ¡tj|ddtdd}|j}||j ¡dƒ||j ¡tƒ|j   ¡t j dkr`dnd}||j d|tfƒ| ¡dS)NrªZ__test__T)ZmenuitemÚfilepathr™r{r|r )rr›rr]rir)rrlrmr£r¤Úsysrtrr)rršr,r0r~rrrÚtest_click_help_source¢s ÿ z(HelpsourceGuiTest.test_click_help_sourceN)rr r!r€rœr¶rrrrr³œs r³c@s eZdZedd„ƒZdd„ZdS)ÚCustomRunGuiTestcCs tdƒdSr©rrurrrrœ²szCustomRunGuiTest.setUpClasscCsrtƒ}| ¡tj|dddgdd}| |j ¡d¡|j td¡|j   ¡| |j dddgdf¡|  ¡dS) NZTitlerUzb=1T)r‘r™za b=1z crd) rr›rrˆr)rrlr¢rr£r¤rrr®rrrÚtest_click_args¶sÿ z CustomRunGuiTest.test_click_argsN)rr r!r€rœr¸rrrrr·°s r·Ú__main__éF)Ú verbosityÚexit)r8rOrZunittestZ test.supportrÚtkinterrrrµrZidlelib.idle_test.mock_tkrZTestCaser r9rFrSr\rprr‡rr•r¨r­r±r³r·rÚmainrrrrÚs0    3!$-+