B YI~dxN�@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)�)�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�D/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)rr�get_test_tk_roots   rc@sLeZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dS)�CountLinesTestcCs|�|t||��S)N)� assertEqualr )�self�expected�text� linewidthrrr�check%szCountLinesTest.checkcCs|�td�d�dS)N�r)rr )rrrr�test_count_empty+szCountLinesTest.test_count_emptycCs|�td�d�dS)Nz text�)rr )rrrr�!test_count_begins_with_empty_line/sz0CountLinesTest.test_count_begins_with_empty_linecCs|�td�d�dS)Nztext �)rr )rrrr�test_count_ends_with_empty_line3sz.CountLinesTest.test_count_ends_with_empty_linecCs|�td�d�dS)Nz1 2 3 �)rr )rrrr�test_count_several_lines7sz'CountLinesTest.test_count_several_linescCs4|jdddd�|jdddd�|jdddd�dS) Nr$� �P)rrrr"z � z )r)rrrr�test_empty_lines;szCountLinesTest.test_empty_linescCs$|jdddd�|jdddd�dS)Nr&Z�aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar))rrrz�aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa )r)rrrr�test_long_line@szCountLinesTest.test_long_linecCs`td�}|jd|dd�|jd|ddd�|jd|dd�|jd|d d�|jd |d d�dS) Nz� 13 characters 43 is the number of characters on this line 7 chars 13 characters�r))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@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_widgetrZperZbottom)r�with_text_widget�editwin� text_widgetrrr�make_mock_editor_windowTs z$SqueezerTest.make_mock_editor_windowNcCs|dkr|��}t|�}|S)N)r=r)rZ editor_window�squeezerrrr�make_squeezer_instance`sz#SqueezerTest.make_squeezer_instancecCs0|dkrt|�}t|�}d|d<|�dd�|S)N)ZCourierr*ZfontZiomarkz1.0)rr�mark_set)rrr<rrrr9gs  zSqueezerTest.make_text_widgetcCs6t�|||�}t�||||�|�tj||||�dS)N)r Z GetOptionZ SetOptionr)rZ configType�section�option�value�prev_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?ZsubTest�evalr�objectr� count_lines)rr;r>rGrHrrrrr�test_count_linesus   zSqueezerTest.test_count_linescCs2|��}|�|�}|�|j|�|�|jg�dS)N)r=r?ZassertIsr;r�expandingbuttons)rr;r>rrr� test_init�s zSqueezerTest.test_initcCs�|��}xtdddddgD]`}ttd�|_}|�|�}|�|j�|d�t�|�|jd�|�|d�|�t |j �d �qWdS) Nr �TEXTz LONG TEXTi�aLMANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES 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=r�SENTINEL_VALUE�writer?rr;� call_count�assert_called_with�lenrM)rr;r� orig_writer>rrr�test_write_no_tags�s  zSqueezerTest.test_write_no_tagscCs�xzdddddgD]f}|��}t|j_|j}|�|�}|�|j�|d�t�|�|jd�|�|d�|�t |j �d�qWdS) Nr rOz LONG TEXTi�aLMANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES 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>rrr�test_write_not_stdout�s  z"SqueezerTest.test_write_not_stdoutcCs�|��}xndD]f}ttd�|_}|�|�}d|_|�|j�|d�t�|�|jd�|� |d�|�t |j �d�qWxjddd gD]Z}ttd�|_}|�|�}d|_|�|j�|d�d�|�|jd�|�t |j �d�q�WdS) N)r rO)rP�2�stdoutr$rz LONG TEXTi�aLMANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES MANY_LINES 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>rrr�test_write_stdout�s"    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.0�endr(r$) r=rr?r\rrKrRr�getrUrM)rr;r<r>rrr�test_auto_squeeze�s    zSqueezerTest.test_auto_squeezecCs �xdD]�}|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 �qWdS)N)r[rXT)r:r.)rPz1.0z SOME TEXT �insertr^z SOME TEXT r)�event�breakz r$z SOME TEXT)r=rr?rrKrar@rr_rUrM�squeeze_current_text_event�s�expand)rZtag_namer;r<r>�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)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_tags�s     zrgrrr�/test_squeeze_text_before_existing_squeezed_texts$      zZorig_auto_squeeze_min_linesZnew_auto_squeeze_min_linesrrr� test_reloads   zSqueezerTest.test_reloadcCs t��dS)N)rro)rrrr�!test_reload_no_squeezer_instances,sz.SqueezerTest.test_reload_no_squeezer_instances)F)N)N)r4r5r6r=r?r9rErLrNrWrYr]r`rhrirlrprqrrrrr7Rs    r7c@sPeZdZdd�Zeded�dd��Zdd�Zd d �Zd d �Z d d�Z dd�Z dS)�ExpandingButtonTestcCs$t|�}t�}t|�|j_d|_|S)NrZ)rrrr;rr\)rrr>rrr�make_mock_squeezer5s  z&ExpandingButtonTest.make_mock_squeezerzidlelib.squeezer.Hovertip)�autospeccCs�|��}|jj}tddd|�}|�|jd�|�|j|�|�d|�d�k�|�|� dd�d�|� d |� ��d t � �r�d nd }|� ||� ��|�|jd �|j|ttd�|jdd }|� d|���dS)NrO�TAGSrZz50 linesrz1.0r^r(zz �2�3r$)Z hover_delayrz right-click)rsr;rr rreZmasterrkZcgetr_ZassertInZbindrZisAquaTkrSrTr � call_args�lower)rZ MockHovertipr>r<�expandingbuttonZright_button_codeZ tooltip_textrrrrN?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) NrOrurZz1.0)�window)rbr^zTEXT zend-1cr$)rsr r� window_create� base_textrfrrr_�indexZ tag_nextrangerM�removerSrT)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 �|�|j�dd �d �td��$}d |j _ d |j _ |j t �d �}WdQRX|�|d�|�|j�dd �|�dS)N�ai��rurZz1.0)r{zidlelib.squeezer.tkMessageBoxF)rbrczend-1cr T)rsr Zset_is_dangerousrkZ is_dangerousrr|r}rZ askokcancelrPZaskyesnorfrrr_)rr>rrzr<Z mock_msgboxrgrrr�test_expand_dangerous_oupput|s(     z0ExpandingButtonTest.test_expand_dangerous_oupputcCsp|��}tddd|�}t�|_t�|_|jt�d�}|�|d�|�|jjd�|�|jjd�|j�d�dS)NrOrurZ)rbr$) rsr rZclipboard_clearZclipboard_append�copyrrSrT)rr>rzrgrrr� test_copy�s zExpandingButtonTest.test_copyc Csl|��}tddd|�}t�|_tdtd��8}|jt�d�|�|jd�|�|j dd d�WdQRXdS) NrOrurZzidlelib.squeezer.view_text)rt)rbr$rr") rsr rZ selection_ownrrZviewrrSrx)rr>rzZmock_view_textrrr� test_view�s zExpandingButtonTest.test_viewc Cs�|��}tddd|�}td��j}t�}||_t�}d|_d|_|j|d�|�|j j t |j ��x"|j D]^}}|j j |td�qhWWdQRXdS)NrOrurZz tkinter.Menur*)rb)�labelZcommand)rsr rrrP�x�yZcontext_menu_eventrZ add_commandrSrUZ rmenu_specsZassert_any_callr )rr>rzZ mock_MenuZ mock_menuZ mock_eventr��datarrr� test_rmenu�s    zExpandingButtonTest.test_rmenuN) r4r5r6rsrrrNr�r�r�r�r�rrrrrr1s  (rr�__main__r")� verbosity)$�textwraprZtkinterrrZunittestZ unittest.mockrrrrr Z test.supportr Zidlelib.configr Zidlelib.squeezerr r rZidlelibrZidlelib.textviewrZidlelib.tooltiprZidlelib.pyshellrrQrZTestCaserr7rrr4rmrrrr�s&       /`*