
    z%iL                     p   	 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
j8                  Zd Z G d dej<                        Z G d dej<                        Z  G d dej<                        Z!e"dk(  r ejF                  d       yy)    )dedent)TextTkN)MockNonCallableMagicMockpatchsentinelANY)requires)idleConf)
Percolator)count_lines_with_wrappingExpandingButtonSqueezer)macosx)	view_text)Hovertipc                     	 t        d       t               j                          fd}| j                  |       S )Nguic                  F     j                           j                          y N)update_idletasksdestroyroots   S/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/idlelib/idle_test/test_squeezer.pycleanup_rootz&get_test_tk_root.<locals>.cleanup_root   s        )r   r   withdraw
addCleanup)test_instancer   r   s     @r   get_test_tk_rootr"      s7    4UO4DMMO \*Kr   c                   >    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
y	)
CountLinesTestc                 :    | j                  |t        ||            S r   assertEqualr   )selfexpectedtext	linewidths       r   checkzCountLinesTest.check$   s"    %dI6
 	
r   c                 <    	 | j                  t        d      d       y )N r   r&   r(   s    r   test_count_emptyzCountLinesTest.test_count_empty*   s    (226:r   c                 <    	 | j                  t        d      d       y )Nz
text   r&   r/   s    r   !test_count_begins_with_empty_linez0CountLinesTest.test_count_begins_with_empty_line.   s    =28<a@r   c                 <    	 | j                  t        d      d       y )Nztext
   r&   r/   s    r   test_count_ends_with_empty_linez.CountLinesTest.test_count_ends_with_empty_line2   s    ;28<a@r   c                 <    	 | j                  t        d      d       y )Nz1
2
3
   r&   r/   s    r   test_count_several_linesz'CountLinesTest.test_count_several_lines6   s    .2;?Cr   c                 |    | j                  ddd       | j                  ddd       | j                  ddd       y )	Nr5   
P   r)   r*   r+   r2   


   z










r,   r/   s    r   test_empty_lineszCountLinesTest.test_empty_lines:   s8    

ADB
7

AFb
9

BY"
=r   c                 T    | j                  ddd       | j                  ddd       y )Nr8   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar<   r=   zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
r@   r/   s    r   test_long_linezCountLinesTest.test_long_line?   s'    

AI
<

A$4
Cr   c                     t        d      }| j                  d|d       | j                  d|dz   d       | j                  d|d       | j                  d|d	       | j                  d
|d       y )Nz            13 characters
            43 is the number of characters on this line

            7 chars
            13 characters   r<   r=   r;      (            r?   )r   r,   )r(   r*   s     r   $test_several_lines_different_lengthsz3CountLinesTest.test_several_lines_different_lengthsC   sq       	

ADB
7

AD4K2
>

ADB
7

ADB
7

BTR
8r   N)__name__
__module____qualname__r,   r0   r3   r6   r9   rA   rD   rL    r   r   r$   r$   "   s1    ;
;AAD>
D9r   r$   c                   n    e Zd Z	 ddZddZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zy)SqueezerTestc                     	 t               }d|_        |rDt        |       |_        | j	                  |j                        }|x|_        |j                  _        |S )Nr<   r   )r   widthr"   r   make_text_widgetr*   perbottom)r(   with_text_widgeteditwintext_widgets       r   make_mock_editor_windowz$SqueezerTest.make_mock_editor_windowS   sR    2&(+D1GL//W\\/BK0;;GL7;;-r   Nc                 B    	 || j                         }t        |      }|S r   )r[   r   )r(   editor_windowsqueezers      r   make_squeezer_instancez#SqueezerTest.make_squeezer_instance_   s(    J  88:MM*r   c                 d    |t        |       }t        |      }d|d<   |j                  dd       |S )N)Courierr?   fontiomark1.0)r"   r   mark_set)r(   r   rZ   s      r   rU   zSqueezerTest.make_text_widgetf   s:    <#D)D4j-FXu-r   c                     t        j                  |||      }t        j                  ||||       | j                  t         j                  ||||       y r   )r   	GetOption	SetOptionr    )r(   
configTypesectionoptionvalueprev_vals         r    set_idleconf_option_with_cleanupz-SqueezerTest.set_idleconf_option_with_cleanupn   sG    %%j'6B:w>**"GVX	?r   c                 `   	 | j                         }| j                  |      }dD ]o  \  }}}| j                  |||      5  t        |      }t	        j
                  |d|      5  | j                  |j                  |      |       d d d        d d d        q y # 1 sw Y   xY w# 1 sw Y   xY w)N))z'\n'r<   r5   )z'\n' * 3r<   r8   )z'a' * 40 + '\n'r<   r5   )z'a' * 80 + '\n'r<   r5   )z'a' * 200 + '\n'r<   r8   )'aa\t' * 20r<   r2   )z'aa\t' * 21r<   r8   )rp   rH      )	text_code
line_widthr)   rT   )r[   r_   subTestevalr   objectr'   count_lines)r(   rY   r^   rr   rs   r)   r*   s          r   test_count_lineszSqueezerTest.test_count_linest   s    >..0..w7	0
 	K+Iz8 	)3'/  1 K I\\'7J? K$$X%9%9$%?JK	K K	KK K	K Ks$    #B$#"BB$B!B$$B-	c                     	 | j                         }| j                  |      }| j                  |j                  |       | j	                  |j
                  g        y r   )r[   r_   assertIsrY   r'   expandingbuttons)r(   rY   r^   s      r   	test_initzSqueezerTest.test_init   sM    6..0..w7h&&022B7r   c                    	 | j                         }ddddz  dfD ]  }t        t              x|_        }| j	                  |      }| j                  |j                  j                  |d      t               | j                  |j                  d       |j                  |d       | j                  t        |j                        d	        y )
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_valuerP   r5   r   )r[   r   SENTINEL_VALUEwriter_   r'   rY   
call_countassert_called_withlenr{   r(   rY   r*   
orig_writer^   s        r   test_write_no_tagszSqueezerTest.test_write_no_tags   s    N..0t!35IJ 	@D)->)JJGMJ227;HX--33D"=~NZ22A6))$3S!:!:;Q?	@r   c                    	 ddddz  dfD ]  }| j                         }t        |j                  _        |j                  }| j	                  |      }| j                  |j                  j                  |d      t               | j                  |j                  d       |j                  |d       | j                  t        |j                        d        y )	Nr.   r~   r   r   r   stderrr5   r   )r[   r   r   r   r_   r'   rY   r   r   r   r{   )r(   r*   rY   r   r^   s        r   test_write_not_stdoutz"SqueezerTest.test_write_not_stdout   s    Nt!35IJ 
	@D224G)7GMM& J227;HX--33D(C,.Z22A6))$9S!:!:;Q?
	@r   c                    	 | j                         }dD ]  }t        t              x|_        }| j	                  |      }d|_        | j                  |j                  j                  |d      t               | j                  |j                  d       |j                  |d       | j                  t        |j                        d        ddz  d	fD ]  }t        t              x|_        }| j	                  |      }d|_        | j                  |j                  j                  |d      d        | j                  |j                  d       | j                  t        |j                        d        y )
N)r.   r~   r   2   stdoutr5   r   r   r   r   )r[   r   r   r   r_   auto_squeeze_min_linesr'   rY   r   r   r   r{   r   s        r   test_write_stdoutzSqueezerTest.test_write_stdout   sO   N..0  		@D)->)JJGMJ227;H.0H+X--33D(C+-Z22A6))$9S!:!:;Q?		@ !4')=> 	@D)->)JJGMJ227;H.0H+X--33D(CTJZ22A6S!:!:;Q?	@r   c                 F   	 | j                  d      }|j                  }| j                  |      }d|_        t	        d      |_        |j                  dd       | j                  |j                  dd	      d
       | j                  t        |j                        d       y )NTrX   rF   rG   r   zTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
r   rd   endr;   r5   )r[   r*   r_   r   r   rw   r   r'   getr   r{   )r(   rY   rZ   r^   s       r   test_auto_squeezezSqueezerTest.test_auto_squeeze   s    O...Ell..w7*+'#3j(+6=X667;r   c                 \   	 dD ]  }| j                  d      }|j                  }| j                  |      }t        d      |_        |j                  dd|       |j                  dd       | j                  |j                  dd	      d
       | j                  t        |j                        d       |j                         }| j                  |d       | j                  |j                  dd	      d       | j                  t        |j                        d       | j                  |j                  d   j                  d       |j                  d   j                          | j                  |j                  dd	      d
       | j                  t        |j                        d        y )N)r   r   Tr   rG   r   rd   
SOME
TEXT
insertr   SOME
TEXT

r   breakr>   r5   z	SOME
TEXT)r[   r*   r_   r   rw   r   re   r'   r   r   r{   squeeze_current_textsexpand)r(   tag_namerY   rZ   r^   retvals         r   test_squeeze_current_textz&SqueezerTest.test_squeeze_current_text   sq   3, 	@H22D2IG!,,K227;H#'Q#7H  unh?  51[__UE:<LMS!:!:;Q? 224FVW-[__UE:FCS!:!:;Q?X66q9;;\J %%a(//1[__UE:<LMS!:!:;Q?1	@r   c                 0   	 | j                  d      }|j                  }| j                  |      }t        d      |_        |j                  ddd       |j                  dd       | j                  |j                  dd	      d
       | j                  t        |j                        d       |j                         }| j                  |d       | j                  |j                  dd	      d
       | j                  t        |j                        d       y )NTr   rG   r   rd   r   TAGr   r   r   r   r   )r[   r*   r_   r   rw   r   re   r'   r   r   r{   r   r(   rY   rZ   r^   r   s        r   )test_squeeze_current_text_no_allowed_tagsz6SqueezerTest.test_squeeze_current_text_no_allowed_tags   s    N...Ell..w7#3 	5.%8Xu-68HIX667; ..0)68HIX667;r   c                    	 | j                  d      }|j                  }| j                  |      }t        d      |_        |j                  ddd       |j                  dd       |j                          | j                  t        |j                        d	       |j                  dd
d       |j                  dd       |j                         }| j                  |d       | j                  |j                  dd      d       | j                  t        |j                        d       | j                  |j                  |j                  d   d|j                  d	                y )NTr   rG   r   rd   r   r   r   r5   zMORE
STUFF
r   r   z


r2   r   <)r[   r*   r_   r   rw   r   re   r   r'   r   r{   r   
assertTruecomparer   s        r   /test_squeeze_text_before_existing_squeezed_textz<SqueezerTest.test_squeeze_text_before_existing_squeezed_text   s9   @...Ell..w7#3 	5.(;Xu-%%'X667; 	5/8<Xu-..0)6AX667;++%%a(%%a(
 	r   c                    	 | j                  d      }| j                  |      }|j                  }|dz   }| j                  dddt	        |             t        j                          | j                  |j                  |       y )NTr   r?   mainPyShellzauto-squeeze-min-lines)r[   r_   r   rn   strr   reloadr'   )r(   rY   r^   orig_auto_squeeze_min_linesnew_auto_squeeze_min_liness        r   test_reloadzSqueezerTest.test_reload  s    -...E..w7&.&E&E# &A2%E"--I7*+	- 	883	5r   c                 .    	 t        j                          y r   )r   r   r/   s    r   !test_reload_no_squeezer_instancesz.SqueezerTest.test_reload_no_squeezer_instances+  s    Nr   )Fr   )rM   rN   rO   r[   r_   rU   rn   rx   r|   r   r   r   r   r   r   r   r   r   rP   r   r   rR   rR   Q   sU    '
?K,8
@@@0
<@:<(45"r   rR   c                   R    e Zd Z	 d Z ede      d        Zd Zd Zd Z	d Z
d	 Zy
)ExpandingButtonTestc                 .   	 t        |       }t               }t        |      |j                  _        t        |j                  j                        |j                  _        | j                  |j                  j                  j                         d|_	        |S )Nr   )
r"   r   r   rY   r*   r   rV   r    closer   )r(   r   r^   s      r   make_mock_squeezerz&ExpandingButtonTest.make_mock_squeezer4  st    >%6 $T
)(*:*:*?*?@((,,223 +-'r   zidlelib.squeezer.Hovertipautospecc                    	 | j                         }|j                  j                  }t        ddd|      }| j	                  |j
                  d       | j	                  |j                  |       | j                  d|j                  d      v        | j	                  |j                  dd      d       | j                  d	|j                                d
t        j                         rdndz  }| j                  ||j                                | j	                  |j                  d       |j                  |t         t                |j"                  d   d   }| j                  d|j%                                y )Nr~   TAGSr   z50 linesr*   rd   r   r;   z<Double-Button-1>z<Button-%s>23r5   )hover_delayr   zright-click)r   rY   r*   r   r'   r   masterr   cgetr   assertInbindr   isAquaTkr   r   r
   	call_argslower)r(   MockHovertipr^   rZ   expandingbuttonright_button_codetooltip_texts          r   r|   zExpandingButtonTest.test_init@  s>   ?**,&&++)&&"hG**F3 	//=
o&:&:6&BBC 	6= 	)?+?+?+AB)FOO4ES3O')=)=)?@ 	00!4''#'N $--a03m\%7%7%9:r   c                    	 | j                         }t        ddd|      }|j                  j                  }|j	                  d|       |j                  t                     }| 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                  |       y )Nr~   r   r   rd   windoweventr   zTEXT
end-1cr5   )r   r   rY   r*   window_creater   r   r'   r   indextag_nextranger{   remover   r   )r(   r^   r   rZ   r   text_end_indexs         r   test_expandzExpandingButtonTest.test_expand]  s   $**,)&&"hG &&++!!%!@ !''df'5& 	6A %**84?H2265A .1	3 	2299DDaH!!((;;OLr   c                 H   	 | j                         }ddz  }t        |dd|      }|j                          | j                  |j                         |j
                  }|j                  d|       t        d      5 }d|j                  _	        d|j                  _	        |j                  t               	      }d d d        | j                  d
       | j                  |j
                  j                  dd      d       t        d      5 }d|j                  _	        d|j                  _	        |j                  t               	      }d d d        | j                  |d        | j                  |j
                  j                  dd      |       y # 1 sw Y   xY w# 1 sw Y   TxY w)Nai r   r   rd   r   zidlelib.squeezer.messageboxFr   r   r   r.   T)r   r   set_is_dangerousr   is_dangerousr*   r   r   askokcancelr   askyesnor   r   r'   r   )r(   r^   r*   r   rZ   mock_msgboxr   s          r   test_expand_dangerous_oupputz0ExpandingButtonTest.test_expand_dangerous_oupputx  sz   N**,U{)$HE((*445 &**!!%!@ 01 	:[38K##005K  -$++$&+9F		: 	)--11%BBG 01 	:[37K##004K  -$++$&+9F		: 	&--11%BDI'	: 	:	: 	:s   :=F=FFF!c                    	 | j                         }t        ddd|      }t               |_        t               |_        |j                  t                     }| j                  |d        | j                  |j                  j                  d       | j                  |j                  j                  d       |j                  j                  d       y )Nr~   r   r   r   r5   )	r   r   r   clipboard_clearclipboard_appendcopyr'   r   r   )r(   r^   r   r   s       r   	test_copyzExpandingButtonTest.test_copy  s    " **,)&&"hG*.&'+/6( !%%DF%3& 	88CCQG99DDaH((;;FCr   c                 \   	 | j                         }t        ddd|      }t               |_        t	        dt
              5 }|j                  t                      | j                  |j                  d       | j                  |j                  d   d	   d       d d d        y # 1 sw Y   y xY w)
Nr~   r   r   zidlelib.squeezer.view_textr   r   r5   r   r2   )
r   r   r   selection_ownr   r   viewr'   r   r   )r(   r^   r   mock_view_texts       r   	test_viewzExpandingButtonTest.test_view  s    "**,)&&"hG(,%/)D 		E!  tv . ^66: ^55a8;VD		E 		E 		Es    AB""B+c                    	 | j                         }t        ddd|      }t        d      5 }t               }||_        t               }d|_        d|_        |j                  |       | j                  |j                  j                  t        |j                               |j                  D ]%  ^}}|j                  j                  |t               ' 	 d d d        y # 1 sw Y   y xY w)Nr~   r   r   ztkinter.Menur?   r   )labelcommand)r   r   r   r   r   xycontext_menu_eventr'   add_commandr   r   rmenu_specsassert_any_callr
   )r(   r^   r   	mock_Menu	mock_menu
mock_eventr   datas           r   
test_rmenuzExpandingButtonTest.test_rmenu  s    $**,)&&"hG>" 
	PiI%.I"JJLJL..Z.@Y22== !<!<=? / ; ; P%%55E35OP
	P 
	P 
	Ps   B)CC'N)rM   rN   rO   r   r   r   r|   r   r   r   r   r   rP   r   r   r   r   0  sE    .
 &:; ;;8M6!JFD(E"Pr   r   __main__r2   )	verbosity)$textwrapr   tkinterr   r   unittestunittest.mockr   r   r   r	   r
   test.supportr   idlelib.configr   idlelib.percolatorr   idlelib.squeezerr   r   r   idlelibr   idlelib.textviewr   idlelib.tooltipr   r   r"   TestCaser$   rR   r   rM   r   rP   r   r   <module>r     s        J J ! # )   & $((,9X&& ,9^\8$$ \~^P(++ ^PB zHMMA r   