a  zetN@sddlmZddlmZmZddlZddlmZmZm Z m Z m Z ddl m Z ddlmZddlmZmZmZddlmZdd lmZdd lmZdd lmZe jZd d ZGdddejZGdddejZ GdddejZ!e"dkrej#dddS))dedent)TextTkN)MockNonCallableMagicMockpatchsentinelANY)requires)idleConf)count_lines_with_wrappingExpandingButtonSqueezer)macosx) view_text)Hovertip)PyShellcs0tdtfdd}||S)NZguicsdSN)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@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)CountLinesTestcCs||t||Sr assertEqualr )selfexpectedtext linewidthrrrcheck%szCountLinesTest.checkcCs|tdddS)Nrrrrrrtest_count_empty+szCountLinesTest.test_count_emptycCs|tdddS)Nz textrr$rrr!test_count_begins_with_empty_line/sz0CountLinesTest.test_count_begins_with_empty_linecCs|tdddS)Nztext rr$rrrtest_count_ends_with_empty_line3sz.CountLinesTest.test_count_ends_with_empty_linecCs|tdddS)Nz1 2 3 rr$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__r"r%r'r)r+r2r3r:rrrrr#src@seZdZd!ddZd"ddZd#ddZd d Zd d Zd dZddZ ddZ ddZ ddZ ddZ ddZddZddZdd ZdS)$ SqueezerTestFcCs:t}d|_|r6t||_|j|jd}||_|j_|S)Nr-r)rwidthrrmake_text_widgetr ZperZbottom)rwith_text_widgeteditwin text_widgetrrrmake_mock_editor_windowTs z$SqueezerTest.make_mock_editor_windowNcCs|dur|}t|}|Sr)rDr)rZ editor_windowsqueezerrrrmake_squeezer_instance`sz#SqueezerTest.make_squeezer_instancecCs0|durt|}t|}d|d<|dd|S)N)ZCourierr0ZfontZiomark1.0)rrmark_set)rrrCrrrr@gs  zSqueezerTest.make_text_widgetcCs6t|||}t|||||tj||||dSr)r Z GetOptionZ SetOptionr)rZ configTypesectionoptionvalueZprev_valrrr set_idleconf_option_with_cleanupos z-SqueezerTest.set_idleconf_option_with_cleanupc Cs|}||}dD]\}}}|j|||dXt|}t|d|"||||Wdn1sp0YWdq1s0YqdS)N))z'\n'r-r()z'\n' * 3r-r*)z'a' * 40 + '\n'r-r()z'a' * 80 + '\n'r-r()z'a' * 200 + '\n'r-r*) 'aa\t' * 20r-r&)z 'aa\t' * 21r-r*)rMr6) text_code line_widthrr?)rDrFZsubTestevalrobjectr count_lines)rrBrErOrPrr rrrtest_count_linesus  zSqueezerTest.test_count_linescCs2|}||}||j|||jgdSr)rDrFZassertIsrBrexpandingbuttons)rrBrErrr test_inits zSqueezerTest.test_initcCs~|}dddddfD]`}ttd|_}||}||j|dt||jd||d|t |j d qdS) Nr#TEXT LONG TEXTLMANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES  return_valuerr(r) rDrSENTINEL_VALUEwriterFrrB call_countassert_called_withlenrUrrBr orig_writerErrrtest_write_no_tagss  zSqueezerTest.test_write_no_tagscCs|dddddfD]f}|}t|j_|j}||}||j|dt||jd||d|t |j dqdS) Nr#rWrXrYrZstderrr(r) rDr]r^r\rFrrBr_r`rarU)rr rBrcrErrrtest_write_not_stdouts  z"SqueezerTest.test_write_not_stdoutcCs|}dD]f}ttd|_}||}d|_||j|dt||jd| |d|t |j dq ddd fD]Z}ttd|_}||}d|_||j|dd||jd|t |j dqdS) N)r#rWr[2stdoutr(rrXrYrZ) rDrr]r^rFauto_squeeze_min_linesrrBr_r`rarUrbrrrtest_write_stdouts$   zSqueezerTest.test_write_stdoutcCsd|jdd}|j}||}d|_tdd|_|dd||dd d |t |j d dS) NTrAr4r5r[zTEXT TEXT TEXT TEXT TEXT TEXT rhrGendr,r() rDr rFrirrSr^rgetrarU)rrBrCrErrrtest_auto_squeezes    zSqueezerTest.test_auto_squeezecCsdD]}|jdd}|j}||}tdd|_|dd||dd||dd d |t |j d |j td }||d ||dd d|t |j d||j d j d|j d j td ||dd d |t |j d qdS)N)rhreTrkr5r[rG SOME TEXT insertrl SOME TEXT reventbreakr/r(z SOME TEXT)rDr rFrrSrprHrrmrarUsqueeze_current_text_eventsexpand)rZtag_namerBrCrEretvalrrrtest_squeeze_current_text_events"     z,SqueezerTest.test_squeeze_current_text_eventcCs|jdd}|j}||}tdd|_|ddd|dd||dd d |t |j d |j td }||d ||dd d |t |j d dS)NTrkr5r[rGroZTAGrprlrqrrrrt) rDr rFrrSrprHrrmrarUrurrBrCrErxrrr/test_squeeze_current_text_event_no_allowed_tagss     zRs    r>c@sPeZdZddZededddZddZd d Zd d Z d dZ ddZ dS)ExpandingButtonTestcCs$t|}t}t||j_d|_|S)Nrg)rrrrBr ri)rrrErrrmake_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)NrWTAGSrgz50 linesr rGrlr,zz 23r()Z hover_delayrz right-click)rrBr r rrvZmasterr}ZcgetrmZassertInbindrZisAquaTkr_r`r call_argslower)rZ MockHovertiprErCexpandingbuttonZright_button_codeZ tooltip_textrrrrV?szExpandingButtonTest.test_initcCs|}tddd|}|j}|jd|d|j|_|jtd}||d||ddd| d }||d|d|| ddd|f||j j j d |j j |dS) NrWrrgrGZwindowrrrlzTEXT end-1cr()rr r window_create base_textrwrrrmindexZ tag_nextrangerUremover_r`)rrErrCrxZtext_end_indexrrr test_expand\s  zExpandingButtonTest.test_expandcCs"|}dd}t|dd|}|||j|j}|jd|d|j|_td.}d|j _ d|j _ |j t d }Wdn1s0Y||d ||jdd d td.}d |j _ d |j _ |j t d }Wdn1s0Y||d||jdd |dS)NairrgrGrzidlelib.squeezer.messageboxFrrrtrr#T)rr Zset_is_dangerousr}Z is_dangerousr rrrZ askokcancelr\Zaskyesnorwrrrm)rrEr rrCZ mock_msgboxrxrrrtest_expand_dangerous_oupput|s(  ,  , z0ExpandingButtonTest.test_expand_dangerous_oupputcCsp|}tddd|}t|_t|_|jtd}||d||jjd||jjd|jddS)NrWrrgrrr() rr rZclipboard_clearZclipboard_appendcopyrr_r`)rrErrxrrr test_copys zExpandingButtonTest.test_copycCs|}tddd|}t|_tdtdB}|jtd||jd||j dd dWdn1sr0YdS) NrWrrgzidlelib.squeezer.view_textrrrr(rr&) rr rZ selection_ownrrviewrr_r)rrErZmock_view_textrrr test_views zExpandingButtonTest.test_viewcCs|}tddd|}tdp}t}||_t}d|_d|_|j|d||j j t |j |j D]^}}|j j |tdqfWdn1s0YdS)NrWrrgz tkinter.Menur0rr)labelZcommand)rr rrr\xyZcontext_menu_eventrZ add_commandr_raZ rmenu_specsZassert_any_callr )rrErZ mock_MenuZ mock_menuZ mock_eventrdatarrr test_rmenus   zExpandingButtonTest.test_rmenuN) r;r<r=rrrrVrrrrrrrrrr1s   (r__main__r&) verbosity)$textwraprtkinterrrZunittestZ unittest.mockrrrrr Z test.supportr Zidlelib.configr Zidlelib.squeezerr r rZidlelibrZidlelib.textviewrZidlelib.tooltiprZidlelib.pyshellrr]rZTestCaserr>rr;rrrrrs&       /`*