3 Õì2aeUã@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#dd�dS)é)Ú namedtuple)ÚTextÚTkN)ÚMockÚNonCallableMagicMockÚpatchÚsentinelÚANY)Úrequires)ÚidleConf)Úcount_lines_with_wrappingÚExpandingButtonÚSqueezer)Úmacosx)Ú view_text)ÚHovertip)ÚPyShellcs0tdƒtƒ‰ˆjƒ‡fdd„}|j|ƒˆS)NZguicsˆjƒˆjƒdS)N)Zupdate_idletasksZdestroy©)Úrootrú2/opt/alt/python36/lib64/python3.6/test_squeezer.pyÚ cleanup_rootsz&get_test_tk_root..cleanup_root)r rZwithdrawÚ addCleanup)Z test_instancerr)rrÚget_test_tk_roots   rc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚCountLinesTestcCs|j|t|||ƒƒS)N)Ú assertEqualr )ÚselfÚexpectedÚtextÚ linewidthÚtabwidthrrrÚcheck#szCountLinesTest.checkcCs|jtdƒdƒdS)NÚr)rr )rrrrÚtest_count_empty)szCountLinesTest.test_count_emptycCs|jtdƒdƒdS)Nz texté)rr )rrrrÚ!test_count_begins_with_empty_line-sz0CountLinesTest.test_count_begins_with_empty_linecCs|jtdƒdƒdS)Nztext é)rr )rrrrÚtest_count_ends_with_empty_line1sz.CountLinesTest.test_count_ends_with_empty_linecCs|jtdƒdƒdS)Nz1 2 3 é)rr )rrrrÚtest_count_several_lines5sz'CountLinesTest.test_count_several_linescCs|jddddd�|jddddd�|jddddd�|jddddd�|jddddd�|jddd dd�|jd dd dd�|jddd dd�|jddddd�|jddddd�|jddddd�|jddd dd�|jddd dd�|jddddd�dS)Nr%ú éé)rrrrr#r'éé é é é éé r)z z z z z z z z z z z z z )r )rrrrÚtest_tab_width9szCountLinesTest.test_tab_widthN) Ú__name__Ú __module__Ú __qualname__r r"r$r&r(r3rrrrr!s rc@s²eZdZdd„Zd$dd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZeddƒZeejejejejfdd„ƒZed d!„ƒZd"d#„ZdS)%Ú SqueezerTestcCstƒ}t|_|S)N)rrÚ __class__)rÚeditwinrrrÚmake_mock_editor_windowSsz$SqueezerTest.make_mock_editor_windowNcCs|dkr|jƒ}t|ƒS)N)r:r)rZ editor_windowrrrÚmake_squeezer_instance[sz#SqueezerTest.make_squeezer_instancecCs$xd D]\}}|j||d�qWdS)Nr+éPr%éOr*r'éx)rr©r+r<©r%r=©r*r<©r'r>)r?r@rArB)Ú_test_count_lines_helper)rrrrrrÚtest_count_linesaszSqueezerTest.test_count_linesc s†d‰d}d}||j_|ˆd|||jj_||ddœ‰‡fdd„|j_tƒ}‡fdd„}||j_td |ƒ}|jƒ|j |j ƒdS) Nr-r#r%)ZborderZpadxZfontcsˆ|S)Nr)Úopt)Ú text_optsrrÚ|szDSqueezerTest._prepare_mock_editwin_for_count_lines..cs|dkr ˆStdƒ‚dS)NÚ0z%measure should only be called on '0'!)Ú ValueError)Úchar)Ú CHAR_WIDTHrrÚmeasure�szCSqueezerTest._prepare_mock_editwin_for_count_lines..measurezidlelib.squeezer.Font) Zget_tk_tabwidthÚ return_valuerZ winfo_widthÚcgetrrLrÚstartrÚstop) rr9rrZ BORDER_WIDTHZ PADDING_WIDTHZ mock_fontrLZpatcherr)rKrFrÚ%_prepare_mock_editwin_for_count_linesks  z2SqueezerTest._prepare_mock_editwin_for_count_linesc Csh|jƒ}|j|||ƒ|j|ƒ}ttd�}d}td|ƒ�&|j|j|ƒtƒ|j|||ƒWdQRXdS)N)rMÚTEXTz*idlelib.squeezer.count_lines_with_wrapping) r:rQr;rÚSENTINEL_VALUErÚassertIsÚ count_linesÚassert_called_with)rrrr9ÚsqueezerZmock_count_linesrrrrrCŠs  z%SqueezerTest._test_count_lines_helpercCs2|jƒ}|j|ƒ}|j|j|ƒ|j|jgƒdS)N)r:r;rTr9rÚexpandingbuttons)rr9rWrrrÚ test_init—s zSqueezerTest.test_initcCs†|jƒ}xxddddddgD]`}ttd�|_}|j|ƒ}|j|jj|fƒtƒ|j|jdƒ|j|fƒ|jt |j ƒd ƒqWdS) Nr!rRz LONG TEXTièz MANY_LINES éd)rMr%r) r:rrSÚwriter;rr9Ú call_countrVÚlenrX)rr9rÚ orig_writerWrrrÚtest_write_no_tagsžs  zSqueezerTest.test_write_no_tagscCs„x~ddddddgD]f}|jƒ}t|j_|j}|j|ƒ}|j|jj|dƒtƒ|j|jdƒ|j|dƒ|jt |j ƒd ƒqWdS) Nr!rRz LONG TEXTièz MANY_LINES rZÚstderrr%r) r:rSr[rMr;rr9r\rVr]rX)rrr9r^rWrrrÚtest_write_not_stdoutªs  z"SqueezerTest.test_write_not_stdoutcCsü|jƒ}|j|ddd�xndD]f}ttd�|_}|j|ƒ}d|_|j|jj|dƒtƒ|j|j d ƒ|j |dƒ|jt |j ƒd ƒqWxnd d d dgD]Z}ttd�|_}|j|ƒ}d|_|j|jj|dƒdƒ|j|j d ƒ|jt |j ƒd ƒqšWdS)Nr<r*)rrr!rR)rMé2Ústdoutr%rz LONG TEXTièz MANY_LINES rZ)r!rR) r:rQrrSr[r;Úauto_squeeze_min_linesrr9r\rVr]rX)rr9rr^rWrrrÚtest_write_stdout¸s&     zSqueezerTest.test_write_stdoutcCs€t|ƒ}t|ƒ}|jddƒ|jƒ}||_|j|ƒ}d|_tdd�|_|j dddƒ|j |j ddƒd ƒ|j t |j ƒd ƒdS) NÚiomarkz1.0r,r1)rMzTEXT rcÚendÚ r%)rrÚmark_setr:rr;rdrrUr[rÚgetr]rX)rrÚ text_widgetr9rWrrrÚtest_auto_squeezeÒs   zSqueezerTest.test_auto_squeezecCs,t|ƒ}�xdD�]}t|ƒ}|jddƒ|jƒ}||_|j_|j|ƒ}tdd�|_ |j dd|ƒ|jddƒ|j |j dd ƒd ƒ|j t |jƒd ƒ|jtƒd �}|j |d ƒ|j |j dd ƒdƒ|j t |jƒdƒ|j |jd jdƒ|jd jtƒd �|j |j dd ƒd ƒ|j t |jƒd ƒqWdS)Nrcr`rfz1.0r1)rMz SOME TEXT Úinsertrgz SOME TEXT r)ÚeventÚbreakz r%z SOME TEXT)rcr`)rrrir:rÚperÚbottomr;rrUrmrrjr]rXÚsqueeze_current_text_eventÚsÚexpand)rrZtag_namerkr9rWÚretvalrrrÚtest_squeeze_current_text_eventâs(     z,SqueezerTest.test_squeeze_current_text_eventcCsÌt|ƒ}t|ƒ}|jddƒ|jƒ}||_|j_|j|ƒ}tdd�|_ |j dddƒ|jddƒ|j |j ddƒd ƒ|j t |jƒd ƒ|jtƒd �}|j |d ƒ|j |j ddƒd ƒ|j t |jƒd ƒdS) Nrfz1.0r1)rMz SOME TEXT ZTAGrmrgz SOME TEXT r)rnro)rrrir:rrprqr;rrUrmrrjr]rXrr)rrrkr9rWrurrrÚ/test_squeeze_current_text_event_no_allowed_tagss     zs zSqueezerTest._make_sigcCs|dd…\}}|j||ŽS)Nr#éþÿÿÿ)r‚)r|Z mock_call_objÚargsÚkwargsrrrÚget_GetOption_signatureFsz$SqueezerTest.get_GetOption_signaturecCs8|jtjtƒtjddddƒtjƒ|jtjdƒdS)NÚmainrzauto-squeeze-min-linesZ42é*)ZassertIsInstancerrdÚintr Z SetOptionÚreloadr)rrrrÚ test_reloadKszSqueezerTest.test_reload)N)r4r5r6r:r;rDrQrCrYr_rarerlrvrwrzrr{Ú classmethodrZ NOT_GIVENr‚r†r‹rrrrr7Qs,    " r7c@sPeZdZdd„Zeded�dd„ƒZdd„Zd d „Zd d „Z d d„Z dd„Z dS)ÚExpandingButtonTestcCs$t|ƒ}tƒ}t|ƒ|j_d|_|S)Nrb)rrrr9rrd)rrrWrrrÚmake_mock_squeezerWs  z&ExpandingButtonTest.make_mock_squeezerzidlelib.squeezer.Hovertip)ÚautospeccCsÖ|jƒ}|jj}tddd|ƒ}|j|jdƒ|j|j|ƒ|jd|jdƒkƒ|j|j ddƒdƒ|j d |j ƒƒd t j ƒr€d nd }|j ||j ƒƒ|j|jd ƒ|j|ttd�|jdd }|j d|jƒƒdS)NrRÚTAGSrbz50 linesrz1.0rgrhzz Ú2Ú3r%)Z hover_delayrz right-click)rŽr9rr rrsZmasterryrNrjZassertInZbindrZisAquaTkr\rVr Ú call_argsÚlower)rZ MockHovertiprWrkÚexpandingbuttonZright_button_codeZ tooltip_textrrrrYaszExpandingButtonTest.test_initcCsº|jƒ}tddd|ƒ}|j}|jd|d�|j|_|jtƒd�}|j|dƒ|j|jddƒdƒ|j d ƒ}|j|jd|ƒdƒ|j|j ddƒd|fƒ|j|j j j d ƒ|j j j|ƒdS) NrRr�rbz1.0)Úwindow)rnrgzTEXT zend-1cr%)rŽr rÚ window_createÚ base_textrtrrrjÚindexZ tag_nextrangerXÚremover\rV)rrWr•rkruZtext_end_indexrrrÚ test_expand~s   zExpandingButtonTest.test_expandcCsú|jƒ}dd}t|dd|ƒ}|jƒ|j|jƒ|j}|jd|d�|j|_tdƒ�$}d |j _ d |j _ |j t ƒd �}WdQRX|j|d ƒ|j|jjdd ƒd ƒtdƒ�$}d|j _ d|j _ |j t ƒd �}WdQRX|j|dƒ|j|jjdd ƒ|ƒdS)NÚar-r,r�rbz1.0)r–zidlelib.squeezer.tkMessageBoxF)rnrozend-1cr!Ti †)rŽr Zset_is_dangerousryZ is_dangerousrr—r˜rZ askokcancelrMZaskyesnortrrrj)rrWrr•rkZ mock_msgboxrurrrÚtest_expand_dangerous_oupput�s(     z0ExpandingButtonTest.test_expand_dangerous_oupputcCsp|jƒ}tddd|ƒ}tƒ|_tƒ|_|jtƒd�}|j|dƒ|j|jjdƒ|j|jjdƒ|jjdƒdS)NrRr�rb)rnr%) rŽr rZclipboard_clearZclipboard_appendÚcopyrr\rV)rrWr•rurrrÚ test_copyÆs zExpandingButtonTest.test_copyc Csl|jƒ}tddd|ƒ}tƒ|_tdtd��8}|jtƒd�|j|jdƒ|j|j dd dƒWdQRXdS) NrRr�rbzidlelib.squeezer.view_text)r�)rnr%rr#) rŽr rZ selection_ownrrZviewrr\r“)rrWr•Zmock_view_textrrrÚ test_viewÚs zExpandingButtonTest.test_viewc Cs’|jƒ}tddd|ƒ}tdƒ�j}tƒ}||_tƒ}d|_d|_|j|d�|j|j j t |j ƒƒx"|j D]^}}|j j |td�qhWWdQRXdS)NrRr�rbz tkinter.Menur-)rn)ÚlabelZcommand)rŽr rrrMÚxÚyZcontext_menu_eventrZ add_commandr\r]Z rmenu_specsZassert_any_callr )rrWr•Z mock_MenuZ mock_menuZ mock_eventr¡ÚdatarrrÚ test_rmenuës    zExpandingButtonTest.test_rmenuN) r4r5r6rŽrrrYr›r�rŸr r¥rrrrr�Ss )r�Ú__main__r#)Ú verbosity)$Ú collectionsrZtkinterrrZunittestZ unittest.mockrrrrr Z test.supportr Zidlelib.configr Zidlelib.squeezerr r rZidlelibrZidlelib.textviewrZidlelib.tooltiprZidlelib.pyshellrrSrZTestCaserr7r�r4r‡rrrrÚs(       0*