a 9êdgtNã@südZddlmZddlmZmZddlZddlmZm Z m Z m Z m Z ddl mZddlmZddlmZmZmZdd lmZdd lmZdd lmZdd lmZe jZd d„ZGdd„dejƒZ Gdd„dejƒZ!Gdd„dejƒZ"e#dkrøej$dddS)zTest squeezer, coverage 95%é)Údedent)ÚTextÚTkN)ÚMockÚNonCallableMagicMockÚpatchÚsentinelÚANY)Úrequires)ÚidleConf)Úcount_lines_with_wrappingÚExpandingButtonÚSqueezer)Úmacosx)Ú view_text)ÚHovertip)ÚPyShellcs0tdƒtƒ‰ˆ ¡‡fdd„}| |¡ˆS)z*Helper for tests: Create a root Tk object.Zguicsˆ ¡ˆ ¡dS©N)Zupdate_idletasksZdestroy©©Úrootrú;/usr/local/lib/python3.9/idlelib/idle_test/test_squeezer.pyÚ cleanup_rootsz&get_test_tk_root..cleanup_root)r rZwithdrawÚ addCleanup)Z test_instancerrrrÚget_test_tk_roots   rc@sPeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dS)ÚCountLinesTestz1Tests for the count_lines_with_wrapping function.cCs| |t||ƒ¡Sr©Ú assertEqualr )ÚselfÚexpectedÚtextÚ linewidthrrrÚcheck%sþzCountLinesTest.checkcCs| tdƒd¡dS)zTest with an empty string.ÚrNr©rrrrÚtest_count_empty+szCountLinesTest.test_count_emptycCs| tdƒd¡dS)z/Test with a string which begins with a newline.z textéNrr$rrrÚ!test_count_begins_with_empty_line/sz0CountLinesTest.test_count_begins_with_empty_linecCs| tdƒd¡dS)z-Test with a string which ends with a newline.ztext éNrr$rrrÚtest_count_ends_with_empty_line3sz.CountLinesTest.test_count_ends_with_empty_linecCs| tdƒd¡dS)z Test with several lines of text.z1 2 3 éNrr$rrrÚtest_count_several_lines7sz'CountLinesTest.test_count_several_linescCs4|jdddd|jdddd|jdddddS) Nr(Ú éP©rr r!r&ú é z ©r"r$rrrÚtest_empty_lines;szCountLinesTest.test_empty_linescCs$|jdddd|jdddddS)Nr*ZÈaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar-r.zÉaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa r1r$rrrÚtest_long_line@szCountLinesTest.test_long_linecCs`tdƒ}|jd|dd|jd|ddd|jd|dd|jd|d d|jd |d ddS) Nz€ 13 characters 43 is the number of characters on this line 7 chars 13 charactersér-r.r,éé(ééé r0)rr")rr rrrÚ$test_several_lines_different_lengthsDs z3CountLinesTest.test_several_lines_different_lengthsN) Ú__name__Ú __module__Ú __qualname__Ú__doc__r"r%r'r)r+r2r3r:rrrrr#src@sŽeZdZdZd"dd„Zd#dd„Zd$dd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„ZdS)%Ú SqueezerTestzTests for the Squeezer class.FcCs:tƒ}d|_|r6t|ƒ|_|j|jd}||_|j_|S)z$Create a mock EditorWindow instance.r-r)rÚwidthrrÚmake_text_widgetr ZperZbottom)rÚwith_text_widgetÚeditwinÚ text_widgetrrrÚmake_mock_editor_windowTs z$SqueezerTest.make_mock_editor_windowNcCs|dur| ¡}t|ƒ}|S)zrErGrArMrUrWrfrhrlrpr{r}r€r„r…rrrrr?Rs     r?c@sTeZdZdZdd„Zededdd„ƒZdd „Zd d „Z d d „Z dd„Z dd„Z dS)ÚExpandingButtonTestz$Tests for the ExpandingButton class.cCs$t|ƒ}tƒ}t|ƒ|j_d|_|S)z0Helper for tests: Create a mock Squeezer object.ri)rrrrCr rk)rrrFrrrÚmake_mock_squeezer5s  z&ExpandingButtonTest.make_mock_squeezerzidlelib.squeezer.Hovertip©ZautospeccCsÖ| ¡}|jj}tddd|ƒ}| |jd¡| |j|¡| d| d¡v¡| |  dd¡d¡|  d |  ¡¡d t   ¡r€d nd }|  ||  ¡¡| |jd ¡|j|ttd|jdd }|  d| ¡¡dS)z1Test the simplest creation of an ExpandingButton.rYÚTAGSriz50 linesr rHrnr,zz Ú2Ú3r()Z hover_delayrz right-clickN)r‡rCr r rrxZmasterrZcgetroZassertInÚbindrZisAquaTkrarbr Ú call_argsÚlower)rZ MockHovertiprFrDÚexpandingbuttonZright_button_codeZ tooltip_textrrrrW?szExpandingButtonTest.test_initcCsº| ¡}tddd|ƒ}|j}|jd|d|j|_|jtƒd}| |d¡| | dd¡d ¡|  d ¡}| | d|¡d¡| |  dd¡d|f¡| |j j j d ¡|j j  |¡dS) zTest the expand event.rYr‰rirH©ZwindowrtNrnzTEXT úend-1cr()r‡r r Ú window_createÚ base_textryrrroÚindexZ tag_nextrangerVÚremoverarb)rrFrrDrzZtext_end_indexrrrÚ test_expand\s  ÿzExpandingButtonTest.test_expandcCs"| ¡}dd}t|dd|ƒ}| ¡| |j¡|j}|jd|d|j|_tdƒ.}d|j _ d|j _ |j t ƒd }Wd ƒn1sŠ0Y| |d ¡| |j dd ¡d ¡tdƒ.}d|j _ d|j _ |j t ƒd }Wd ƒn1sò0Y| |d ¡| |j dd ¡|¡d S)z@Test that expanding very long output asks user for confirmation.Úai †r‰rirHrzidlelib.squeezer.messageboxFrtNrvr‘r#T)r‡r Zset_is_dangerousrZ is_dangerousr r’r“rZ askokcancelr^Zaskyesnoryrrro)rrFr rrDZ mock_msgboxrzrrrÚtest_expand_dangerous_oupput|s(  ,  , z0ExpandingButtonTest.test_expand_dangerous_oupputcCsp| ¡}tddd|ƒ}tƒ|_tƒ|_|jtƒd}| |d¡| |jjd¡| |jjd¡|j d¡dS)zTest the copy event.rYr‰rirtNr() r‡r rZclipboard_clearZclipboard_appendÚcopyrrarb)rrFrrzrrrÚ test_copy¤s zExpandingButtonTest.test_copycCs€| ¡}tddd|ƒ}tƒ|_tdtdB}|jtƒd| |jd¡| |j dd d¡Wd ƒn1sr0Yd S) zTest the view event.rYr‰rizidlelib.squeezer.view_textrˆrtr(rr&N) r‡r rZ selection_ownrrÚviewrrar)rrFrZmock_view_textrrrÚ test_view¸s zExpandingButtonTest.test_viewcCs¢| ¡}tddd|ƒ}tdƒp}tƒ}||_tƒ}d|_d|_|j|d| |j j t |j ƒ¡|j D]^}}|j j |tdqfWdƒn1s”0YdS) zTest the context menu.rYr‰riz tkinter.Menur0rt)ÚlabelZcommandN)r‡r rrr^ÚxÚyZcontext_menu_eventrZ add_commandrarcZ rmenu_specsZassert_any_callr )rrFrZ mock_MenuZ mock_menuZ mock_eventrÚdatarrrÚ test_rmenuÉs   ÿzExpandingButtonTest.test_rmenuN) r;r<r=r>r‡rrrWr–r˜ršrœr¡rrrrr†1s   (r†Ú__main__r&)Ú verbosity)%r>ÚtextwraprÚtkinterrrZunittestZ unittest.mockrrrrr Z test.supportr Zidlelib.configr Zidlelib.squeezerr r rZidlelibrZidlelib.textviewrZidlelib.tooltiprZidlelib.pyshellrr_rZTestCaserr?r†r;rrrrrÚs(       /`*