JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB YI~dxN@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)NZguicsdS)N)Zupdate_idletasksZdestroy)rootrD/opt/alt/python37/lib64/python3.7/idlelib/idle_test/test_squeezer.py cleanup_rootsz&get_test_tk_root..cleanup_root)r rZwithdraw addCleanup)Z test_instancerr)rrget_test_tk_roots   rc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)CountLinesTestcCs||t||S)N) assertEqualr )selfexpectedtext linewidthrrrcheck%szCountLinesTest.checkcCs|tdddS)Nr)rr )rrrrtest_count_empty+szCountLinesTest.test_count_emptycCs|tdddS)Nz text)rr )rrrr!test_count_begins_with_empty_line/sz0CountLinesTest.test_count_begins_with_empty_linecCs|tdddS)Nztext )rr )rrrrtest_count_ends_with_empty_line3sz.CountLinesTest.test_count_ends_with_empty_linecCs|tdddS)Nz1 2 3 )rr )rrrrtest_count_several_lines7sz'CountLinesTest.test_count_several_linescCs4|jdddd|jdddd|jdddddS) Nr$ P)rrrr"z z )r)rrrrtest_empty_lines;szCountLinesTest.test_empty_linescCs$|jdddd|jdddddS)Nr&Zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar))rrrzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa )r)rrrrtest_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))rrrr(( r*)rr)rrrrr$test_several_lines_different_lengthsDsz3CountLinesTest.test_several_lines_different_lengthsN) __name__ __module__ __qualname__rr!r#r%r'r+r,r3rrrrr#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_widgetrZperZbottom)rwith_text_widgeteditwin text_widgetrrrmake_mock_editor_windowTs z$SqueezerTest.make_mock_editor_windowNcCs|dkr|}t|}|S)N)r=r)rZ editor_windowsqueezerrrrmake_squeezer_instance`sz#SqueezerTest.make_squeezer_instancecCs0|dkrt|}t|}d|d<|dd|S)N)ZCourierr*ZfontZiomarkz1.0)rrmark_set)rrr<rrrr9gs  zSqueezerTest.make_text_widgetcCs6t|||}t|||||tj||||dS)N)r Z GetOptionZ SetOptionr)rZ configTypesectionoptionvalueprev_valrrr set_idleconf_option_with_cleanuposz-SqueezerTest.set_idleconf_option_with_cleanupc Csz|}||}xbdD]Z\}}}|j|||d:t|}t|d|||||WdQRXWdQRXqWdS)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&)z 'aa\t' * 20r)r")z 'aa\t' * 21r)r&)z 'aa\t' * 20r/) text_code line_widthrr8)r=r?ZsubTestevalrobjectr count_lines)rr;r>rGrHrrrrrtest_count_linesus   zSqueezerTest.test_count_linescCs2|}||}||j|||jgdS)N)r=r?ZassertIsr;rexpandingbuttons)rr;r>rrr test_inits zSqueezerTest.test_initcCs|}xtdddddgD]`}ttd|_}||}||j|dt||jd||d|t |j d qWdS) Nr TEXTz LONG TEXTiaLMANY_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) r=rSENTINEL_VALUEwriter?rr; call_countassert_called_withlenrM)rr;r orig_writer>rrrtest_write_no_tagss  zSqueezerTest.test_write_no_tagscCsxzdddddgD]f}|}t|j_|j}||}||j|dt||jd||d|t |j dqWdS) Nr rOz LONG TEXTiaLMANY_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 stderrr$r) r=rQrRrPr?rr;rSrTrUrM)rrr;rVr>rrrtest_write_not_stdouts  z"SqueezerTest.test_write_not_stdoutcCs|}xndD]f}ttd|_}||}d|_||j|dt||jd| |d|t |j dqWxjddd gD]Z}ttd|_}||}d|_||j|dd||jd|t |j dqWdS) N)r rO)rP2stdoutr$rz LONG TEXTiaLMANY_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 ) r=rrQrRr?auto_squeeze_min_linesrr;rSrTrUrM)rr;rrVr>rrrtest_write_stdouts"    zSqueezerTest.test_write_stdoutcCsd|jdd}|j}||}d|_tdd|_|dd||dd d |t |j d dS) NT)r:r-r.)rPzTEXT TEXT TEXT TEXT TEXT TEXT r[z1.0endr(r$) r=rr?r\rrKrRrgetrUrM)rr;r<r>rrrtest_auto_squeezes    zSqueezerTest.test_auto_squeezecCs xdD]}|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 qWdS)N)r[rXT)r:r.)rPz1.0z SOME TEXT insertr^z SOME TEXT r)eventbreakz r$z SOME TEXT)r=rr?rrKrar@rr_rUrMsqueeze_current_text_eventsexpand)rZtag_namer;r<r>retvalrrrtest_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)NT)r:r.)rPz1.0z SOME TEXT ZTAGrar^z SOME TEXT r)rbrc) r=rr?rrKrar@rr_rUrMrd)rr;r<r>rgrrr/test_squeeze_current_text_event_no_allowed_tagss     zrgrrr/test_squeeze_text_before_existing_squeezed_texts$      zZorig_auto_squeeze_min_linesZnew_auto_squeeze_min_linesrrr test_reloads   zSqueezerTest.test_reloadcCs tdS)N)rro)rrrr!test_reload_no_squeezer_instances,sz.SqueezerTest.test_reload_no_squeezer_instances)F)N)N)r4r5r6r=r?r9rErLrNrWrYr]r`rhrirlrprqrrrrr7Rs    r7c@sPeZdZddZededddZddZd d Zd d Z d dZ ddZ dS)ExpandingButtonTestcCs$t|}t}t||j_d|_|S)NrZ)rrrr;rr\)rrr>rrrmake_mock_squeezer5s  z&ExpandingButtonTest.make_mock_squeezerzidlelib.squeezer.Hovertip)autospeccCs|}|jj}tddd|}||jd||j||d|dk|| ddd| d | d t rd nd }| || ||jd |j|ttd|jdd }| d|dS)NrOTAGSrZz50 linesrz1.0r^r(zz 23r$)Z hover_delayrz right-click)rsr;rr rreZmasterrkZcgetr_ZassertInZbindrZisAquaTkrSrTr call_argslower)rZ MockHovertipr>r<expandingbuttonZright_button_codeZ tooltip_textrrrrN?szExpandingButtonTest.test_initcCs|}tddd|}|j}|jd|d|j|_|jtd}||d||ddd| d }||d|d|| ddd|f||j j j d |j j |dS) NrOrurZz1.0)window)rbr^zTEXT zend-1cr$)rsr r window_create base_textrfrrr_indexZ tag_nextrangerMremoverSrT)rr>rzr<rgZtext_end_indexrrr test_expand\s   zExpandingButtonTest.test_expandc Cs|}dd}t|dd|}|||j|j}|jd|d|j|_td$}d|j _ d|j _ |j t d }WdQRX||d ||jdd d td$}d |j _ d |j _ |j t d }WdQRX||d||jdd |dS)NairurZz1.0)r{zidlelib.squeezer.tkMessageBoxF)rbrczend-1cr T)rsr Zset_is_dangerousrkZ is_dangerousrr|r}rZ askokcancelrPZaskyesnorfrrr_)rr>rrzr<Z mock_msgboxrgrrrtest_expand_dangerous_oupput|s(     z0ExpandingButtonTest.test_expand_dangerous_oupputcCsp|}tddd|}t|_t|_|jtd}||d||jjd||jjd|jddS)NrOrurZ)rbr$) rsr rZclipboard_clearZclipboard_appendcopyrrSrT)rr>rzrgrrr test_copys zExpandingButtonTest.test_copyc Csl|}tddd|}t|_tdtd8}|jtd||jd||j dd dWdQRXdS) NrOrurZzidlelib.squeezer.view_text)rt)rbr$rr") rsr rZ selection_ownrrZviewrrSrx)rr>rzZmock_view_textrrr test_views zExpandingButtonTest.test_viewc Cs|}tddd|}tdj}t}||_t}d|_d|_|j|d||j j t |j x"|j D]^}}|j j |tdqhWWdQRXdS)NrOrurZz tkinter.Menur*)rb)labelZcommand)rsr rrrPxyZcontext_menu_eventrZ add_commandrSrUZ rmenu_specsZassert_any_callr )rr>rzZ mock_MenuZ mock_menuZ mock_eventrdatarrr test_rmenus    zExpandingButtonTest.test_rmenuN) r4r5r6rsrrrNrrrrrrrrrrr1s  (rr__main__r") verbosity)$textwraprZtkinterrrZunittestZ unittest.mockrrrrr Z test.supportr Zidlelib.configr Zidlelib.squeezerr r rZidlelibrZidlelib.textviewrZidlelib.tooltiprZidlelib.pyshellrrQrZTestCaserr7rrr4rmrrrrs&       /`*