<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    YI~dxN  ã               @   sø   d dl mZ d dlmZmZ d dlZd dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ e
jZdd„ ZG dd„ dejƒ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 )é    )Údedent)ÚTextÚTkN)ÚMockÚNonCallableMagicMockÚpatchÚsentinelÚANY)Úrequires)ÚidleConf)Úcount_lines_with_wrappingÚExpandingButtonÚSqueezer)Úmacosx)Ú	view_text)ÚHovertip)ÚPyShellc                s0   t dƒ tƒ ‰ ˆ  ¡  ‡ fdd„}|  |¡ ˆ S )NZguic                  s   ˆ   ¡  ˆ  ¡  d S )N)Zupdate_idletasksZdestroy© )Úrootr   úD/opt/alt/python37/lib64/python3.7/idlelib/idle_test/test_squeezer.pyÚcleanup_root   s    z&get_test_tk_root.<locals>.cleanup_root)r
   r   ZwithdrawÚ
addCleanup)Ztest_instancer   r   )r   r   Úget_test_tk_root   s    
r   c               @   sL   e Z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 )ÚCountLinesTestc             C   s   |   |t||ƒ¡S )N)ÚassertEqualr   )ÚselfÚexpectedÚtextÚ	linewidthr   r   r   Úcheck%   s    zCountLinesTest.checkc             C   s   |   tdƒd¡ d S )NÚ r   )r   r   )r   r   r   r   Útest_count_empty+   s    zCountLinesTest.test_count_emptyc             C   s   |   tdƒd¡ d S )Nz
texté   )r   r   )r   r   r   r   Ú!test_count_begins_with_empty_line/   s    z0CountLinesTest.test_count_begins_with_empty_linec             C   s   |   tdƒd¡ d S )Nztext
é   )r   r   )r   r   r   r   Útest_count_ends_with_empty_line3   s    z.CountLinesTest.test_count_ends_with_empty_linec             C   s   |   tdƒd¡ d S )Nz1
2
3
é   )r   r   )r   r   r   r   Útest_count_several_lines7   s    z'CountLinesTest.test_count_several_linesc             C   s4   | j dddd | j dddd | j dddd d S )	Nr$   Ú
éP   )r   r   r   r"   z

é
   z










)r   )r   r   r   r   Útest_empty_lines;   s    zCountLinesTest.test_empty_linesc             C   s$   | j dddd | j dddd d S )Nr&   ZÈaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar)   )r   r   r   zÉaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
)r   )r   r   r   r   Útest_long_line@   s    zCountLinesTest.test_long_linec             C   s`   t dƒ}| jd|dd | jd|d dd | jd|dd | jd|d	d | jd
|dd d S )Nz€            13 characters
            43 is the number of characters on this line

            7 chars
            13 charactersé   r)   )r   r   r   r(   é   é(   é   é   é   r*   )r   r   )r   r   r   r   r   Ú$test_several_lines_different_lengthsD   s    z3CountLinesTest.test_several_lines_different_lengthsN)Ú__name__Ú
__module__Ú__qualname__r   r!   r#   r%   r'   r+   r,   r3   r   r   r   r   r   #   s   r   c               @   sŠ   e Zd Zd!dd„Zd"dd„Zd#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 )$ÚSqueezerTestFc             C   s:   t ƒ }d|_|r6t| ƒ|_| j|jd}| |_|j_|S )Nr)   )r   )r   Úwidthr   r   Úmake_text_widgetr   ZperZbottom)r   Úwith_text_widgetÚeditwinÚtext_widgetr   r   r   Úmake_mock_editor_windowT   s    
z$SqueezerTest.make_mock_editor_windowNc             C   s   |d kr|   ¡ }t|ƒ}|S )N)r=   r   )r   Zeditor_windowÚsqueezerr   r   r   Úmake_squeezer_instance`   s    z#SqueezerTest.make_squeezer_instancec             C   s0   |d krt | ƒ}t|ƒ}d|d< | dd¡ |S )N)ZCourierr*   ZfontZiomarkz1.0)r   r   Úmark_set)r   r   r<   r   r   r   r9   g   s    zSqueezerTest.make_text_widgetc             C   s6   t  |||¡}t  ||||¡ |  t j||||¡ d S )N)r   Z	GetOptionZ	SetOptionr   )r   Z
configTypeÚsectionÚoptionÚvalueÚprev_valr   r   r   Ú set_idleconf_option_with_cleanupo   s    z-SqueezerTest.set_idleconf_option_with_cleanupc             C   sz   |   ¡ }|  |¡}xbdD ]Z\}}}| j|||d: t|ƒ}t |d|¡ |  | |¡|¡ W d Q R X W d Q R X qW d S )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_widthr   r8   )r=   r?   ZsubTestÚevalr   Úobjectr   Úcount_lines)r   r;   r>   rG   rH   r   r   r   r   r   Útest_count_linesu   s    


zSqueezerTest.test_count_linesc             C   s2   |   ¡ }|  |¡}|  |j|¡ |  |jg ¡ d S )N)r=   r?   ZassertIsr;   r   Úexpandingbuttons)r   r;   r>   r   r   r   Ú	test_init‹   s    
zSqueezerTest.test_initc             C   s‚   |   ¡ }xtdddd dgD ]`}ttd |_}|  |¡}|  |j |d¡t¡ |  |jd¡ | |d¡ |  t	|j
ƒd	¡ qW d S )
Nr    ÚTEXTz	LONG TEXTiè  aL  MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
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_valuer   r$   r   )r=   r   ÚSENTINEL_VALUEÚwriter?   r   r;   Ú
call_countÚassert_called_withÚlenrM   )r   r;   r   Ú
orig_writer>   r   r   r   Útest_write_no_tags’   s    
zSqueezerTest.test_write_no_tagsc             C   s€   xzdddd dgD ]f}|   ¡ }t|j_|j}|  |¡}|  |j |d¡t¡ |  |jd¡ | |d¡ |  t	|j
ƒd¡ qW d S )	Nr    rO   z	LONG TEXTiè  aL  MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
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=   rQ   rR   rP   r?   r   r;   rS   rT   rU   rM   )r   r   r;   rV   r>   r   r   r   Útest_write_not_stdoutž   s    
z"SqueezerTest.test_write_not_stdoutc             C   sè   |   ¡ }xndD ]f}ttd |_}|  |¡}d|_|  |j |d¡t¡ |  |jd¡ | 	|d¡ |  t
|jƒd¡ qW xjdd d	gD ]Z}ttd |_}|  |¡}d|_|  |j |d¡d ¡ |  |jd¡ |  t
|jƒd¡ q†W d S )
N)r    rO   )rP   é2   Ústdoutr$   r   z	LONG TEXTiè  aL  MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
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=   r   rQ   rR   r?   Úauto_squeeze_min_linesr   r;   rS   rT   rU   rM   )r   r;   r   rV   r>   r   r   r   Útest_write_stdout¬   s"    


zSqueezerTest.test_write_stdoutc             C   sd   | j dd}|j}|  |¡}d|_tdd|_| dd¡ |  | dd	¡d
¡ |  t	|j
ƒd¡ d S )NT)r:   r-   r.   )rP   zTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
r[   z1.0Úendr(   r$   )r=   r   r?   r\   r   rK   rR   r   ÚgetrU   rM   )r   r;   r<   r>   r   r   r   Útest_auto_squeezeÄ   s    
zSqueezerTest.test_auto_squeezec             C   s
  xdD ]ú}| j dd}|j}|  |¡}tdd|_| dd|¡ | dd¡ |  | dd	¡d
¡ |  t	|j
ƒd¡ |jtƒ d}|  |d¡ |  | dd	¡d¡ |  t	|j
ƒd¡ |  |j
d jd¡ |j
d jtƒ d |  | dd	¡d
¡ |  t	|j
ƒd¡ qW d S )N)r[   rX   T)r:   r.   )rP   z1.0z
SOME
TEXT
Úinsertr^   zSOME
TEXT

r   )ÚeventÚbreakz

r$   z	SOME
TEXT)r=   r   r?   r   rK   ra   r@   r   r_   rU   rM   Úsqueeze_current_text_eventÚsÚexpand)r   Ztag_namer;   r<   r>   Úretvalr   r   r   Útest_squeeze_current_text_eventÐ   s"    
z,SqueezerTest.test_squeeze_current_text_eventc             C   s¬   | j dd}|j}|  |¡}tdd|_| ddd¡ | dd¡ |  | dd	¡d
¡ |  t	|j
ƒd¡ |jtƒ d}|  |d¡ |  | dd	¡d
¡ |  t	|j
ƒd¡ d S )NT)r:   r.   )rP   z1.0z
SOME
TEXT
ZTAGra   r^   zSOME
TEXT

r   )rb   rc   )r=   r   r?   r   rK   ra   r@   r   r_   rU   rM   rd   )r   r;   r<   r>   rg   r   r   r   Ú/test_squeeze_current_text_event_no_allowed_tagsí   s    
z<SqueezerTest.test_squeeze_current_text_event_no_allowed_tagsc             C   sà   | j dd}|j}|  |¡}tdd|_| ddd¡ | dd¡ |jtƒ d	 |  t	|j
ƒd
¡ | ddd¡ | dd¡ |jtƒ d	}|  |d¡ |  | dd¡d¡ |  t	|j
ƒd¡ |  | |j
d d|j
d
 ¡¡ d S )NT)r:   r.   )rP   z1.0z
SOME
TEXT
r[   ra   )rb   r$   zMORE
STUFF
rc   r^   z


r"   r   ú<)r=   r   r?   r   rK   ra   r@   rd   r   rU   rM   r_   Ú
assertTrueZcompare)r   r;   r<   r>   rg   r   r   r   Ú/test_squeeze_text_before_existing_squeezed_text  s$    
z<SqueezerTest.test_squeeze_text_before_existing_squeezed_textc             C   sR   | j dd}|  |¡}|j}|d }|  dddt|ƒ¡ t ¡  |  |j|¡ d S )NT)r:   r*   Úmainr   zauto-squeeze-min-lines)r=   r?   r\   rE   Ústrr   Úreloadr   )r   r;   r>   Zorig_auto_squeeze_min_linesZnew_auto_squeeze_min_linesr   r   r   Útest_reload  s    

zSqueezerTest.test_reloadc             C   s   t  ¡  d S )N)r   ro   )r   r   r   r   Ú!test_reload_no_squeezer_instances,  s    z.SqueezerTest.test_reload_no_squeezer_instances)F)N)N)r4   r5   r6   r=   r?   r9   rE   rL   rN   rW   rY   r]   r`   rh   ri   rl   rp   rq   r   r   r   r   r7   R   s   


r7   c               @   sP   e Zd Zdd„ Zededdd„ ƒZdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚExpandingButtonTestc             C   s$   t | ƒ}tƒ }t|ƒ|j_d|_|S )NrZ   )r   r   r   r;   r   r\   )r   r   r>   r   r   r   Úmake_mock_squeezer5  s
    z&ExpandingButtonTest.make_mock_squeezerzidlelib.squeezer.Hovertip)Úautospecc             C   sÖ   |   ¡ }|jj}tddd|ƒ}|  |jd¡ |  |j|¡ |  d| d¡k¡ |  | 	dd¡d¡ |  
d	| ¡ ¡ d
t ¡ r€dnd }|  
|| ¡ ¡ |  |jd¡ |j|ttd |jd d }|  
d| ¡ ¡ d S )NrO   ÚTAGSrZ   z50 linesr   z1.0r^   r(   z<Double-Button-1>z<Button-%s>Ú2Ú3r$   )Zhover_delayr   zright-click)rs   r;   r   r   r   re   Zmasterrk   Zcgetr_   ZassertInZbindr   ZisAquaTkrS   rT   r	   Ú	call_argsÚlower)r   ZMockHovertipr>   r<   ÚexpandingbuttonZright_button_codeZtooltip_textr   r   r   rN   ?  s    zExpandingButtonTest.test_initc             C   sº   |   ¡ }tddd|ƒ}|j}|jd|d |j|_|jtƒ d}|  |d ¡ |  | dd¡d¡ | 	d	¡}|  | d|¡d¡ |  | 
dd¡d|f¡ |  |jjjd
¡ |jj |¡ d S )NrO   ru   rZ   z1.0)Úwindow)rb   r^   zTEXT
zend-1cr$   )rs   r   r   Úwindow_createÚ	base_textrf   r   r   r_   ÚindexZtag_nextrangerM   ÚremoverS   rT   )r   r>   rz   r<   rg   Ztext_end_indexr   r   r   Útest_expand\  s    

zExpandingButtonTest.test_expandc          	   C   sú   |   ¡ }dd }t|dd|ƒ}| ¡  |  |j¡ |j}|jd|d |j|_tdƒ$}d|j	_
d|j_
|jtƒ d	}W d Q R X |  |d
¡ |  |j dd¡d¡ tdƒ$}d|j	_
d|j_
|jtƒ d	}W d Q R X |  |d ¡ |  |j dd¡|¡ d S )NÚai † ru   rZ   z1.0)r{   zidlelib.squeezer.tkMessageBoxF)rb   rc   zend-1cr    T)rs   r   Zset_is_dangerousrk   Zis_dangerousr   r|   r}   r   ZaskokcancelrP   Zaskyesnorf   r   r   r_   )r   r>   r   rz   r<   Zmock_msgboxrg   r   r   r   Útest_expand_dangerous_oupput|  s(    

z0ExpandingButtonTest.test_expand_dangerous_oupputc             C   sp   |   ¡ }tddd|ƒ}tƒ |_tƒ |_|jtƒ d}|  |d ¡ |  |jjd¡ |  |jjd¡ |j d¡ d S )NrO   ru   rZ   )rb   r$   )	rs   r   r   Zclipboard_clearZclipboard_appendÚcopyr   rS   rT   )r   r>   rz   rg   r   r   r   Ú	test_copy¤  s    zExpandingButtonTest.test_copyc          	   C   sl   |   ¡ }tddd|ƒ}tƒ |_tdtd8}|jtƒ d |  |jd¡ |  |j	d d	 d¡ W d Q R X d S )
NrO   ru   rZ   zidlelib.squeezer.view_text)rt   )rb   r$   r   r"   )
rs   r   r   Zselection_ownr   r   Zviewr   rS   rx   )r   r>   rz   Zmock_view_textr   r   r   Ú	test_view¸  s    zExpandingButtonTest.test_viewc          	   C   s’   |   ¡ }tddd|ƒ}tdƒj}tƒ }||_tƒ }d|_d|_|j|d |  |j	j
t|jƒ¡ x"|jD ]^}}|j	j|td qhW W d Q R X d S )NrO   ru   rZ   ztkinter.Menur*   )rb   )ÚlabelZcommand)rs   r   r   r   rP   ÚxÚyZcontext_menu_eventr   Zadd_commandrS   rU   Zrmenu_specsZassert_any_callr	   )r   r>   rz   Z	mock_MenuZ	mock_menuZ
mock_eventr†   Údatar   r   r   Ú
test_rmenuÉ  s    

zExpandingButtonTest.test_rmenuN)r4   r5   r6   rs   r   r   rN   r€   r‚   r„   r…   rŠ   r   r   r   r   rr   1  s   
 (rr   Ú__main__r"   )Ú	verbosity)$Útextwrapr   Ztkinterr   r   ZunittestZunittest.mockr   r   r   r   r	   Ztest.supportr
   Zidlelib.configr   Zidlelib.squeezerr   r   r   Zidlelibr   Zidlelib.textviewr   Zidlelib.tooltipr   Zidlelib.pyshellr   rQ   r   ZTestCaser   r7   rr   r4   rm   r   r   r   r   Ú<module>   s&   / ` *