o
    JAfÍg  ã                   @   s  	 d dl mZ d dlZd dlmZ d dlZd dlZd dlmZm	Z	 d dl
mZ d dlZd dlmZ d dlmZ d dlmZ d d	lmZ d dlZd d
lmZmZmZ d dlmZ d dlZd dlmZmZ G dd„ dƒZ G dd„ dej!ƒZ"G dd„ dej!ƒZ#e$dkrˆej%dd dS dS )é    )ÚdedentN)Úchain)ÚrequiresÚ	swap_attr)Úsupport)Úrun_in_tk_mainloop)Ú	Delegator)Úfixwordbreaks)Ú
Percolator)Úfix_x11_pasteÚPyShellÚPyShellFileList)Úfix_scaling)Úget_end_linenumberÚ
get_linenoc                   @   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   ú5/usr/lib/python3.10/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   ó   zDummy_editwin.setvarc                 C   s   t t| j |¡ƒƒS r   )ÚintÚfloatr   Úindex)r   r    r   r   r   Ú	getlineno"   ó   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e d!¡d"d#„ ƒZd$d%„ Ze d!¡d&d'„ ƒZe d!¡d(d)„ ƒZd*d+„ Zd,d-„ Zd.d/„ Zd0S )1ÚLineNumbersTestc                 C   s¬   t dƒ t ¡ | _| j ¡  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 )
NÚguiT)ZsideÚfillÚexpandé   )ZweightéP   é   )ÚwidthZheightÚwrap)ÚrowÚcolumnZsticky)r   ÚtkÚTkÚrootÚwithdrawZFramer   ÚpackZLEFTZBOTHZrowconfigureZcolumnconfigureZ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   )r7   r   Úcloser3   ÚupdateÚdestroyr   r   r8   r   r   r   ÚtearDownClass9   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 )Nú#abcdefú#123456©Ú
backgroundÚ
foregroundc                    s   |dkrˆj S ˆ | |ƒS )NÚ
linenumber)Úhighlight_cfg©ZthemeÚelement©Úorig_idleConf_GetHighlightr   r   r   Úmock_idleconf_GetHighlightF   s   
z9LineNumbersTest.setUp.<locals>.mock_idleconf_GetHighlightÚGetHighlightZTkFixedFontc                    s   ˆ j S r   )Úfont_override©r3   Z
configTypeÚsection©r   r   r   Úmock_idleconf_GetFontP   s   z4LineNumbersTest.setUp.<locals>.mock_idleconf_GetFontÚGetFont)ÚidlelibÚsidebarZLineNumbersr7   rD   rE   ÚidleConfrK   ÚunittestÚmockÚpatchÚobjectÚstartÚ
addCleanupÚstoprL   )r   rJ   ÚGetHighlight_patcherrP   ÚGetFont_patcherr   rH   r   ÚsetUp@   s$   ÿ

ÿ
ÿzLineNumbersTest.setUpc                 C   s   | j  dd¡ d S ©Nú1.0Úend)r   ÚdeleterO   r   r   r   ÚtearDownW   ó   zLineNumbersTest.tearDownc                 C   s   t tt| j d¡ƒƒS )NÚsel)ÚtupleÚmapÚstrr   Z
tag_rangesrO   r   r   r   Úget_selectionZ   ó   zLineNumbersTest.get_selectionc                 C   s4   | j j |› d¡}|d d }|d d }||fS )Nz.end -1cr   é   r*   )rD   Úsidebar_textÚbbox)r   Úlinerm   ÚxÚyr   r   r   Úget_line_screen_position]   s   z(LineNumbersTest.get_line_screen_positionc                 C   s&   | j j ¡ d }|  |d tj¡ d S )NÚstateéÿÿÿÿ)rD   rl   ÚconfigÚassertEqualr1   ZDISABLED)r   rr   r   r   r   Úassert_state_disabledc   s   z%LineNumbersTest.assert_state_disabledc                 C   s   | j j dtj¡S )Nr`   )rD   rl   Úgetr1   ZENDrO   r   r   r   Úget_sidebar_text_contentsg   rd   z)LineNumbersTest.get_sidebar_text_contentsc              	   C   s6   d  ttttd|d ƒƒdgƒ¡}|  |  ¡ |¡ d S )NÚ
r*   Ú )Újoinr   rg   rh   Úrangeru   rx   )r   Zn_linesÚexpectedr   r   r   Úassert_sidebar_n_linesj   s   "z&LineNumbersTest.assert_sidebar_n_linesc                 C   s   |   | j dd¡|¡S r_   )ru   r   rw   )r   r}   r   r   r   Úassert_text_equalsn   rj   z"LineNumbersTest.assert_text_equalsc                 C   s   |   d¡ d S ©Nr*   )r~   rO   r   r   r   Útest_init_emptyq   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   r‚   r   r~   rO   r   r   r   Útest_init_not_emptyt   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   rD   Zis_shownÚshow_sidebarÚhide_sidebarrO   r   r   r   Útest_toggle_linenumberingy   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 )Nr‚   Úfoobarúfoobar
r*   z
foozfoobar
foo
rk   zhello
hello
zfoobar
foohello
hello

rƒ   z
worldzfoobar
foohello
hello

world
é   )r   r‚   r   r~   rv   rO   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 )Nr‚   rˆ   r‰   z1.1z1.3zfbar
r*   zfoo
foo
zfbarfoo
foo

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


ra   zfba
r`   ry   )r   r‚   r   rb   r~   rv   rO   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 )Nc                      s   ˆ j j ¡ d d S )Nr-   rs   )rD   rl   rt   r   rO   r   r   Ú	get_width¾   r"   z:LineNumbersTest.test_sidebar_text_width.<locals>.get_widthr*   r‚   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   rŒ   ée   z50.0 -1czend -1cé1   z5.0 -1crƒ   r`   )r~   ru   r   r‚   rb   )r   r   r   rO   r   Útest_sidebar_text_width¹   s\   














z'LineNumbersTest.test_sidebar_text_widthztest disabledc                 C   sn   | j  ¡  | j dd¡ | j ¡  |  d¡\}}| j jjd||d | j j ¡  | j ¡  |  	|  
¡ d¡ d S )Nr`   zone
two
three
four
rk   ú
<Button-1>©ro   rp   )r   z3.0)rD   r…   r   r‚   r3   r<   rq   rl   Úevent_generateru   ri   )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 ¡  q6| jjjd||d | j ¡  d S )	Nr˜   r™   c                 s   s<    	 |d }t |ƒD ]}|| | |  || |  V  q
d S r€   )r|   )ÚaÚbÚstepsZ	last_stepÚir   r   r   Úlerp  s   € ÿz+LineNumbersTest.simulate_drag.<locals>.lerpr’   )rž   z<B1-Motion>z<ButtonRelease-1>)	rq   rD   rl   rš   r3   r<   Úziprg   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   óB   | j  ¡  | j dd¡ | j ¡  |  dd¡ |  |  ¡ d¡ d S )Nr`   úone
two
three
four
five
rk   rƒ   ©r   z5.0©	rD   r…   r   r‚   r3   r<   r¢   ru   ri   rO   r   r   r   Útest_drag_selection_down+  ó
   

z(LineNumbersTest.test_drag_selection_downc                 C   r£   )Nr`   r¤   rƒ   rk   r¥   r¦   rO   r   r   r   Útest_drag_selection_up5  r¨   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 )
Nr`   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
r‘   Zunitú@0,0z11.0ú<MouseWheel>r   ©ro   rp   Údelta)rD   r…   r   r‚   r3   r<   Zyview_scrollru   r    rl   rš   ÚassertNotEqualrO   r   r   r   Útest_scroll?  s   



þ
zLineNumbersTest.test_scrollc                 C   st   | j }|jd }d}|  ||¡ | ¡  || _| ¡  | ¡  |  |jd |¡ || _| ¡  |  |jd |¡ d S )NÚfontÚ
TkTextFont)rD   rl   r®   r†   rL   Úupdate_fontr…   ru   )r   ÚlnZ	orig_fontÚ	test_fontr   r   r   r´   T  s   
zLineNumbersTest.test_fontc                    sx   ˆj ‰ tˆjƒ}dddœ}‡ ‡fdd„}ˆ  ¡  |ˆ_ˆ  ¡  ˆ  ¡  ||ƒ ˆ  ¡  ||ƒ |ˆ_ˆ  ¡  ||ƒ d S )Nz#222222z#ffff00rA   c                    s0   ˆ  ˆ jd | d ¡ ˆ  ˆ jd | d ¡ d S )NrB   rC   )ru   rl   )Zcolors©r³   r   r   r   Úassert_colors_are_equalq  s   zFLineNumbersTest.test_highlight_colors.<locals>.assert_colors_are_equal)rD   ÚdictrE   r†   Úupdate_colorsr…   )r   Zorig_colorsÚtest_colorsr¶   r   rµ   r   Útest_highlight_colorsk  s   

z%LineNumbersTest.test_highlight_colorsN)r#   r$   r%   Úclassmethodr:   r>   r^   rc   ri   rq   rv   rx   r~   r   r   r„   r‡   r‹   rŽ   r—   rU   Úskipr›   r¢   r§   r©   r¯   r´   rº   r   r   r   r   r&   &   s:    

K

	
	r&   c                   @   s<  e Zd ZU dZejed< dZeed< e	dd„ ƒZ
e	d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eƒ dd„ ƒZeƒ d d!„ ƒZeƒ d"d#„ ƒZeƒ d$d%„ ƒZeƒ d&d'„ ƒZeƒ d(d)„ ƒZeƒ d*d+„ ƒZd,d-„ Zd.d/„ Z eƒ d0d1„ ƒZ!eƒ d2d3„ ƒZ"eƒ d4d5„ ƒZ#dS )6ÚShellSidebarTestNr3   Úshellc                 C   sX   t dƒ t ¡  | _}| ¡  t|ƒ t|ƒ t|ƒ t|ƒ | _	}| 
¡  |  ¡  d S )Nr'   )r   r1   r2   r3   r4   r   r	   r   r   ÚflistÚupdate_idletasksÚ
init_shell)r9   r3   r¿   r   r   r   r:   Ž  s   zShellSidebarTest.setUpClassc                 C   sF   | j d urd| j _| j  ¡  d | _ d | _| j ¡  | j ¡  d | _d S )NF)r¾   Z	executingr;   r¿   r3   rÀ   r=   r8   r   r   r   r>   Ÿ  s   




zShellSidebarTest.tearDownClassc                 C   s6   | j  ¡ | _d| j_| j ¡  t| jjdƒd | _d S )Nr‘   úend-1cr*   )	r¿   Z
open_shellr¾   Zpollintervalr3   r<   r   r   Ún_preface_linesr8   r   r   r   rÁ   ª  s   
zShellSidebarTest.init_shellc                 C   s8   | j jj | jd › dd¡ | j j ¡  | j ¡  d S )Nr*   ú.0rÂ   )	r¾   r   Zbottomrb   rÃ   Úshell_sidebarÚupdate_sidebarr3   r<   r8   r   r   r   Úreset_shell±  s   zShellSidebarTest.reset_shellc                 C   s2   d | _ tj| jjkrtj| _ | jjt_|  ¡  d S r   )Ú_saved_stdoutÚsysÚstdoutr¾   rÇ   rO   r   r   r   r^   ·  s
   
zShellSidebarTest.setUpc                 C   s   | j d ur| j t_d S d S r   )rÈ   rÉ   rÊ   rO   r   r   r   rc   Ã  s   
ÿzShellSidebarTest.tearDownc                    sF   | j jj‰ tˆ  tj¡ƒ}‡ fdd„|D ƒ‰|  ¡ }‡fdd„|D ƒS )Nc                    s$   i | ]}ˆ   |¡d  ˆ  |d¡“qS )r*   r   )rm   Úitemcget©Ú.0r   ©Úcanvasr   r   Ú
<dictcomp>Ê  s    ÿÿz6ShellSidebarTest.get_sidebar_lines.<locals>.<dictcomp>c                    s   g | ]}ˆ   |d ¡‘qS r   )rw   )rÍ   rp   )Útexts_by_y_coordsr   r   Ú
<listcomp>Ï  ó    z6ShellSidebarTest.get_sidebar_lines.<locals>.<listcomp>)r¾   rÅ   rÏ   ÚlistÚfindr1   ÚALLÚget_shell_line_y_coords)r   ÚtextsZline_y_coordsr   )rÏ   rÑ   r   Úget_sidebar_linesÇ  s   

þz"ShellSidebarTest.get_sidebar_linesc                 C   s.   | j j ¡  |  |  ¡ t|ƒ d … |¡ d S r   )r¾   rÅ   rÆ   ru   rÙ   Úlen)r   Zexpected_linesr   r   r   Úassert_sidebar_lines_end_withÑ  s
   þz.ShellSidebarTest.assert_sidebar_lines_end_withc                 C   s€   | j j}g }| d¡}| dd¡d dkr| |› d¡}| |¡ }d ur>| |d ¡ | |› d¡}| |¡ }d us&|S )Nrª   Ú.r*   Ú0z +1line linestartz +1line)r¾   r   r    ÚsplitÚ	dlineinfoÚappend)r   r   Zy_coordsr    Zlineinfor   r   r   r×   Ø  s   
þz(ShellSidebarTest.get_shell_line_y_coordsc                    s@   | j jj‰ tˆ  tj¡ƒ}|j‡ fdd„d ‡ fdd„|D ƒS )Nc                    s   ˆ   | ¡d S r€   ©rm   )r   rÎ   r   r   Ú<lambda>æ  s    z<ShellSidebarTest.get_sidebar_line_y_coords.<locals>.<lambda>)Úkeyc                    s   g | ]	}ˆ   |¡d  ‘qS )r*   rá   rÌ   rÎ   r   r   rÒ   ç  s    z>ShellSidebarTest.get_sidebar_line_y_coords.<locals>.<listcomp>)r¾   rÅ   rÏ   rÔ   rÕ   r1   rÖ   Úsort)r   rØ   r   rÎ   r   Úget_sidebar_line_y_coordsã  s   
z*ShellSidebarTest.get_sidebar_line_y_coordsc                 C   s    |   t|  ¡ ƒt|  ¡ ƒ¡ d S r   )ZassertLessEqualÚsetrå   r×   rO   r   r   r   Úassert_sidebar_lines_syncedé  s   

þz,ShellSidebarTest.assert_sidebar_lines_syncedc                 C   sH   | j }|j}t| d¡ƒD ]\}}|dkr| d¡ | d|d¡ qd S )Nry   r   ú<<newline-and-indent>>r‚   Ústdin)r¾   r   Ú	enumeraterÞ   rš   r‚   )r   Úinputr¾   r   Z
line_indexrn   r   r   r   Údo_inputï  s   
ýzShellSidebarTest.do_inputc                 C   s4   |   ¡ }|  |d gt|ƒd  dg ¡ |  ¡  d S )Nr*   ú>>>)rÙ   ru   rÚ   rç   )r   Zsidebar_linesr   r   r   Útest_initial_state÷  s   þz#ShellSidebarTest.test_initial_statec                 c   s$    |   d¡ d V  |  ddg¡ d S )Nry   rí   ©rì   rÛ   rO   r   r   r   Útest_single_empty_inputÿ  ó   €
z(ShellSidebarTest.test_single_empty_inputc                 c   s$    |   d¡ d V  |  g d¢¡ d S )Nz1
©rí   Nrí   rï   rO   r   r   r   Útest_single_line_statement  rñ   z+ShellSidebarTest.test_single_line_statementc                 c   s(    |   tdƒ¡ d V  |  g d¢¡ d S )Nú7            if True:
            print(1)

            ©rí   ú...rö   rö   Nrí   )rì   r   rÛ   rO   r   r   r   Útest_multi_line_statement  s   €z*ShellSidebarTest.test_multi_line_statementc                 c   s,    |   d¡ d V  |  g d¢¡ |  ¡  d S )NzÉ11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
rò   )rì   rÛ   rç   rO   r   r   r   Útest_single_long_line_wraps  s
   €
z,ShellSidebarTest.test_single_long_line_wrapsc                 c   sŽ    | j }|j}|  d¡ d V  |  g d¢¡ | dd¡ | d¡ d V  |  g d¢¡ |  ¡  |jjd  	¡  d V  |  g d¢¡ |  ¡  d S )Nzprint("a\nb\nc")
)rí   NNNrí   r‚   zinsert -1line linestartz<<squeeze-current-text>>rò   r   )
r¾   r   rì   rÛ   Úmark_setrš   rç   ÚsqueezerZexpandingbuttonsr)   )r   r¾   r   r   r   r   Útest_squeeze_multi_line_output$  s   €

z/ShellSidebarTest.test_squeeze_multi_line_outputc                 c   s   | j j}|  ¡ }|  tdƒ¡ d V  |  g d¢¡ |  ¡ }|  ||¡ | d¡ d V  |  g d¢¡ | d¡ | d¡ d V  |  g d¢¡ | d| 	d¡¡ | d	¡ d V  | d
¡ d V  |  dg¡ | d¡ d V  |  ddg¡ | d	¡ | d	¡ d V  |  g d¢¡ d S )Nz6            if True:
            print(1)
            )rí   rö   rö   z<<interrupt-execution>>)rí   rö   rö   Nrí   z<<history-previous>>)rí   rö   Nrí   r‚   z
insert -2lrè   z<<undo>>rí   z<<redo>>rö   rõ   )
r¾   r   rÙ   rì   r   rÛ   r®   rš   rù   r    )r   r   Zinitial_sidebar_linesZwith_block_sidebar_linesr   r   r   Útest_interrupt_recall_undo_redo8  s<   €







ÿz0ShellSidebarTest.test_interrupt_recall_undo_redoc              	   c   sž    t  d¡? t| jdd ƒ |  ddd  d ¡ d V  |  |  ¡ dg¡ W d   ƒ n1 s0w   Y  W d   ƒ d S W d   ƒ d S 1 sHw   Y  d S )Nig+  rú   zx = Ú1i'  ry   rí   )r   Zadjust_int_max_str_digitsr   r¾   rì   ru   rÙ   rO   r   r   r   Útest_very_long_wrapped_linef  s   €ÿPüz,ShellSidebarTest.test_very_long_wrapped_linec                    s„   ˆj j‰d‰‡fdd„}tjj tjjd|¡‰ ˆ  	¡  ‡ ‡fdd„}ˆ 
|¡ ‡‡fdd„}ˆ |ƒ ˆ¡ ˆ ¡  ˆ |ƒ ˆ¡ d S )	Nr±   c                    s   ˆ S r   r   rM   )r´   r   r   rP   s  r   z9ShellSidebarTest.test_font.<locals>.mock_idleconf_GetFontrQ   c                      ó   ˆ   ¡  ˆ ¡  d S r   )r[   r²   r   )r]   rS   r   r   Úcleanupx  ó   z+ShellSidebarTest.test_font.<locals>.cleanupc                     sD   ˆj ‰ tˆ  tj¡ƒ} ‡ fdd„| D ƒ}ˆ t|ƒd¡ tt|ƒƒS )Nc                    ó   h | ]}ˆ   |d ¡’qS )r°   ©rË   rÌ   rÎ   r   r   Ú	<setcomp>€  rÓ   zGShellSidebarTest.test_font.<locals>.get_sidebar_font.<locals>.<setcomp>r*   )	rÏ   rÔ   rÕ   r1   rÖ   ru   rÚ   ÚnextÚiter)rØ   Zfonts©r   rS   rÎ   r   Úget_sidebar_font}  s
   z4ShellSidebarTest.test_font.<locals>.get_sidebar_font)r¾   rÅ   rU   rV   rW   rX   rR   rS   rT   rY   rZ   r®   r²   ru   )r   rP   r   r  r   )r]   r   rS   r´   r   r´   n  s   
ÿ
zShellSidebarTest.test_fontc                    s–   ˆj j‰dddœ‰tjjj‰‡‡fdd„}tjj 	tjjd|¡‰ ˆ  
¡  ‡ ‡fdd„}ˆ |¡ ‡‡fd	d
„}ˆ |ƒ ˆ¡ ˆ ¡  ˆ |ƒ ˆ¡ d S )Nr?   r@   rA   c                    s   |dv rˆS ˆ | |ƒS )N)rD   Zconsoler   rF   )rI   r¹   r   r   rJ   Ž  s   
zJShellSidebarTest.test_highlight_colors.<locals>.mock_idleconf_GetHighlightrK   c                      rÿ   r   )r[   r¸   r   )r\   rS   r   r   r   –  r  z7ShellSidebarTest.test_highlight_colors.<locals>.cleanupc                     sX   ˆj ‰ tˆ  tj¡ƒ} ‡ fdd„| D ƒ}ˆ t|ƒd¡ tt|ƒƒ}ˆ  	d¡}||dœS )Nc                    r  )r(   r  rÌ   rÎ   r   r   r  ž  rÓ   zUShellSidebarTest.test_highlight_colors.<locals>.get_sidebar_colors.<locals>.<setcomp>r*   rB   rA   )
rÏ   rÔ   rÕ   r1   rÖ   ru   rÚ   r  r  Zcget)rØ   ZfgsZfgÚbgr  rÎ   r   Úget_sidebar_colors›  s   

zBShellSidebarTest.test_highlight_colors.<locals>.get_sidebar_colors)r¾   rÅ   rR   rS   rT   rK   rU   rV   rW   rX   rY   rZ   r®   r¸   ru   )r   rJ   r   r
  r   )r\   rI   r   rS   r¹   r   rº   ˆ  s   

þ
	z&ShellSidebarTest.test_highlight_colorsc                 c   sØ    | j j}| j j}|  d¡ d V  |  t|dƒd¡ t|ƒ}|  | | 	|› d¡¡¡ t
jdkr3dnd}|jjdd	d	|d
 d V  |  | | 	|› d¡¡¡ |jjdd	d	d d V  |  | | 	|› d¡¡¡ d S )Nzox = """



































































































"""
rª   r*   rÄ   Údarwinrs   éx   r«   r   r¬   z
<Button-5>r™   )r¾   rÅ   r   rì   ZassertGreaterr   r   ZassertIsNotNonerß   r    rÉ   ÚplatformrÏ   rš   ZassertIsNone)r   rS   r   Zlast_linenor­   r   r   r   Útest_mousewheel¨  s   €
 z ShellSidebarTest.test_mousewheelc                 c   s˜    | j j}| j j}t|ƒ}|  tdƒ¡ d V  | d|› dd¡ | dd¡}|  | 	d¡¡ |  
d|¡ | d	¡ |  |j¡ | ¡ }|  ||¡ d S )
Nrô   re   rÄ   rÂ   ú	sel.firstúsel.lastz	if True:
z
1
z<<copy>>)r¾   rÅ   r   r   rì   r   Útag_addrw   Ú
assertTrueÚ
startswithZassertInrš   rZ   Úclipboard_clearÚclipboard_getru   )r   rS   r   Ú
first_lineÚselected_textÚcopied_textr   r   r   Ú	test_copyÁ  s   €
zShellSidebarTest.test_copyc           
      c   sê    | j j}| j j}t|ƒ}|  tdƒ¡ d V  | d|› dd¡ | dd¡}|  | 	d¡¡ | dd¡}| 
d	¡}| ¡  d
gdgt|ƒd   d g }d	 dd„ t||ddD ƒ¡d	 }| d¡ |  |j¡ | ¡ }	|  |	|¡ d S )Nz;            if True:
                print(1)

            re   z.3rÂ   r  r  zTrue:
zsel.first linestartry   rí   rö   rk   c                 s   s,    | ]\}}|d u r|n|d | V  qd S )Nú r   )rÍ   Úpromptrn   r   r   r   Ú	<genexpr>ñ  s
   € ÿ
ÿz:ShellSidebarTest.test_copy_with_prompts.<locals>.<genexpr>T)Ústrictz<<copy-with-prompts>>)r¾   rÅ   r   r   rì   r   r  rw   r  r  rÞ   ÚpoprÚ   r{   r¡   rš   rZ   r  r  ru   )
r   rS   r   r  r  Zselected_lines_textZselected_linesZexpected_promptsZselected_text_with_promptsr  r   r   r   Útest_copy_with_promptsÚ  s4   €
ÿ
þþû
z'ShellSidebarTest.test_copy_with_prompts)$r#   r$   r%   r3   r1   r2   Ú__annotations__r¾   r   r»   r:   r>   rÁ   rÇ   r^   rc   rÙ   rÛ   r×   rå   rç   rì   rî   r   rð   ró   r÷   rø   rû   rü   rþ   r´   rº   r  r  r  r   r   r   r   r½   Š  sT   
 











-
 

r½   Ú__main__rk   )Ú	verbosity)&Útextwrapr   rÉ   Ú	itertoolsr   rU   Zunittest.mockZtest.supportr   r   Útestr   Útkinterr1   Z'idlelib.idle_test.tkinter_testing_utilsr   Zidlelib.delegatorr   Zidlelib.editorr	   Zidlelib.percolatorr
   Zidlelib.pyshellrR   r   r   r   Zidlelib.runr   Zidlelib.sidebarr   r   r   ZTestCaser&   r½   r#   Úmainr   r   r   r   Ú<module>   s8      f  wÿ