<!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>
3
2aeU                 @   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rej#dd dS )    )
namedtuple)TextTkN)MockNonCallableMagicMockpatchsentinelANY)requires)idleConf)count_lines_with_wrappingExpandingButtonSqueezer)macosx)	view_text)Hovertip)PyShellc                s0   t d t   j   fdd}| j|  S )NZguic                  s    j    j  d S )N)Zupdate_idletasksZdestroy )rootr   2/opt/alt/python36/lib64/python3.6/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               @   s<   e Z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   | j |t|||S )N)assertEqualr   )selfexpectedtext	linewidthtabwidthr   r   r   check#   s    zCountLinesTest.checkc             C   s   | j tdd d S )N r   )r   r   )r   r   r   r   test_count_empty)   s    zCountLinesTest.test_count_emptyc             C   s   | j 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   | j tdd d S )Nztext
   )r   r   )r   r   r   r   test_count_ends_with_empty_line1   s    z.CountLinesTest.test_count_ends_with_empty_linec             C   s   | j tdd d S )Nz1
2
3
   )r   r   )r   r   r   r   test_count_several_lines5   s    z'CountLinesTest.test_count_several_linesc             C   s   | j ddddd | j ddddd | j ddddd | j ddddd | j ddddd | j ddd
dd | j d	dd
dd | j ddd	dd | j ddddd | j ddddd | j ddddd | j ddd
dd | j ddddd | j ddddd d S )Nr%   	      )r   r   r   r   r#   r'      
      	            r)   z		z			z				z					z
										z
										z				z										z
										z											z						z						z						)r    )r   r   r   r   test_tab_width9   s    zCountLinesTest.test_tab_widthN)	__name__
__module____qualname__r    r"   r$   r&   r(   r3   r   r   r   r   r   !   s   r   c               @   s   e Zd Z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eddZeejejejejfddZed d! Zd"d# ZdS )%SqueezerTestc             C   s   t  }t|_|S )N)r   r   	__class__)r   editwinr   r   r   make_mock_editor_windowS   s    z$SqueezerTest.make_mock_editor_windowNc             C   s   |d kr| j  }t|S )N)r:   r   )r   Zeditor_windowr   r   r   make_squeezer_instance[   s    z#SqueezerTest.make_squeezer_instancec             C   s$   xdD ]\}}| j ||d qW d S )Nr+   P   r%   O   r*   r'   x   )r   r   r+   r<   r%   r=   r*   r<   r'   r>   )r?   r@   rA   rB   )_test_count_lines_helper)r   r   r   r   r   r   test_count_linesa   s    zSqueezerTest.test_count_linesc       	         s   d d}d}||j _|  d||   |jj_||d dfdd|j_t } fdd}||j_td	|}|j  | j	|j
 d S )
Nr-   r#   r%   )ZborderZpadxZfontc                s    |  S )Nr   )opt)	text_optsr   r   <lambda>|   s    zDSqueezerTest._prepare_mock_editwin_for_count_lines.<locals>.<lambda>c                s   | dkr S t dd S )N0z%measure should only be called on '0'!)
ValueError)char)
CHAR_WIDTHr   r   measure   s    zCSqueezerTest._prepare_mock_editwin_for_count_lines.<locals>.measurezidlelib.squeezer.Font)Zget_tk_tabwidthreturn_valuer   Zwinfo_widthcgetr   rL   r   startr   stop)	r   r9   r   r   ZBORDER_WIDTHZPADDING_WIDTHZ	mock_fontrL   Zpatcherr   )rK   rF   r   %_prepare_mock_editwin_for_count_linesk   s    
z2SqueezerTest._prepare_mock_editwin_for_count_linesc             C   sh   | j  }| j||| | j|}ttd}d}td|& | j|j|t |j||| W d Q R X d S )N)rM   TEXTz*idlelib.squeezer.count_lines_with_wrapping)	r:   rQ   r;   r   SENTINEL_VALUEr   assertIscount_linesassert_called_with)r   r   r   r9   squeezerZmock_count_linesr   r   r   r   rC      s    

z%SqueezerTest._test_count_lines_helperc             C   s2   | j  }| j|}| j|j| | j|jg  d S )N)r:   r;   rT   r9   r   expandingbuttons)r   r9   rW   r   r   r   	test_init   s    
zSqueezerTest.test_initc             C   s   | j  }xxdddd dd gD ]`}ttd |_}| j|}| j|jj|f t | j|jd |j|f  | jt	|j
d	 qW d S )
Nr!   rR   z	LONG TEXTi  zMANY_LINES
d   )rM   r%   r   )r:   r   rS   writer;   r   r9   
call_countrV   lenrX   )r   r9   r   
orig_writerW   r   r   r   test_write_no_tags   s    
zSqueezerTest.test_write_no_tagsc             C   s   x~dddd dd gD ]f}| j  }t|j_|j}| j|}| j|jj|dt | j|jd |j|d | jt	|j
d	 qW d S )
Nr!   rR   z	LONG TEXTi  zMANY_LINES
rZ   stderrr%   r   )r:   rS   r[   rM   r;   r   r9   r\   rV   r]   rX   )r   r   r9   r^   rW   r   r   r   test_write_not_stdout   s    
z"SqueezerTest.test_write_not_stdoutc             C   s   | j  }| j|ddd xndD ]f}ttd |_}| j|}d|_| j|jj|dt | j|j	d	 |j
|d | jt|jd
 qW xndd dd gD ]Z}ttd |_}| j|}d|_| j|jj|dd  | j|j	d
 | jt|jd	 qW d S )Nr<   r*   )r   r   r!   rR   )rM   2   stdoutr%   r   z	LONG TEXTi  zMANY_LINES
rZ   )r!   rR   )r:   rQ   r   rS   r[   r;   auto_squeeze_min_linesr   r9   r\   rV   r]   rX   )r   r9   r   r^   rW   r   r   r   test_write_stdout   s&    



zSqueezerTest.test_write_stdoutc             C   s   t | }t|}|jdd | j }||_| j|}d|_tdd|_|j	dd d | j
|jddd	 | j
t|jd
 d S )Niomarkz1.0r,   r1   )rM   zTEXT
rc   end
r%   )r   r   mark_setr:   r   r;   rd   r   rU   r[   r   getr]   rX   )r   r   text_widgetr9   rW   r   r   r   test_auto_squeeze   s    
zSqueezerTest.test_auto_squeezec             C   s,  t | }xdD ]}t|}|jdd | j }| |_|j_| j|}tdd|_	|j
dd| |jdd | j|jdd	d
 | jt|jd |jt d}| j|d | j|jdd	d | jt|jd | j|jd jd |jd jt d | j|jdd	d
 | jt|jd qW d S )Nrc   r`   rf   z1.0r1   )rM   z
SOME
TEXT
insertrg   zSOME
TEXT

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

r%   z	SOME
TEXT)rc   r`   )r   r   ri   r:   r   perbottomr;   r   rU   rm   r   rj   r]   rX   squeeze_current_text_eventsexpand)r   r   Ztag_namerk   r9   rW   retvalr   r   r   test_squeeze_current_text_event   s(    
z,SqueezerTest.test_squeeze_current_text_eventc             C   s   t | }t|}|jdd | j }| |_|j_| j|}tdd|_	|j
ddd |jdd | j|jddd	 | jt|jd
 |jt d}| j|d | j|jddd	 | jt|jd
 d S )Nrf   z1.0r1   )rM   z
SOME
TEXT
ZTAGrm   rg   zSOME
TEXT

r   )rn   ro   )r   r   ri   r:   r   rp   rq   r;   r   rU   rm   r   rj   r]   rX   rr   )r   r   rk   r9   rW   ru   r   r   r   /test_squeeze_current_text_event_no_allowed_tags  s    
z<SqueezerTest.test_squeeze_current_text_event_no_allowed_tagsc             C   s   t | }t|}|jdd | j }| |_|j_| j|}tdd|_	|j
ddd |jdd |jt d | jt|jd	 |j
dd
d |jdd |jt d}| j|d | j|jddd | jt|jd | j|j|jd d|jd	  d S )Nrf   z1.0r1   )rM   z
SOME
TEXT
rc   rm   )rn   r%   zMORE
STUFF
ro   rg   z


r#   r   <)r   r   ri   r:   r   rp   rq   r;   r   rU   rm   rr   r   r]   rX   rj   
assertTrueZcompare)r   r   rk   r9   rW   ru   r   r   r   /test_squeeze_text_before_existing_squeezed_text  s*    
z<SqueezerTest.test_squeeze_text_before_existing_squeezed_textGetOptionSignaturez:configType section option default type warn_on_default rawc             C   s   | j |||||||S )N)r{   )clsZ
configTypesectionoptiondefaulttypeZwarn_on_defaultrawr   r   r   	_make_sig>  s    zSqueezerTest._make_sigc             C   s   |dd  \}}| j ||S )Nr#   )r   )r|   Zmock_call_objargskwargsr   r   r   get_GetOption_signatureF  s    z$SqueezerTest.get_GetOption_signaturec             C   s8   | j tjt tjdddd tj  | jtjd d S )Nmainr   zauto-squeeze-min-linesZ42*   )ZassertIsInstancer   rd   intr   Z	SetOptionreloadr   )r   r   r   r   test_reloadK  s    zSqueezerTest.test_reload)N)r4   r5   r6   r:   r;   rD   rQ   rC   rY   r_   ra   re   rl   rv   rw   rz   r   r{   classmethodr   Z	NOT_GIVENr   r   r   r   r   r   r   r7   Q   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 )Nrb   )r   r   r   r9   r   rd   )r   r   rW   r   r   r   make_mock_squeezerW  s
    z&ExpandingButtonTest.make_mock_squeezerzidlelib.squeezer.Hovertip)autospecc             C   s   | j  }|jj}tddd|}| j|jd | j|j| | jd|jdk | j|j	ddd | j
d	|j  d
tj rdnd }| j
||j  | j|jd |j|ttd |jd d }| j
d|j  d S )NrR   TAGSrb   z50 linesr   z1.0rg   rh   z<Double-Button-1>z<Button-%s>23r%   )Zhover_delayr   zright-click)r   r9   r   r   r   rs   Zmasterry   rN   rj   ZassertInZbindr   ZisAquaTkr\   rV   r	   	call_argslower)r   ZMockHovertiprW   rk   expandingbuttonZright_button_codeZtooltip_textr   r   r   rY   a  s    zExpandingButtonTest.test_initc             C   s   | j  }tddd|}|j}|jd|d |j|_|jt d}| j|d  | j|jddd |j	d	}| j|jd|d | j|j
ddd|f | j|jjjd
 |jjj| d S )NrR   r   rb   z1.0)window)rn   rg   zTEXT
zend-1cr%   )r   r   r   window_create	base_textrt   r   r   rj   indexZtag_nextrangerX   remover\   rV   )r   rW   r   rk   ru   Ztext_end_indexr   r   r   test_expand~  s    

zExpandingButtonTest.test_expandc             C   s   | j  }dd }t|dd|}|j  | j|j |j}|jd|d |j|_td$}d	|j	_
d	|j_
|jt d
}W d Q R X | j|d | j|jjddd td$}d|j	_
d|j_
|jt d
}W d Q R X | j|d  | j|jjdd| d S )Nar-   r,   r   rb   z1.0)r   zidlelib.squeezer.tkMessageBoxF)rn   ro   zend-1cr!   Ti )r   r   Zset_is_dangerousry   Zis_dangerousr   r   r   r   ZaskokcancelrM   Zaskyesnort   r   r   rj   )r   rW   r   r   rk   Zmock_msgboxru   r   r   r   test_expand_dangerous_oupput  s(    

z0ExpandingButtonTest.test_expand_dangerous_oupputc             C   sp   | j  }tddd|}t |_t |_|jt d}| j|d  | j|jjd | j|jjd |jjd d S )NrR   r   rb   )rn   r%   )	r   r   r   Zclipboard_clearZclipboard_appendcopyr   r\   rV   )r   rW   r   ru   r   r   r   	test_copy  s    zExpandingButtonTest.test_copyc          
   C   sl   | j  }tddd|}t |_tdtd8}|jt d | j|jd | j|j	d d	 d W d Q R X d S )
NrR   r   rb   zidlelib.squeezer.view_text)r   )rn   r%   r   r#   )
r   r   r   Zselection_ownr   r   Zviewr   r\   r   )r   rW   r   Zmock_view_textr   r   r   	test_view  s    zExpandingButtonTest.test_viewc             C   s   | j  }tddd|}tdj}t }||_t }d|_d|_|j|d | j|j	j
t|j x"|jD ]^}}|j	j|td qhW W d Q R X d S )NrR   r   rb   ztkinter.Menur-   )rn   )labelZcommand)r   r   r   r   rM   xyZcontext_menu_eventr   Zadd_commandr\   r]   Zrmenu_specsZassert_any_callr	   )r   rW   r   Z	mock_MenuZ	mock_menuZ
mock_eventr   datar   r   r   
test_rmenu  s    

zExpandingButtonTest.test_rmenuN)r4   r5   r6   r   r   r   rY   r   r   r   r   r   r   r   r   r   r   S  s   
)r   __main__r#   )	verbosity)$collectionsr   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   rS   r   ZTestCaser   r7   r   r4   r   r   r   r   r   <module>   s(   0   *