a  zetN@sdZddlmZddlmZmZddlZddlmZm Z m Z m Z m Z ddl mZddlmZddlmZmZmZdd lmZdd lmZdd lmZdd lmZe jZd dZGdddejZ GdddejZ!GdddejZ"e#dkrej$dddS)zTest squeezer, coverage 95%)dedent)TextTkN)MockNonCallableMagicMockpatchsentinelANY)requires)idleConf)count_lines_with_wrappingExpandingButtonSqueezer)macosx) view_text)Hovertip)PyShellcs0tdtfdd}||S)z*Helper for tests: Create a root Tk object.ZguicsdSN)Zupdate_idletasksZdestroyrootrS/opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/idle_test/test_squeezer.py cleanup_rootsz&get_test_tk_root..cleanup_root)r rZwithdraw addCleanup)Z test_instancerrrrget_test_tk_roots   rc@sPeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dS)CountLinesTestz1Tests for the count_lines_with_wrapping function.cCs||t||Sr assertEqualr )selfexpectedtext linewidthrrrcheck%szCountLinesTest.checkcCs|tdddS)zTest with an empty string.rNrrrrrtest_count_empty+szCountLinesTest.test_count_emptycCs|tdddS)z/Test with a string which begins with a newline.z textNrr$rrr!test_count_begins_with_empty_line/sz0CountLinesTest.test_count_begins_with_empty_linecCs|tdddS)z-Test with a string which ends with a newline.ztext Nrr$rrrtest_count_ends_with_empty_line3sz.CountLinesTest.test_count_ends_with_empty_linecCs|tdddS)z Test with several lines of text.z1 2 3 Nrr$rrrtest_count_several_lines7sz'CountLinesTest.test_count_several_linescCs4|jdddd|jdddd|jdddddS) Nr( Prr r!r& z r"r$rrrtest_empty_lines;szCountLinesTest.test_empty_linescCs$|jdddd|jdddddS)Nr*Zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar-r.zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa r1r$rrrtest_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 charactersr-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@seZdZdZd"ddZd#ddZd$dd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!ZdS)% SqueezerTestzTests for the Squeezer class.FcCs:t}d|_|r6t||_|j|jd}||_|j_|S)z$Create a mock EditorWindow instance.r-r)rwidthrrmake_text_widgetr ZperZbottom)rwith_text_widgeteditwin text_widgetrrrmake_mock_editor_windowTs z$SqueezerTest.make_mock_editor_windowNcCs|dur|}t|}|S)zrErGrArMrUrWrfrhrlrpr{r}rrrrrrrr?Rs     r?c@sTeZdZdZddZededddZdd Zd d Z d d Z ddZ ddZ 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)rrrFrrrmake_mock_squeezer5s  z&ExpandingButtonTest.make_mock_squeezerzidlelib.squeezer.HovertipZautospeccCs|}|jj}tddd|}||jd||j||d|dv|| ddd| d | d t rd nd }| || ||jd |j|ttd|jdd }| d|dS)z1Test the simplest creation of an ExpandingButton.rYTAGSriz50 linesr rHrnr,zz 23r()Z hover_delayrz right-clickN)rrCr r rrxZmasterrZcgetroZassertInbindrZisAquaTkrarbr call_argslower)rZ MockHovertiprFrDexpandingbuttonZright_button_codeZ tooltip_textrrrrW?szExpandingButtonTest.test_initcCs|}tddd|}|j}|jd|d|j|_|jtd}||d||ddd | d }||d|d|| ddd|f||j j j d |j j |dS) zTest the expand event.rYrrirHZwindowrtNrnzTEXT end-1cr()rr r window_create base_textryrrroindexZ tag_nextrangerVremoverarb)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 n1s0Y||d ||jdd d td.}d|j _ d|j _ |j t d }Wd n1s0Y||d ||jdd |d S)z@Test that expanding very long output asks user for confirmation.airrirHrzidlelib.squeezer.messageboxFrtNrvrr#T)rr Zset_is_dangerousrZ is_dangerousr rrrZ askokcancelr^Zaskyesnoryrrro)rrFr rrDZ mock_msgboxrzrrrtest_expand_dangerous_oupput|s(  ,  , z0ExpandingButtonTest.test_expand_dangerous_oupputcCsp|}tddd|}t|_t|_|jtd}||d||jjd||jjd|jddS)zTest the copy event.rYrrirtNr() rr rZclipboard_clearZclipboard_appendcopyrrarb)rrFrrzrrr test_copys zExpandingButtonTest.test_copycCs|}tddd|}t|_tdtdB}|jtd||jd||j dd dWd n1sr0Yd S) zTest the view event.rYrrizidlelib.squeezer.view_textrrtr(rr&N) rr rZ selection_ownrrviewrrar)rrFrZmock_view_textrrr test_views zExpandingButtonTest.test_viewcCs|}tddd|}tdp}t}||_t}d|_d|_|j|d||j j t |j |j D]^}}|j j |tdqfWdn1s0YdS) zTest the context menu.rYrriz tkinter.Menur0rt)labelZcommandN)rr rrr^xyZcontext_menu_eventrZ add_commandrarcZ rmenu_specsZassert_any_callr )rrFrZ mock_MenuZ mock_menuZ mock_eventrdatarrr test_rmenus   zExpandingButtonTest.test_rmenuN) r;r<r=r>rrrrWrrrrrrrrrr1s   (r__main__r&) verbosity)%r>textwraprtkinterrrZunittestZ unittest.mockrrrrr Z test.supportr Zidlelib.configr Zidlelib.squeezerr r rZidlelibrZidlelib.textviewrZidlelib.tooltiprZidlelib.pyshellrr_rZTestCaserr?rr;rrrrrs(       /`*