a 9êdgtNã@søddlmZddlmZmZddlZddlmZmZm Z m Z m Z ddl m Z ddlmZddlmZmZmZddlmZdd lmZdd lmZdd lmZe jZd d „ZGdd„dejƒZGdd„dejƒZ Gdd„dejƒZ!e"dkrôej#dddS)é)Údedent)ÚTextÚTkN)ÚMockÚNonCallableMagicMockÚpatchÚsentinelÚANY)Úrequires)ÚidleConf)Úcount_lines_with_wrappingÚExpandingButtonÚSqueezer)Úmacosx)Ú view_text)ÚHovertip)ÚPyShellcs0tdƒtƒ‰ˆ ¡‡fdd„}| |¡ˆS)NZguicsˆ ¡ˆ ¡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@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚCountLinesTestcCs| |t||ƒ¡Sr©Ú assertEqualr )ÚselfÚexpectedÚtextÚ linewidthrrrÚcheck%sþzCountLinesTest.checkcCs| tdƒd¡dS)NÚrr©rrrrÚtest_count_empty+szCountLinesTest.test_count_emptycCs| tdƒd¡dS)Nz textérr$rrrÚ!test_count_begins_with_empty_line/sz0CountLinesTest.test_count_begins_with_empty_linecCs| tdƒd¡dS)Nztext érr$rrrÚtest_count_ends_with_empty_line3sz.CountLinesTest.test_count_ends_with_empty_linecCs| tdƒd¡dS)Nz1 2 3 érr$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__r"r%r'r)r+r2r3r:rrrrr#src@sŠeZdZd!dd„Zd"dd„Zd#dd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd „ZdS)$Ú SqueezerTestFcCs:tƒ}d|_|r6t|ƒ|_|j|jd}||_|j_|S)Nr-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|ƒ}|Sr)rDr)rZ editor_windowÚsqueezerrrrÚmake_squeezer_instance`sz#SqueezerTest.make_squeezer_instancecCs0|durt|ƒ}t|ƒ}d|d<| dd¡|S)N)ZCourierr0ZfontZiomarkú1.0)rrÚmark_set)rrrCrrrr@gs  zSqueezerTest.make_text_widgetcCs6t |||¡}t ||||¡| tj||||¡dSr)r Z GetOptionZ SetOptionr)rZ configTypeÚsectionÚoptionÚvalueZprev_valrrrÚ set_idleconf_option_with_cleanupos ÿz-SqueezerTest.set_idleconf_option_with_cleanupc Csž| ¡}| |¡}dD]‚\}}}|j|||dXt|ƒ}t |d|¡"| | |¡|¡Wdƒn1sp0YWdƒq1sŽ0YqdS)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?)rDrFZsubTestÚevalrÚobjectrÚ count_lines)rrBrErOrPrr rrrÚtest_count_linesus  þzSqueezerTest.test_count_linescCs2| ¡}| |¡}| |j|¡| |jg¡dSr)rDrFZassertIsrBrÚexpandingbuttons)rrBrErrrÚ test_init‹s zSqueezerTest.test_initcCs~| ¡}dddddfD]`}ttd|_}| |¡}| |j |d¡t¡| |jd¡| |d¡| t |j ƒd ¡qdS) Nr#ÚTEXTú LONG TEXTéèáLMANY_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) rDrÚSENTINEL_VALUEÚwriterFrrBÚ call_countÚassert_called_withÚlenrU©rrBr Ú orig_writerErrrÚtest_write_no_tags’s  zSqueezerTest.test_write_no_tagscCs|dddddfD]f}| ¡}t|j_|j}| |¡}| |j |d¡t¡| |jd¡| |d¡| t |j ƒd¡qdS) Nr#rWrXrYrZÚstderrr(r) rDr]r^r\rFrrBr_r`rarU)rr rBrcrErrrÚtest_write_not_stdoutžs ÿ z"SqueezerTest.test_write_not_stdoutcCsà| ¡}dD]f}ttd|_}| |¡}d|_| |j |d¡t¡| |jd¡|  |d¡| t |j ƒd¡q ddd fD]Z}ttd|_}| |¡}d|_| |j |d¡d¡| |jd¡| t |j ƒd¡q€dS) N)r#rWr[é2Ústdoutr(rrXrYrZ) rDrr]r^rFÚauto_squeeze_min_linesrrBr_r`rarUrbrrrÚtest_write_stdout¬s$ ÿ  zSqueezerTest.test_write_stdoutcCsd|jdd}|j}| |¡}d|_tdd|_| dd¡| | dd ¡d ¡| t |j ƒd ¡dS) NT©rAr4r5r[zTEXT TEXT TEXT TEXT TEXT TEXT rhrGÚendr,r() rDr rFrirrSr^rÚgetrarU)rrBrCrErrrÚtest_auto_squeezeÄs    zSqueezerTest.test_auto_squeezecCsdD]ú}|jdd}|j}| |¡}tdd|_| dd|¡| dd¡| | dd ¡d ¡| t |j ƒd ¡|j tƒd }| |d ¡| | dd ¡d¡| t |j ƒd¡| |j d j d¡|j d j tƒd | | dd ¡d ¡| t |j ƒd ¡qdS)N)rhreTrkr5r[rGú SOME TEXT Úinsertrlú SOME TEXT r©ÚeventÚbreakr/r(z SOME TEXT)rDr rFrrSrprHrrmrarUÚsqueeze_current_text_eventÚsÚexpand)rZtag_namerBrCrEÚretvalrrrÚtest_squeeze_current_text_eventÐs"     z,SqueezerTest.test_squeeze_current_text_eventcCs¬|jdd}|j}| |¡}tdd|_| ddd¡| dd¡| | dd ¡d ¡| t |j ƒd ¡|j tƒd }| |d ¡| | dd ¡d ¡| t |j ƒd ¡dS)NTrkr5r[rGroZTAGrprlrqrrrrt) rDr rFrrSrprHrrmrarUru©rrBrCrErxrrrÚ/test_squeeze_current_text_event_no_allowed_tagsís     zRs    r>c@sPeZdZdd„Zededdd„ƒZdd„Zd d „Zd d „Z d d„Z dd„Z dS)ÚExpandingButtonTestcCs$t|ƒ}tƒ}t|ƒ|j_d|_|S)Nrg)rrrrBr ri)rrrErrrÚ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)NrWÚTAGSrgz50 linesr rGrlr,zz Ú2Ú3r()Z hover_delayrz right-click)r…rBr r rrvZmasterr}ZcgetrmZassertInÚbindrZisAquaTkr_r`r Ú call_argsÚlower)rZ MockHovertiprErCÚexpandingbuttonZright_button_codeZ tooltip_textrrrrV?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) NrWr‡rgrG©ZwindowrrrlzTEXT úend-1cr()r…r r Ú window_createÚ base_textrwrrrmÚindexZ tag_nextrangerUÚremover_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 }Wdƒn1sŠ0Y| |d ¡| |j dd ¡d ¡tdƒ.}d |j _ d |j _ |j t ƒd }Wdƒn1sò0Y| |d¡| |j dd ¡|¡dS)NÚai †r‡rgrGrŽzidlelib.squeezer.messageboxFrrrtrr#T)r…r Zset_is_dangerousr}Z is_dangerousr rr‘rZ askokcancelr\Zaskyesnorwrrrm)rrEr rrCZ mock_msgboxrxrrrÚtest_expand_dangerous_oupput|s(  ,  , z0ExpandingButtonTest.test_expand_dangerous_oupputcCsp| ¡}tddd|ƒ}tƒ|_tƒ|_|jtƒd}| |d¡| |jjd¡| |jjd¡|j d¡dS)NrWr‡rgrrr() r…r rZclipboard_clearZclipboard_appendÚcopyrr_r`)rrErrxrrrÚ test_copy¤s zExpandingButtonTest.test_copycCs€| ¡}tddd|ƒ}tƒ|_tdtdB}|jtƒd| |jd¡| |j dd d¡Wdƒn1sr0YdS) NrWr‡rgzidlelib.squeezer.view_textr†rrr(rr&) r…r rZ selection_ownrrÚviewrr_r‹)rrErZmock_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)NrWr‡rgz tkinter.Menur0rr)ÚlabelZcommand)r…r rrr\ÚxÚyZcontext_menu_eventrZ add_commandr_raZ rmenu_specsZassert_any_callr )rrErZ mock_MenuZ mock_menuZ mock_eventr›ÚdatarrrÚ test_rmenuÉs   ÿzExpandingButtonTest.test_rmenuN) r;r<r=r…rrrVr”r–r˜ršrŸrrrrr„1s   (r„Ú__main__r&)Ú verbosity)$ÚtextwraprÚtkinterrrZunittestZ unittest.mockrrrrr Z test.supportr Zidlelib.configr Zidlelib.squeezerr r rZidlelibrZidlelib.textviewrZidlelib.tooltiprZidlelib.pyshellrr]rZTestCaserr>r„r;rrrrrÚs&       /`*