B � f�3�@s�dZddlZddlmZddlZddlZddlmZddl Z ddl m Z ddl mZGdd�d�ZGd d �d ej�Zed kr�ejd d �dS)zTest sidebar, coverage 93%�N)�chain)�requires)� Delegator)� Percolatorc@s$eZdZdd�Zdd�Zdd�ZdS)� Dummy_editwincCs4||_|jj|_t|�|_t�|_|j�|j�dS)N)�textZmaster� text_framer�perrZundoZ insertfilter)�selfr�r �C/opt/alt/python37/lib64/python3.7/idlelib/idle_test/test_sidebar.py�__init__s   zDummy_editwin.__init__cCsdS)Nr )r �name�valuer r r �setvarszDummy_editwin.setvarcCstt|j�|���S)N)�int�floatr�index)r rr r r � getlinenoszDummy_editwin.getlinenoN)�__name__� __module__� __qualname__r rrr r r r r src@s�eZdZedd��Zedd��Zdd�Zdd�Zd d �Zd d �Z d d�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/S)0�LineNumbersTestcCs�td�t��|_t�|j�|_|jjtjtjdd�|jj ddd�|jj ddd�tj |jddtj d�|_ |j jddtjd �t|j �|_t�|j�|j_dS) NZguiT)ZsideZfill�expand�)Zweight�P�)�widthZheightZwrap)�row�columnZsticky)r�tkZTk�rootZFramerZpackZLEFTZBOTHZ rowconfigureZcolumnconfigureZTextZNONErZgridZNSEWr�editwinZ ScrollbarZvbar)�clsr r r � setUpClasss  zLineNumbersTest.setUpClasscCs4|jj��|j��|j��|`|`|`|`dS)N)r"r �closer!�updateZdestroyrr)r#r r r � tearDownClass.s   zLineNumbersTest.tearDownClasscs�tj��j��_ddd��_tjjj���fdd�}tj j � tjjd|�}|� ��� |j�d�_�fdd �}tj j � tjjd |�}|� ��� |j�dS) Nz#abcdefz#123456)� background� foregroundcs|dkr�jS�||�S)N� linenumber)� highlight_cfg)ZthemeZelement)�orig_idleConf_GetHighlightr r r �mock_idleconf_GetHighlight;sz9LineNumbersTest.setUp..mock_idleconf_GetHighlight� GetHighlightZ TkFixedFontcs�jS)N)� font_override)r!Z configTypeZsection)r r r �mock_idleconf_GetFontEsz4LineNumbersTest.setUp..mock_idleconf_GetFontZGetFont)�idlelibZsidebarZ LineNumbersr"r*r+ZidleConfr.�unittestZmockZpatch�object�startZ addCleanup�stopr/)r r-ZGetHighlight_patcherr0ZGetFont_patcherr )r,r r �setUp5s    zLineNumbersTest.setUpcCs|j�dd�dS)Nz1.0�end)r�delete)r r r r �tearDownLszLineNumbersTest.tearDowncCsttt|j�d���S)NZsel)�tuple�map�strrZ tag_ranges)r r r r � get_selectionOszLineNumbersTest.get_selectioncCs4|jj�|�d��}|dd}|dd}||fS)Nz.end -1cr�r)r*� sidebar_text�bbox)r �liner@�x�yr r r �get_line_screen_positionRs  z(LineNumbersTest.get_line_screen_positioncCs&|jj��d}|�|dtj�dS)N�state�����)r*r?�config� assertEqualr ZDISABLED)r rEr r r �assert_state_disabledXsz%LineNumbersTest.assert_state_disabledcCs|jj�dtj�S)Nz1.0)r*r?�getr ZEND)r r r r �get_sidebar_text_contents\sz)LineNumbersTest.get_sidebar_text_contentsc Cs6d�ttttd|d��dg��}|�|��|�dS)N� r�)�joinrr;r<�rangerHrK)r Zn_lines�expectedr r r �assert_sidebar_n_lines_s"z&LineNumbersTest.assert_sidebar_n_linescCs|�|j�dd�|�S)Nz1.0r7)rHrrJ)r rPr r r �assert_text_equalscsz"LineNumbersTest.assert_text_equalscCs|�d�dS)Nr)rQ)r r r r �test_init_emptyfszLineNumbersTest.test_init_emptycCs&|j�dd�|�d�|�d�dS)N�insertzfoo bar foo bar foo bar zfoo bar foo bar foo bar �)rrTrRrQ)r r r r �test_init_not_emptyis z#LineNumbersTest.test_init_not_emptycCs�|�|jjd�|j��|�|jjd�|j��|�|jjd�|j��|�|jjd�|j��|�|jjd�|j��|�|jjd�dS)NFT)rHr*Zis_shown� show_sidebar� hide_sidebar)r r r r �test_toggle_linenumberingns     z)LineNumbersTest.test_toggle_linenumberingcCs�|j�dd�|�d�|�d�|��|j�dd�|�d�|�d�|��|j�dd�|�d �|�d �|��|j�dd �|�d �|�d �|��dS)NrT�foobarzfoobar rz fooz foobar foo r>z hello hello zfoobar foohello hello rUz worldzfoobar foohello hello world �)rrTrRrQrI)r r r r � test_insert{s         zLineNumbersTest.test_insertcCs�|j�dd�|�d�|j�dd�|�d�|�d�|��|j�dd�|�d �|�d �|��|j�d d �|�d �|�d �|��|j�dd�|�d�|�d�|��|j�dd�|�d�|�d�|��dS)NrTrZzfoobar z1.1z1.3zfbar rzfoo foo z fbarfoo foo �z2.0z2.endz fbarfoo r7zfba z1.0rL)rrTrRr8rQrI)r r r r � test_delete�s,           zLineNumbersTest.test_deletecs<�fdd�}��d���|�d��j�dd���d���|�d��j�dd���d���|�d��j�dd���d ���|�d ��j�dd���d ���|�d ��j�d d ���d ���|�d ��j�d d ���d���|�d��j�dd���d���|�d ��j�dd���d���|�d��j�dd���d���|�d��j�d d ���d���|�d��j�d d ���d���|�d ��j�dd���d���|�d ��j�dd���d���|�d��j�dd���d���|�d�dS)zY Test that linenumber text widget is always at the minimum width cs�jj��ddS)NrrF)r*r?rGr )r r r � get_width�sz:LineNumbersTest.test_sidebar_text_width..get_widthrrTZfooz foo foo foo foo foo foo foo foo � zfoo � r>� zinsert -1l linestartzinsert linestartahfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo �c�dr]�ez50.0 -1czend -1c�1z5.0 -1crUz1.0N)rQrHrrTr8)r r_r )r r �test_sidebar_text_width�sZ                z'LineNumbersTest.test_sidebar_text_widthcCsn|j��|j�dd�|j��|�d�\}}|jjjd||d�|jj��|j��|� |� �d�dS)Nz1.0zone two three four r>z )rBrC)z2.0z3.0) r*rWrrTr!r&rDr?�event_generaterHr=)r rBrCr r r �test_click_selection�s    z$LineNumbersTest.test_click_selectionc Cs�|�|�\}}|�|�\}}|jjjd||d�|j��dd�}xTttt|||dd��tt|||dd���D]&\}} |jjjd|| d�|j��qnW|jjjd||d�|j��dS) Nz )rBrCcss<|d}x.t|�D]"}|||||||VqWdS)z;linearly interpolate from a to b (inclusive) in equal stepsrN)rO)�a�b�stepsZ last_step�ir r r �lerpsz+LineNumbersTest.simulate_drag..lerprb)rlz z) rDr*r?rhr!r&�zipr;r) r Z start_lineZend_lineZstart_xZstart_yZend_xZend_yrnrBrCr r r � simulate_drag�s     zLineNumbersTest.simulate_dragcCsB|j��|j�dd�|j��|�dd�|�|��d�dS)Nz1.0zone two three four five r>rU)z2.0z5.0) r*rWrrTr!r&rprHr=)r r r r �test_drag_selection_downs    z(LineNumbersTest.test_drag_selection_downcCsB|j��|j�dd�|j��|�dd�|�|��d�dS)Nz1.0zone two three four five rUr>)z2.0z5.0) r*rWrrTr!r&rprHr=)r r r r �test_drag_selection_up!s    z&LineNumbersTest.test_drag_selection_upcCs�|j��|j�dd�|j��|j�dd�|j��|�|j�d�d�|�|jj �d�d�|jj j ddddd �|j��|� |j�d�d�|� |jj �d�d�dS) Nz1.0a�line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line line raZunitz@0,0z11.0z r)rBrCZdelta) r*rWrrTr!r&Z yview_scrollrHrr?rh�assertNotEqual)r r r r � test_scroll*s     zLineNumbersTest.test_scrollcCst|j}|jd}d}|�||�|��||_|��|��|�|jd|�||_|��|�|jd|�dS)NZfontZ TkTextFont)r*r?rsrXr/Z update_fontrWrH)r �lnZ orig_font� test_fontr r r rv?s  zLineNumbersTest.test_fontcsx�j�t�j�}ddd�}��fdd�}���|�_������||����||�|�_���||�dS)Nz#222222z#ffff00)r(r)cs0���jd|d����jd|d�dS)Nr(r))rHr?)Zcolors)rur r r �assert_colors_are_equal\szFLineNumbersTest.test_highlight_colors..assert_colors_are_equal)r*�dictr+rXZ update_colorsrW)r Z orig_colorsZ test_colorsrwr )rur r �test_highlight_colorsVs  z%LineNumbersTest.test_highlight_colorsN)rrr� classmethodr$r'r6r9r=rDrIrKrQrRrSrVrYr\r^rgrirprqrrrtrvryr r r r rs.   D   r�__main__r>)� verbosity)�__doc__Zidlelib.sidebarr1� itertoolsrr2Z unittest.mockZ test.supportrZtkinterr Zidlelib.delegatorrZidlelib.percolatorrrZTestCaserr�mainr r r r �s    [