£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<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re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&   Zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar)   )r   r   r   zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
)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 qW 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 rd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&   / ` *