a
    åze¯3  ã                   @   sŒ   d Z ddlZddlmZ ddlZddlZddlmZ ddl	Z
ddlmZ ddlmZ G dd„ dƒZG d	d
„ d
ejƒZedkrˆejdd dS )zTest sidebar, coverage 93%é    N)Úchain)Úrequires)Ú	Delegator)Ú
Percolatorc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDummy_editwinc                 C   s4   || _ | j j| _t|ƒ| _tƒ | _| j | j¡ d S ©N)ÚtextZmasterÚ
text_framer   Úperr   ZundoZinsertfilter)Úselfr   © r   ú4/usr/lib/python3.9/idlelib/idle_test/test_sidebar.pyÚ__init__   s
    

zDummy_editwin.__init__c                 C   s   d S r   r   )r   ÚnameÚvaluer   r   r   Úsetvar   s    zDummy_editwin.setvarc                 C   s   t t| j |¡ƒƒS r   )ÚintÚfloatr   Úindex)r   r   r   r   r   Ú	getlineno   s    zDummy_editwin.getlinenoN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s   r   c                   @   sÌ   e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/S )0ÚLineNumbersTestc                 C   s¢   t dƒ t ¡ | _t | j¡| _| jjtjtjdd | jj	ddd | jj
ddd tj| jddtjd| _| jjddtjd	 t| jƒ| _t | j¡| j_d S )
NZguiT)ZsideÚfillÚexpandé   )ZweightéP   é   )ÚwidthZheightÚwrap)ÚrowÚcolumnZsticky)r   ÚtkZTkÚrootZFramer	   ÚpackZLEFTZBOTHZrowconfigureZcolumnconfigureÚTextÚNONEr   ZgridZNSEWr   ÚeditwinZ	ScrollbarZvbar©Úclsr   r   r   Ú
setUpClass   s    
zLineNumbersTest.setUpClassc                 C   s4   | j j ¡  | j ¡  | j ¡  | `| `| ` | `d S r   )r(   r
   Úcloser$   ÚupdateZdestroyr   r	   r)   r   r   r   ÚtearDownClass.   s    

zLineNumbersTest.tearDownClassc                    sž   t j ˆj¡ˆ_dddœˆ_t jjj‰ ‡ ‡fdd„}tj	j
 t jjd|¡}| ¡  ˆ |j¡ dˆ_‡fdd	„}tj	j
 t jjd
|¡}| ¡  ˆ |j¡ d S )Nz#abcdefz#123456©Ú
backgroundÚ
foregroundc                    s   |dkrˆj S ˆ | |ƒS )NÚ
linenumber)Úhighlight_cfg)ZthemeÚelement©Zorig_idleConf_GetHighlightr   r   r   Úmock_idleconf_GetHighlight;   s    z9LineNumbersTest.setUp.<locals>.mock_idleconf_GetHighlightÚGetHighlightZTkFixedFontc                    s   ˆ j S r   )Úfont_override)r$   Z
configTypeÚsection©r   r   r   Úmock_idleconf_GetFontE   s    z4LineNumbersTest.setUp.<locals>.mock_idleconf_GetFontZGetFont)ÚidlelibZsidebarZLineNumbersr(   r2   r3   ZidleConfr7   ÚunittestZmockZpatchÚobjectÚstartZ
addCleanupÚstopr8   )r   r6   ZGetHighlight_patcherr;   ZGetFont_patcherr   r5   r   ÚsetUp5   s$    ÿ

ÿ
ÿzLineNumbersTest.setUpc                 C   s   | j  dd¡ d S ©Nú1.0Úend)r   Údeleter:   r   r   r   ÚtearDownL   s    zLineNumbersTest.tearDownc                 C   s   t tt| j d¡ƒƒS )NZsel)ÚtupleÚmapÚstrr   Z
tag_rangesr:   r   r   r   Úget_selectionO   s    zLineNumbersTest.get_selectionc                 C   s4   | j j |› d¡}|d d }|d d }||fS )Nz.end -1cr   é   r   )r2   Úsidebar_textÚbbox)r   ÚlinerM   ÚxÚyr   r   r   Úget_line_screen_positionR   s    z(LineNumbersTest.get_line_screen_positionc                 C   s&   | j j ¡ d }|  |d tj¡ d S )NÚstateéÿÿÿÿ)r2   rL   ÚconfigÚassertEqualr#   ZDISABLED)r   rR   r   r   r   Úassert_state_disabledX   s    z%LineNumbersTest.assert_state_disabledc                 C   s   | j j dtj¡S )NrC   )r2   rL   Úgetr#   ZENDr:   r   r   r   Úget_sidebar_text_contents\   s    z)LineNumbersTest.get_sidebar_text_contentsc              	   C   s6   d  ttttd|d ƒƒdgƒ¡}|  |  ¡ |¡ d S )NÚ
r   Ú )Újoinr   rH   rI   ÚrangerU   rX   )r   Zn_linesÚexpectedr   r   r   Úassert_sidebar_n_lines_   s    "z&LineNumbersTest.assert_sidebar_n_linesc                 C   s   |   | j dd¡|¡S rB   )rU   r   rW   )r   r]   r   r   r   Úassert_text_equalsc   s    z"LineNumbersTest.assert_text_equalsc                 C   s   |   d¡ d S )Nr   )r^   r:   r   r   r   Útest_init_emptyf   s    zLineNumbersTest.test_init_emptyc                 C   s&   | j  dd¡ |  d¡ |  d¡ d S )NÚinsertzfoo bar
foo bar
foo bar
zfoo bar
foo bar
foo bar

é   )r   ra   r_   r^   r:   r   r   r   Útest_init_not_emptyi   s    
z#LineNumbersTest.test_init_not_emptyc                 C   s–   |   | jjd¡ | j ¡  |   | jjd¡ | j ¡  |   | jjd¡ | j ¡  |   | jjd¡ | j ¡  |   | jjd¡ | j ¡  |   | jjd¡ d S )NFT)rU   r2   Zis_shownÚshow_sidebarÚhide_sidebarr:   r   r   r   Útest_toggle_linenumberingn   s    




z)LineNumbersTest.test_toggle_linenumberingc                 C   s¬   | j  dd¡ |  d¡ |  d¡ |  ¡  | j  dd¡ |  d¡ |  d¡ |  ¡  | j  dd¡ |  d	¡ |  d
¡ |  ¡  | j  dd¡ |  d¡ |  d¡ |  ¡  d S )Nra   Úfoobarúfoobar
r   z
foozfoobar
foo
rK   zhello
hello
zfoobar
foohello
hello

rb   z
worldzfoobar
foohello
hello

world
é   )r   ra   r_   r^   rV   r:   r   r   r   Útest_insert{   s     







zLineNumbersTest.test_insertc                 C   sî   | j  dd¡ |  d¡ | j  dd¡ |  d¡ |  d¡ |  ¡  | j  dd¡ |  d	¡ |  d
¡ |  ¡  | j  dd¡ |  d¡ |  d
¡ |  ¡  | j  dd¡ |  d¡ |  d¡ |  ¡  | j  dd¡ |  d¡ |  d¡ |  ¡  d S )Nra   rg   rh   z1.1z1.3zfbar
r   zfoo
foo
zfbarfoo
foo

é   ú2.0z2.endz
fbarfoo


rD   zfba
rC   rY   )r   ra   r_   rE   r^   rV   r:   r   r   r   Útest_delete   s,    










zLineNumbersTest.test_deletec                    s<  ‡ fdd„}ˆ   d¡ ˆ  |ƒ d¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d¡ ˆ j dd¡ ˆ   d	¡ ˆ  |ƒ d
¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d
¡ ˆ j dd¡ ˆ   d	¡ ˆ  |ƒ d
¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d
¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d
¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d
¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d¡ ˆ j dd¡ ˆ   d¡ ˆ  |ƒ d¡ dS )zY
        Test that linenumber text widget is always at the minimum
        width
        c                      s   ˆ j j ¡ d d S )Nr   rS   )r2   rL   rT   r   r:   r   r   Ú	get_width³   s    z:LineNumbersTest.test_sidebar_text_width.<locals>.get_widthr   ra   Zfooz foo
foo
foo
foo
foo
foo
foo
foo
é	   zfoo
é
   rK   é   zinsert -1l linestartzinsert linestartah  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
foo
éc   éd   rk   ée   z50.0 -1czend -1cé1   z5.0 -1crb   rC   N)r^   rU   r   ra   rE   )r   rn   r   r:   r   Útest_sidebar_text_width®   sZ    














z'LineNumbersTest.test_sidebar_text_widthc                 C   sn   | j  ¡  | j dd¡ | j ¡  |  d¡\}}| j jjd||d | j j ¡  | j ¡  |  	|  
¡ d¡ d S )NrC   zone
two
three
four
rK   ú
<Button-1>©rO   rP   )rl   z3.0)r2   rd   r   ra   r$   r-   rQ   rL   Úevent_generaterU   rJ   )r   rO   rP   r   r   r   Útest_click_selectionò   s    


z$LineNumbersTest.test_click_selectionc           
   	   C   s¶   |   |¡\}}|   |¡\}}| jjjd||d | j ¡  dd„ }ttt|||ddƒtt|||ddƒƒD ]&\}}	| jjjd||	d | j ¡  ql| jjjd||d | j ¡  d S )	Nrw   rx   c                 s   s8   |d }t |ƒD ]"}|| | |  || |  V  qdS )z;linearly interpolate from a to b (inclusive) in equal stepsr   N)r\   )ÚaÚbÚstepsZ	last_stepÚir   r   r   Úlerp  s    z+LineNumbersTest.simulate_drag.<locals>.lerprq   )r}   z<B1-Motion>z<ButtonRelease-1>)	rQ   r2   rL   ry   r$   r-   ÚziprH   r   )
r   Z
start_lineZend_lineZstart_xZstart_yZend_xZend_yr   rO   rP   r   r   r   Úsimulate_dragÿ   s"    
ÿ
þ
ÿzLineNumbersTest.simulate_dragc                 C   sB   | j  ¡  | j dd¡ | j ¡  |  dd¡ |  |  ¡ d¡ d S )NrC   úone
two
three
four
five
rK   rb   ©rl   z5.0©	r2   rd   r   ra   r$   r-   r   rU   rJ   r:   r   r   r   Útest_drag_selection_down  s
    

z(LineNumbersTest.test_drag_selection_downc                 C   sB   | j  ¡  | j dd¡ | j ¡  |  dd¡ |  |  ¡ d¡ d S )NrC   r‚   rb   rK   rƒ   r„   r:   r   r   r   Útest_drag_selection_up!  s
    

z&LineNumbersTest.test_drag_selection_upc                 C   s²   | j  ¡  | j dd¡ | j ¡  | j dd¡ | j ¡  |  | j d¡d¡ |  | j j	 d¡d¡ | j j	j
ddddd	 | j ¡  |  | j d¡d¡ |  | j j	 d¡d¡ d S )
NrC   aô  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
rp   Zunitz@0,0z11.0z<MouseWheel>r   )rO   rP   Zdelta)r2   rd   r   ra   r$   r-   Zyview_scrollrU   r   rL   ry   ÚassertNotEqualr:   r   r   r   Útest_scroll*  s    



þ
zLineNumbersTest.test_scrollc                 C   st   | j }|jd }d}|  ||¡ | ¡  || _| ¡  | ¡  |  |jd |¡ || _| ¡  |  |jd |¡ d S )NZfontZ
TkTextFont)r2   rL   r‡   re   r8   Zupdate_fontrd   rU   )r   ÚlnZ	orig_fontÚ	test_fontr   r   r   rŠ   ?  s    
zLineNumbersTest.test_fontc                    sx   ˆj ‰ tˆjƒ}dddœ}‡ ‡fdd„}ˆ  ¡  |ˆ_ˆ  ¡  ˆ  ¡  ||ƒ ˆ  ¡  ||ƒ |ˆ_ˆ  ¡  ||ƒ d S )Nz#222222z#ffff00r/   c                    s0   ˆ  ˆ jd | d ¡ ˆ  ˆ jd | d ¡ d S )Nr0   r1   )rU   rL   )Zcolors©r‰   r   r   r   Úassert_colors_are_equal\  s    zFLineNumbersTest.test_highlight_colors.<locals>.assert_colors_are_equal)r2   Údictr3   re   Zupdate_colorsrd   )r   Zorig_colorsZtest_colorsrŒ   r   r‹   r   Útest_highlight_colorsV  s    

z%LineNumbersTest.test_highlight_colorsN)r   r   r   Úclassmethodr+   r.   rA   rF   rJ   rQ   rV   rX   r^   r_   r`   rc   rf   rj   rm   rv   rz   r   r…   r†   rˆ   rŠ   rŽ   r   r   r   r   r      s2   

D		r   Ú__main__rK   )Ú	verbosity)Ú__doc__Zidlelib.sidebarr<   Ú	itertoolsr   r=   Zunittest.mockZtest.supportr   Útkinterr#   Zidlelib.delegatorr   Zidlelib.percolatorr   r   ZTestCaser   r   Úmainr   r   r   r   Ú<module>   s     [