+
     BiL                     z   R t ^ RIHt ^ RIHtHt ^ RIt^ RIHtH	t	H
t
HtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHt ^ R	IHt ^ R
IHt ^ RIHt ]P:                  tR t ! R R]P>                  4      t  ! R R]P>                  4      t! ! R R]P>                  4      t"]#R8X  d   ]PH                  ! ^R7       R# R# )zTest squeezer, coverage 95%)dedent)TextTkN)MockNonCallableMagicMockpatchsentinelANY)requires)idleConf)
Percolator)count_lines_with_wrappingExpandingButtonSqueezer)macosx)	view_text)Hovertipc                   a \        R4       \        4       oSP                  4        V3R lpV P                  V4       S# )z*Helper for tests: Create a root Tk object.guic                  H   < S P                  4        S P                  4        R # N)update_idletasksdestroyroots   6/usr/lib/python3.14/idlelib/idle_test/test_squeezer.pycleanup_root&get_test_tk_root.<locals>.cleanup_root   s        )r
   r   withdraw
addCleanup)test_instancer   r   s   & @r   get_test_tk_rootr"      s4    UO4DMMO \*Kr   c                   T   a  ] tR t^"t o RtR tR tR tR tR t	R t
R tR	 tR
tV tR# )CountLinesTestz1Tests for the count_lines_with_wrapping function.c                8    V P                  V\        W#4      4      # r   assertEqualr   )selfexpectedtext	linewidths   &&&&r   checkCountLinesTest.check$   s     %d6
 	
r   c                <    V P                  \        R4      ^ 4       R# )zTest with an empty string. Nr&   r(   s   &r   test_count_emptyCountLinesTest.test_count_empty*   s    226:r   c                <    V P                  \        R4      ^4       R# )z/Test with a string which begins with a newline.z
textNr&   r0   s   &r   !test_count_begins_with_empty_line0CountLinesTest.test_count_begins_with_empty_line.       28<a@r   c                <    V P                  \        R4      ^4       R# )z-Test with a string which ends with a newline.ztext
Nr&   r0   s   &r   test_count_ends_with_empty_line.CountLinesTest.test_count_ends_with_empty_line2   r6   r   c                <    V P                  \        R4      ^4       R# )z Test with several lines of text.z1
2
3
Nr&   r0   s   &r   test_count_several_lines'CountLinesTest.test_count_several_lines6   s    2;?Cr   c                ~    V P                  ^R^PR7       V P                  ^R^PR7       V P                  ^
R^PR7       R# )   
r)   r*   r+   

Nz










r,   r0   s   &r   test_empty_linesCountLinesTest.test_empty_lines:   s8    

ADB
7

AFb
9

BY"
=r   c                V    V P                  ^R^PR7       V P                  ^R^PR7       R# )   r@   Naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
rB   r0   s   &r   test_long_lineCountLinesTest.test_long_line?   s'    

AI
<

A$4
Cr   c                    \        R 4      pV P                  ^V^PR7       V P                  ^VR,           ^PR7       V P                  ^V^(R7       V P                  ^V^R7       V P                  ^V^
R7       R# )z            13 characters
            43 is the number of characters on this line

            7 chars
            13 charactersr@   r?   N)r   r,   )r(   r*   s   & r   $test_several_lines_different_lengths3CountLinesTest.test_several_lines_different_lengthsC   sq       	

ADB
7

AD4K2
>

ADB
7

ADB
7

BTR
8r    N)__name__
__module____qualname____firstlineno____doc__r,   r1   r4   r8   r;   rC   rH   rK   __static_attributes____classdictcell____classdict__s   @r   r$   r$   "   s9     ;
;AAD>
D9 9r   r$   c                      a  ] tR t^Qt o RtRR ltRR ltRR ltR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tRtV tR# )SqueezerTestzTests for the Squeezer class.c                    \        4       p^PVn        V'       dE   \        V 4      Vn        V P	                  VP                  R7      pV;Vn        VP                  n        V# )z$Create a mock EditorWindow instance.r   )r   widthr"   r   make_text_widgetr*   perbottom)r(   with_text_widgeteditwintext_widgets   &&  r   make_mock_editor_window$SqueezerTest.make_mock_editor_windowS   sO    &(+D1GL//W\\/BK0;;GL7;;-r   Nc                D    Vf   V P                  4       p\        V4      pV# )z<Create an actual Squeezer instance with a mock EditorWindow.)ra   r   )r(   editor_windowsqueezers   && r   make_squeezer_instance#SqueezerTest.make_squeezer_instance_   s%      88:MM*r   c                h    Vf   \        V 4      p\        V4      pRVR&   VP                  RR4       V# )Nfontiomark1.0)Courier
   )r"   r   mark_set)r(   r   r`   s   && r   r[   SqueezerTest.make_text_widgetf   s:    <#D)D4j-FXu-r   c                    \         P                  ! WV4      p\         P                  ! WW44       V P                  \         P                  WW54       R # r   )r   	GetOption	SetOptionr    )r(   
configTypesectionoptionvalueprev_vals   &&&&& r    set_idleconf_option_with_cleanup-SqueezerTest.set_idleconf_option_with_cleanupn   s=    %%j6B:>**"V	?r   c           
        V P                  4       pV P                  V4      pR F  w  r4pV P                  VVVR7      ;_uu_ 4        \        V4      p\        P
                  ! VRV4      ;_uu_ 4        V P                  VP                  V4      V4       RRR4       RRR4       K  	  R#   + '       g   i     L; i  + '       g   i     K  ; i)z0Test Squeezer.count_lines() with various inputs.)	text_code
line_widthr)   rZ   N))z'\n'P   r>   )z'\n' * 3r}   rF   )z'a' * 40 + '\n'r}   r>   )z'a' * 80 + '\n'r}   r>   )z'a' * 200 + '\n'r}   rF   )'aa\t' * 20r}      )z'aa\t' * 21r}   rF   )r~   (      )ra   rf   subTestevalr   objectr'   count_lines)r(   r_   re   r{   r|   r)   r*   s   &      r   test_count_linesSqueezerTest.test_count_linest   s    ..0..w7	0
+I8 	)3'/  1 1 I\\'7J??$$X%9%9$%?J @	1 1	0
 @?	1 1 1s$   ,B=2"B*B=*B:5B==Cc                    V P                  4       pV P                  V4      pV P                  VP                  V4       V P	                  VP
                  . 4       R# )z(Test the creation of Squeezer instances.N)ra   rf   assertIsr_   r'   expandingbuttons)r(   r_   re   s   &  r   	test_initSqueezerTest.test_init   sJ    ..0..w7h&&022B7r   c                   V P                  4       pRRRR,          R3 F  p\        \        R7      ;Vn        pV P	                  V4      pV P                  VP                  P                  VR4      \        4       V P                  VP                  ^4       VP                  VR4       V P                  \        VP                  4      ^ 4       K  	  R# )	@Test Squeezer's overriding of the EditorWindow's write() method.r/   TEXT	LONG TEXT  return_valueNL  MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
MANY_LINES
rM   )ra   r   SENTINEL_VALUEwriterf   r'   r_   
call_countassert_called_withlenr   r(   r_   r*   
orig_writere   s   &    r   test_write_no_tagsSqueezerTest.test_write_no_tags   s    ..0t!35IJD)->)JJGMJ227;HX--33D"=~NZ22A6))$3S!:!:;Q? Kr   c                   RRRR,          R3 F  pV P                  4       p\        VP                  n        VP                  pV P	                  V4      pV P                  VP                  P                  VR4      \        4       V P                  VP                  ^4       VP                  VR4       V P                  \        VP                  4      ^ 4       K  	  R# )r   r/   r   r   r   stderrNr   )ra   r   r   r   rf   r'   r_   r   r   r   r   )r(   r*   r_   r   re   s   &    r   test_write_not_stdout"SqueezerTest.test_write_not_stdout   s    t!35IJD224G)7GMM& J227;HX--33D(C,.Z22A6))$9S!:!:;Q? Kr   c                   V P                  4       pR F  p\        \        R7      ;Vn        pV P	                  V4      p^2Vn        V P                  VP                  P                  VR4      \        4       V P                  VP                  ^4       VP                  VR4       V P                  \        VP                  4      ^ 4       K  	  RR,          R3 F  p\        \        R7      ;Vn        pV P	                  V4      p^2Vn        V P                  VP                  P                  VR4      R4       V P                  VP                  ^ 4       V P                  \        VP                  4      ^4       K  	  R# )r   r   stdoutr   r   N)r/   r   r   )ra   r   r   r   rf   auto_squeeze_min_linesr'   r_   r   r   r   r   r   s   &    r   test_write_stdoutSqueezerTest.test_write_stdout   s>   ..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   V P                  RR7      pVP                  pV P                  V4      p^Vn        \	        ^R7      Vn        VP                  R	R4       V P                  VP                  RR4      R4       V P                  \        VP                  4      ^4       R# )
zATest that the auto-squeezing creates an ExpandingButton properly.Tr^   r   r   rk   endr?   NzTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
)ra   r*   rf   r   r   r   r   r'   getr   r   )r(   r_   r`   re   s   &   r   test_auto_squeezeSqueezerTest.test_auto_squeeze   s    ...Ell..w7*+'#3j(+6=X667;r   c                p   R EF  pV P                  RR7      pVP                  pV P                  V4      p\        ^R7      Vn        VP                  RRV4       VP                  RR4       V P                  VP                  RR4      R4       V P                  \        VP                  4      ^ 4       VP                  4       pV P                  VR	4       V P                  VP                  RR4      R
4       V P                  \        VP                  4      ^4       V P                  VP                  ^ ,          P                  R4       VP                  ^ ,          P                  4        V P                  VP                  RR4      R4       V P                  \        VP                  4      ^ 4       EK  	  R# )z%Test the squeeze_current_text method.Tr   r   rk   
SOME
TEXT
insertr   SOME
TEXT

breakrA   z	SOME
TEXTN)r   r   )ra   r*   rf   r   r   r   rn   r'   r   r   r   squeeze_current_textsexpand)r(   tag_namer_   r`   re   retvals   &     r   test_squeeze_current_text&SqueezerTest.test_squeeze_current_text   si    -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   V P                  RR7      pVP                  pV P                  V4      p\        ^R7      Vn        VP                  RRR4       VP                  RR4       V P                  VP                  RR4      R	4       V P                  \        VP                  4      ^ 4       VP                  4       pV P                  VR
4       V P                  VP                  RR4      R	4       V P                  \        VP                  4      ^ 4       R# )z@Test that the event doesn't squeeze text without a relevant tag.Tr   r   rk   r   TAGr   r   r   r   N)ra   r*   rf   r   r   r   rn   r'   r   r   r   r   r(   r_   r`   re   r   s   &    r   )test_squeeze_current_text_no_allowed_tags6SqueezerTest.test_squeeze_current_text_no_allowed_tags   s    ...Ell..w7#3 	5.%8Xu-68HIX667; ..0)68HIX667;r   c                   V P                  RR7      pVP                  pV P                  V4      p\        ^R7      Vn        VP                  RRR4       VP                  RR4       VP                  4        V P                  \        VP                  4      ^4       VP                  RRR4       VP                  RR4       VP                  4       pV P                  VR	4       V P                  VP                  RR
4      R4       V P                  \        VP                  4      ^4       V P                  VP                  VP                  ^ ,          RVP                  ^,          4      4       R# )z2Test squeezing text before existing squeezed text.Tr   r   rk   r   r   r   zMORE
STUFF
r   r   z


<N)ra   r*   rf   r   r   r   rn   r   r'   r   r   r   
assertTruecomparer   s   &    r   /test_squeeze_text_before_existing_squeezed_text<SqueezerTest.test_squeeze_text_before_existing_squeezed_text   s6   ...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                   V P                  RR7      pV P                  V4      pVP                  pV^
,           pV P                  RRR\	        V4      4       \
        P                  ! 4        V P                  VP                  V4       R# )zTest the reload() class-method.Tr   mainPyShellzauto-squeeze-min-linesN)ra   rf   r   rx   strr   reloadr'   )r(   r_   re   orig_auto_squeeze_min_linesnew_auto_squeeze_min_liness   &    r   test_reloadSqueezerTest.test_reload  s    ...E..w7&.&E&E# &A2%E"--I7*+	- 	883	5r   c                0    \         P                  ! 4        R# )z@Test that Squeezer.reload() runs without any instances existing.N)r   r   r0   s   &r   !test_reload_no_squeezer_instances.SqueezerTest.test_reload_no_squeezer_instances+  s    r   rM   )Fr   )rN   rO   rP   rQ   rR   ra   rf   r[   rx   r   r   r   r   r   r   r   r   r   r   r   rS   rT   rU   s   @r   rX   rX   Q   s]     '
?K,8
@@@0
<@:<(45" r   rX   c                   h   a  ] tR tRt o RtR t]! R]R7      R 4       tR t	R t
R	 tR
 tR tRtV tR# )ExpandingButtonTesti0  z$Tests for the ExpandingButton class.c                ,   \        V 4      p\        4       p\        V4      VP                  n        \        VP                  P                  4      VP                  n        V P                  VP                  P                  P                  4       ^2Vn	        V# )z0Helper for tests: Create a mock Squeezer object.)
r"   r   r   r_   r*   r   r\   r    closer   )r(   r   re   s   &  r   make_mock_squeezer&ExpandingButtonTest.make_mock_squeezer4  sq    %6 $T
)(*:*:*?*?@((,,223 +-'r   zidlelib.squeezer.Hovertipautospecc                   V P                  4       pVP                  P                  p\        RR^2V4      pV P	                  VP
                  R4       V P	                  VP                  V4       V P                  RVP                  R4      9   4       V P	                  VP                  RR4      R4       V P                  RVP                  4       4       R	\        P                  ! 4       '       d   R
MR,          pV P                  WTP                  4       4       V P	                  VP                  ^4       VP                  V\         \         R7       VP"                  ^ ,          ^,          pV P                  RVP%                  4       4       R# )z1Test the simplest creation of an ExpandingButton.r   TAGSz50 linesr*   rk   r   r?   z<Double-Button-1>z<Button-%s>23)hover_delayzright-clickN)r   r_   r*   r   r'   r   masterr   cgetr   assertInbindr   isAquaTkr   r   r	   	call_argslower)r(   MockHovertipre   r`   expandingbuttonright_button_codetooltip_texts   &&     r   r   ExpandingButtonTest.test_init@  s>    **,&&++)&&"hG**F3 	//=
o&:&:6&BBC 	6= 	)?+?+?+AB)FOO4E4ES3O')=)=)?@ 	00!4''#'N $--a03m\%7%7%9:r   c                   V P                  4       p\        RR^2V4      pVP                  P                  pVP	                  RVR7       VP                  \        4       R7      pV P                  VR4       V P                  VP                  RR4      R4       VP                  R	4      pV P                  VP                  RV4      R4       V P                  VP                  RR4      RV34       V P                  VP                  P                  P                  ^4       VP                  P                  P                  V4       R# )
zTest the expand event.r   r   rk   windoweventNr   zTEXT
end-1c)r   r   r_   r*   window_creater   r   r'   r   indextag_nextranger   remover   r   )r(   re   r   r`   r   text_end_indexs   &     r   test_expand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                   V P                  4       pRR,          p\        VR^2V4      pVP                  4        V P                  VP                  4       VP
                  pVP                  RVR7       \        R4      ;_uu_ 4       pRVP                  n	        RVP                  n	        VP                  \        4       R7      pRRR4       V P                  XR	4       V P                  VP
                  P                  RR
4      R4       \        R4      ;_uu_ 4       pRVP                  n	        RVP                  n	        VP                  \        4       R7      pRRR4       V P                  VR4       V P                  VP
                  P                  RR
4      V4       R#   + '       g   i     L; i  + '       g   i     Lc; i)z@Test that expanding very long output asks user for confirmation.ar   rk   r   zidlelib.squeezer.messageboxFr   Nr   r   r/   Ti )r   r   set_is_dangerousr   is_dangerousr*   r   r   askokcancelr   askyesnor   r   r'   r   )r(   re   r*   r   r`   mock_msgboxr   s   &      r   test_expand_dangerous_oupput0ExpandingButtonTest.test_expand_dangerous_oupputx  so   **,U{)$HE((*445 &**!!%!@ 011[38K##005K  -$++$&+9F	 2 	)--11%BBG 011[37K##004K  -$++$&+9F	 2 	&--11%BDI' 21 21s   =F =F3 F0	3G	c                   V P                  4       p\        RR^2V4      p\        4       Vn        \        4       Vn        VP                  \        4       R7      pV P                  VR4       V P                  VP                  P                  ^4       V P                  VP                  P                  ^4       VP                  P                  R4       R# )zTest the copy event.r   r   r   N)	r   r   r   clipboard_clearclipboard_appendcopyr'   r   r   )r(   re   r   r   s   &   r   	test_copyExpandingButtonTest.test_copy  s    
 **,)&&"hG*.&'+/6( !%%DF%3& 	88CCQG99DDaH((;;FCr   c                   V P                  4       p\        RR^2V4      p\        4       Vn        \	        R\
        R7      ;_uu_ 4       pVP                  \        4       R7       V P                  VP                  ^4       V P                  VP                  ^ ,          ^,          R4       RRR4       R#   + '       g   i     R# ; i)zTest the view event.r   r   zidlelib.squeezer.view_textr   r   N)
r   r   r   selection_ownr   r   viewr'   r   r   )r(   re   r   mock_view_texts   &   r   	test_viewExpandingButtonTest.test_view  s    **,)&&"hG(,%/)DD!  tv . ^66: ^55a8;VD EDDDs   A!B22C	c                   V P                  4       p\        RR^2V4      p\        R4      ;_uu_ 4       p\        4       pWCn        \        4       p^
Vn        ^
Vn        VP                  VR7       V P                  VP                  P                  \        VP                  4      4       VP                   F%  vrgVP                  P                  V\        R7       K'  	  RRR4       R#   + '       g   i     R# ; i)zTest the context menu.r   r   ztkinter.Menur   )labelcommandN)r   r   r   r   r   xycontext_menu_eventr'   add_commandr   r   rmenu_specsassert_any_callr	   )r(   re   r   	mock_Menu	mock_menu
mock_eventr  datas   &       r   
test_rmenuExpandingButtonTest.test_rmenu  s    **,)&&"hG>""iI%."JJLJL..Z.@Y22== !<!<=? / ; ;%%55E35O !< #"""s   B)C%%C6	rM   N)rN   rO   rP   rQ   rR   r   r   r   r   r   r   r  r	  r  rS   rT   rU   s   @r   r   r   0  sN     .
 &:; ;;8M6!JFD(E"P Pr   r   __main__)	verbosity)%rR   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$   rX   r   rN   r   rM   r   r   <module>r(     s        J J ! # )   & $((,9X&& ,9^\8$$ \~^P(++ ^PB zMMA r   