o
    JAfÈL  ã                   @   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 d dlmZmZ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 dS )é    )Údedent)ÚTextÚTkN)ÚMockÚNonCallableMagicMockÚpatchÚsentinelÚANY)Úrequires)ÚidleConf)Ú
Percolator)Úcount_lines_with_wrappingÚExpandingButtonÚSqueezer)Úmacosx)Ú	view_text)ÚHovertipc                    s2   	 t dƒ tƒ ‰ ˆ  ¡  ‡ fdd„}|  |¡ ˆ S )NZguic                      s   ˆ   ¡  ˆ  ¡  d S ©N)Zupdate_idletasksZdestroy© ©Úrootr   ú6/usr/lib/python3.10/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                   @   sN   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 r   ©ÚassertEqualr   )ÚselfÚexpectedÚtextÚ	linewidthr   r   r   Úcheck$   s   þzCountLinesTest.checkc                 C   ó   	 |   tdƒd¡ d S )NÚ r   r   ©r   r   r   r   Útest_count_empty*   ó   zCountLinesTest.test_count_emptyc                 C   r#   )Nz
texté   r   r%   r   r   r   Ú!test_count_begins_with_empty_line.   r'   z0CountLinesTest.test_count_begins_with_empty_linec                 C   r#   )Nztext
é   r   r%   r   r   r   Útest_count_ends_with_empty_line2   r'   z.CountLinesTest.test_count_ends_with_empty_linec                 C   r#   )Nz1
2
3
é   r   r%   r   r   r   Útest_count_several_lines6   r'   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










©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/   r0   zÉaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
r3   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/   r0   r.   é   é(   é   é   é   r2   )r   r"   )r   r    r   r   r   Ú$test_several_lines_different_lengthsC   s   z3CountLinesTest.test_several_lines_different_lengthsN)Ú__name__Ú
__module__Ú__qualname__r"   r&   r)   r+   r-   r4   r5   r<   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|_|rt| ƒ|_| j|jd}| |_|j_|S )Nr/   r   )r   Úwidthr   r   Úmake_text_widgetr    ÚperZbottom)r   Úwith_text_widgetÚeditwinÚtext_widgetr   r   r   Úmake_mock_editor_windowS   s   
z$SqueezerTest.make_mock_editor_windowNc                 C   s   	 |d u r	|   ¡ }t|ƒ}|S r   )rG   r   )r   Zeditor_windowÚsqueezerr   r   r   Úmake_squeezer_instance_   s
   z#SqueezerTest.make_squeezer_instancec                 C   s0   |d u rt | ƒ}t|ƒ}d|d< | dd¡ |S )N)ZCourierr2   ZfontZiomarkú1.0)r   r   Úmark_set)r   r   rF   r   r   r   rB   f   s   zSqueezerTest.make_text_widgetc                 C   s6   t  |||¡}t  ||||¡ |  t j||||¡ d S r   )r   Z	GetOptionZ	SetOptionr   )r   Z
configTypeÚsectionÚoptionÚvalueZprev_valr   r   r   Ú set_idleconf_option_with_cleanupn   s
   ÿz-SqueezerTest.set_idleconf_option_with_cleanupc              
   C   s    	 |   ¡ }|  |¡}dD ]A\}}}| j|||d, t|ƒ}t |d|¡ |  | |¡|¡ W d   ƒ n1 s9w   Y  W d   ƒ n1 sHw   Y  q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,   )ú'aa\t' * 20r/   r(   )z'aa\t' * 21r/   r,   )rP   r8   é   )Ú	text_codeÚ
line_widthr   rA   )rG   rI   ZsubTestÚevalr   Úobjectr   Úcount_lines)r   rE   rH   rR   rS   r   r    r   r   r   Útest_count_linest   s    

þÿ€ü€özSqueezerTest.test_count_linesc                 C   s4   	 |   ¡ }|  |¡}|  |j|¡ |  |jg ¡ d S r   )rG   rI   ZassertIsrE   r   Úexpandingbuttons)r   rE   rH   r   r   r   Ú	test_initŠ   s
   
zSqueezerTest.test_initc                 C   s€   	 |   ¡ }dddd dfD ]0}ttd |_}|  |¡}|  |j |d¡t¡ |  |jd¡ | |d¡ |  t	|j
ƒd	¡ qd S )
Nr$   ÚTEXTú	LONG TEXTéè  áL  MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
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   )rG   r   ÚSENTINEL_VALUEÚwriterI   r   rE   Ú
call_countÚassert_called_withÚlenrX   ©r   rE   r    Ú
orig_writerH   r   r   r   Útest_write_no_tags‘   s   
ùzSqueezerTest.test_write_no_tagsc                 C   s~   	 dddd dfD ]3}|   ¡ }t|j_|j}|  |¡}|  |j |d¡t¡ |  |jd¡ | |d¡ |  t	|j
ƒd¡ q	d S )	Nr$   rZ   r[   r\   r]   Ústderrr*   r   )rG   r`   ra   r_   rI   r   rE   rb   rc   rd   rX   )r   r    rE   rf   rH   r   r   r   Útest_write_not_stdout   s   
ÿöz"SqueezerTest.test_write_not_stdoutc                 C   sâ   	 |   ¡ }dD ]3}ttd |_}|  |¡}d|_|  |j |d¡t¡ |  |jd¡ | 	|d¡ |  t
|jƒd¡ qdd d	fD ]-}ttd |_}|  |¡}d|_|  |j |d¡d ¡ |  |jd¡ |  t
|jƒd¡ qAd S )
N)r$   rZ   r^   é2   Ústdoutr*   r   r[   r\   r]   )rG   r   r`   ra   rI   Úauto_squeeze_min_linesr   rE   rb   rc   rd   rX   re   r   r   r   Útest_write_stdout«   s(   
ÿ
ùzSqueezerTest.test_write_stdoutc                 C   sf   	 | j dd}|j}|  |¡}d|_tdd|_| dd¡ |  | dd	¡d
¡ |  t	|j
ƒd¡ d S )NT©rD   r6   r7   r^   zTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
rk   rJ   Úendr.   r*   )rG   r    rI   rl   r   rV   ra   r   Úgetrd   rX   )r   rE   rF   rH   r   r   r   Útest_auto_squeezeÃ   s   
zSqueezerTest.test_auto_squeezec                 C   sú   	 dD ]w}| j dd}|j}|  |¡}tdd|_| dd|¡ | dd¡ |  | dd	¡d
¡ |  t	|j
ƒd¡ | ¡ }|  |d¡ |  | dd	¡d¡ |  t	|j
ƒd¡ |  |j
d jd¡ |j
d  ¡  |  | dd	¡d
¡ |  t	|j
ƒd¡ qd S )N)rk   rh   Trn   r7   r^   rJ   ú
SOME
TEXT
Úinsertro   úSOME
TEXT

r   Úbreakr1   r*   z	SOME
TEXT)rG   r    rI   r   rV   rs   rK   r   rp   rd   rX   Úsqueeze_current_textÚsÚexpand)r   Ztag_namerE   rF   rH   Úretvalr   r   r   Útest_squeeze_current_textÏ   s&   
èz&SqueezerTest.test_squeeze_current_textc                 C   s¨   	 | j dd}|j}|  |¡}tdd|_| ddd¡ | dd¡ |  | dd	¡d
¡ |  t	|j
ƒd¡ | ¡ }|  |d¡ |  | dd	¡d
¡ |  t	|j
ƒd¡ d S )NTrn   r7   r^   rJ   rr   ZTAGrs   ro   rt   r   ru   )rG   r    rI   r   rV   rs   rK   r   rp   rd   rX   rv   ©r   rE   rF   rH   ry   r   r   r   Ú)test_squeeze_current_text_no_allowed_tagsì   s   
z6SqueezerTest.test_squeeze_current_text_no_allowed_tagsc                 C   sÖ   	 | j dd}|j}|  |¡}tdd|_| ddd¡ | dd¡ | ¡  |  t	|j
ƒd	¡ | dd
d¡ | dd¡ | ¡ }|  |d¡ |  | dd¡d¡ |  t	|j
ƒd¡ |  | |j
d d|j
d	 ¡¡ d S )NTrn   r7   r^   rJ   rr   rk   rs   r*   zMORE
STUFF
ru   ro   z


r(   r   ú<)rG   r    rI   r   rV   rs   rK   rv   r   rd   rX   rp   Ú
assertTrueZcomparer{   r   r   r   Ú/test_squeeze_text_before_existing_squeezed_text   s(   

ýz<SqueezerTest.test_squeeze_text_before_existing_squeezed_textc                 C   sT   	 | j dd}|  |¡}|j}|d }|  dddt|ƒ¡ t ¡  |  |j|¡ d S )NTrn   r2   ÚmainZPyShellzauto-squeeze-min-lines)rG   rI   rl   rO   Ústrr   Úreloadr   )r   rE   rH   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 r   )r   r‚   r%   r   r   r   Ú!test_reload_no_squeezer_instances+  s   z.SqueezerTest.test_reload_no_squeezer_instances)Fr   )r=   r>   r?   rG   rI   rB   rO   rW   rY   rg   ri   rm   rq   rz   r|   r   rƒ   r„   r   r   r   r   r@   Q   s"    


r@   c                   @   sR   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   sF   	 t | ƒ}tƒ }t|ƒ|j_t|jjƒ|j_|  |jjj¡ d|_	|S )Nrj   )
r   r   r   rE   r    r   rC   r   Úcloserl   )r   r   rH   r   r   r   Úmake_mock_squeezer4  s   z&ExpandingButtonTest.make_mock_squeezerzidlelib.squeezer.Hovertip©Zautospecc                 C   sØ   	 |   ¡ }|jj}tddd|ƒ}|  |jd¡ |  |j|¡ |  d| d¡v ¡ |  | 	dd¡d¡ |  
d	| ¡ ¡ d
t ¡ rAdnd }|  
|| ¡ ¡ |  |jd¡ |j|ttd |jd d }|  
d| ¡ ¡ d S )NrZ   ÚTAGSrj   z50 linesr    rJ   ro   r.   z<Double-Button-1>z<Button-%s>Ú2Ú3r*   )Zhover_delayr   zright-click)r‡   rE   r    r   r   rw   Zmasterr~   Zcgetrp   ZassertInÚbindr   ZisAquaTkrb   rc   r	   Ú	call_argsÚlower)r   ZMockHovertiprH   rF   ÚexpandingbuttonZright_button_codeZtooltip_textr   r   r   rY   @  s   zExpandingButtonTest.test_initc                 C   s¶   	 |   ¡ }tddd|ƒ}|jj}|jd|d |jtƒ d}|  |d ¡ |  | dd¡d¡ | 	d	¡}|  | d|¡d¡ |  | 
dd¡d|f¡ |  |jjjd
¡ |jj |¡ d S )NrZ   r‰   rj   rJ   ©Zwindow©Úeventro   zTEXT
úend-1cr*   )r‡   r   rE   r    Úwindow_createrx   r   r   rp   ÚindexZtag_nextrangerX   Úremoverb   rc   )r   rH   r   rF   ry   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 tdƒ}d|j_	d|j
_	|jtƒ d	}W d   ƒ n1 sBw   Y  |  |d
¡ |  |j dd¡d¡ tdƒ}d|j_	d|j
_	|jtƒ d	}W d   ƒ n1 svw   Y  |  |d ¡ |  |j dd¡|¡ d S )NÚai † r‰   rj   rJ   r   zidlelib.squeezer.messageboxFr‘   ru   r“   r$   T)r‡   r   Zset_is_dangerousr~   Zis_dangerousr    r”   r   Zaskokcancelr_   Zaskyesnorx   r   r   rp   )r   rH   r    r   rF   Zmock_msgboxry   r   r   r   Útest_expand_dangerous_oupputx  s,   
ü
üz0ExpandingButtonTest.test_expand_dangerous_oupputc                 C   sr   	 |   ¡ }tddd|ƒ}tƒ |_tƒ |_|jtƒ d}|  |d ¡ |  |jjd¡ |  |jjd¡ |j d¡ d S )NrZ   r‰   rj   r‘   r*   )	r‡   r   r   Zclipboard_clearZclipboard_appendÚcopyr   rb   rc   )r   rH   r   ry   r   r   r   Ú	test_copy›  s   zExpandingButtonTest.test_copyc                 C   s„   	 |   ¡ }tddd|ƒ}tƒ |_tdtd"}|jtƒ d |  |jd¡ |  |j	d d	 d¡ W d   ƒ d S 1 s;w   Y  d S )
NrZ   r‰   rj   zidlelib.squeezer.view_textrˆ   r‘   r*   r   r(   )
r‡   r   r   Zselection_ownr   r   Úviewr   rb   r   )r   rH   r   Zmock_view_textr   r   r   Ú	test_view¯  s   "÷zExpandingButtonTest.test_viewc                 C   s¦   	 |   ¡ }tddd|ƒ}tdƒ9}tƒ }||_tƒ }d|_d|_|j|d |  |j	j
t|jƒ¡ |jD ]^}}|j	j|td q4W d   ƒ d S 1 sLw   Y  d S )NrZ   r‰   rj   ztkinter.Menur2   r‘   )ÚlabelZcommand)r‡   r   r   r   r_   ÚxÚyZcontext_menu_eventr   Zadd_commandrb   rd   Zrmenu_specsZassert_any_callr	   )r   rH   r   Z	mock_MenuZ	mock_menuZ
mock_eventrž   Údatar   r   r   Ú
test_rmenuÀ  s"   

ÿÿ"÷zExpandingButtonTest.test_rmenuN)r=   r>   r?   r‡   r   r   rY   r—   r™   r›   r   r¢   r   r   r   r   r…   0  s    

#r…   Ú__main__r(   )Ú	verbosity)$Útextwrapr   Útkinterr   r   ZunittestZunittest.mockr   r   r   r   r	   Ztest.supportr
   Zidlelib.configr   Zidlelib.percolatorr   Zidlelib.squeezerr   r   r   Zidlelibr   Zidlelib.textviewr   Zidlelib.tooltipr   r`   r   ZTestCaser   r@   r…   r=   r€   r   r   r   r   Ú<module>   s,    / ` "ÿ