
    /hhL                     n   S r SSKJr  SSKJrJr  SSKrSSKJrJ	r	J
r
JrJr  SSKJr  SSKJr  SSKJr  SS	KJrJrJr  SS
KJr  SSKJr  SSKJr  \R:                  rS r " S S\R>                  5      r  " S S\R>                  5      r! " S S\R>                  5      r"\#S:X  a  \RH                  " SS9  gg)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                    ^ [        S5        [        5       mTR                  5         U4S jnU R                  U5        T$ )z*Helper for tests: Create a root Tk object.guic                  F   > T R                  5         T R                  5         g N)update_idletasksdestroyroots   H/opt/python-3.13.8/usr/lib/python3.13/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                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)CountLinesTest"   z1Tests for the count_lines_with_wrapping function.c                 8    U R                  U[        X#5      5      $ r   assertEqualr   )selfexpectedtext	linewidths       r   checkCountLinesTest.check$   s     %d6
 	
r   c                 :    U R                  [        S5      S5        g)zTest with an empty string. r   Nr(   r*   s    r   test_count_emptyCountLinesTest.test_count_empty*   s    226:r   c                 :    U R                  [        S5      S5        g)z/Test with a string which begins with a newline.z
text   Nr(   r2   s    r   !test_count_begins_with_empty_line0CountLinesTest.test_count_begins_with_empty_line.       28<a@r   c                 :    U R                  [        S5      S5        g)z-Test with a string which ends with a newline.ztext
   Nr(   r2   s    r   test_count_ends_with_empty_line.CountLinesTest.test_count_ends_with_empty_line2   r9   r   c                 :    U R                  [        S5      S5        g)z Test with several lines of text.z1
2
3
   Nr(   r2   s    r   test_count_several_lines'CountLinesTest.test_count_several_lines6   s    2;?Cr   c                 j    U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  g )	Nr;   
P   r+   r,   r-   r6   


   z










r.   r2   s    r   test_empty_linesCountLinesTest.test_empty_lines:   s8    

ADB
7

AFb
9

BY"
=r   c                 H    U R                  SSSS9  U R                  SSSS9  g )Nr?   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarD   rE   zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
rH   r2   s    r   test_long_lineCountLinesTest.test_long_line?   s'    

AI
<

A$4
Cr   c                     [        S5      nU R                  SUSS9  U R                  SUS-   SS9  U R                  SUSS9  U R                  SUS	S9  U R                  S
USS9  g )Nz            13 characters
            43 is the number of characters on this line

            7 chars
            13 characters   rD   rE   rC      (            rG   )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.   r3   r7   r<   r@   rI   rM   rV   __static_attributes__rX   r   r   r%   r%   "   s1    ;
;AAD>
D9r   r%   c                   ~    \ rS rSrSrSS jrSS jrSS jrS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rSrg)SqueezerTestQ   zTests for the Squeezer class.c                     [        5       nSUl        U(       aA  [        U 5      Ul        U R	                  UR                  S9nU=Ul        UR                  l        U$ )z$Create a mock EditorWindow instance.rD   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                 B    Uc  U R                  5       n[        U5      nU$ )z<Create an actual Squeezer instance with a mock EditorWindow.)rj   r   )r*   editor_windowsqueezers      r   make_squeezer_instance#SqueezerTest.make_squeezer_instance_   s%      88:MM*r   c                 f    Uc  [        U 5      n[        U5      nSUS'   UR                  SS5        U$ )N)CourierrG   fontiomark1.0)r#   r   mark_set)r*   r   ri   s      r   rd   SqueezerTest.make_text_widgetf   s:    <#D)D4j-FXu-r   c                     [         R                  " XU5      n[         R                  " XX45        U R                  [         R                  XX55        g 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                 r   U R                  5       nU R                  U5      nS Hm  u  p4nU R                  UUUS9   [        U5      n[        R
                  " USU5         U R                  UR                  U5      U5        SSS5        SSS5        Mo     g! , (       d  f       N= f! , (       d  f       M  = f)z0Test Squeezer.count_lines() with various inputs.))z'\n'rD   r;   )z'\n' * 3rD   r?   )z'a' * 40 + '\n'rD   r;   )z'a' * 80 + '\n'rD   r;   )z'a' * 200 + '\n'rD   r?   )'aa\t' * 20rD   r6   )z'aa\t' * 21rD   r?   )r   rR      )	text_code
line_widthr+   rc   N)rj   ro   subTestevalr   objectr)   count_lines)r*   rh   rn   r   r   r+   r,   s          r   test_count_linesSqueezerTest.test_count_linest   s    ..0..w7	0
+I8 	)3'/  1 I\\'7J?$$X%9%9$%?J @	1 1	0
 @?	1 1s#   $B'"BB'
B$ B''
B6	c                     U R                  5       nU R                  U5      nU R                  UR                  U5        U R	                  UR
                  / 5        g)z(Test the creation of Squeezer instances.N)rj   ro   assertIsrh   r)   expandingbuttons)r*   rh   rn   s      r   	test_initSqueezerTest.test_init   sJ    ..0..w7h&&022B7r   c                    U R                  5       nSSSS-  S4 H  n[        [        S9=Ul        nU R	                  U5      nU R                  UR                  R                  US5      [        5        U R                  UR                  S5        UR                  US5        U R                  [        UR                  5      S	5        M     g
)@Test Squeezer's overriding of the EditorWindow's write() method.r1   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_valuerX   r;   r   N)rj   r   SENTINEL_VALUEwritero   r)   rh   
call_countassert_called_withlenr   r*   rh   r,   
orig_writern   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                    SSSS-  S4 H  nU R                  5       n[        UR                  l        UR                  nU R	                  U5      nU R                  UR                  R                  US5      [        5        U R                  UR                  S5        UR                  US5        U R                  [        UR                  5      S5        M     g	)
r   r1   r   r   r   r   stderrr;   r   N)rj   r   r   r   ro   r)   rh   r   r   r   r   )r*   r,   rh   r   rn   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                    U R                  5       nS H  n[        [        S9=Ul        nU R	                  U5      nSUl        U R                  UR                  R                  US5      [        5        U R                  UR                  S5        UR                  US5        U R                  [        UR                  5      S5        M     SS-  S	4 H  n[        [        S9=Ul        nU R	                  U5      nSUl        U R                  UR                  R                  US5      S
5        U R                  UR                  S5        U R                  [        UR                  5      S5        M     g
)r   )r1   r   r   2   stdoutr;   r   r   r   r   N)rj   r   r   r   ro   auto_squeeze_min_linesr)   rh   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                 8   U R                  SS9nUR                  nU R                  U5      nSUl        [	        SS9Ul        UR                  SS5        U R                  UR                  SS	5      S
5        U R                  [        UR                  5      S5        g)zATest that the auto-squeezing creates an ExpandingButton properly.Trg   rP   rQ   r   zTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
r   ru   endrC   r;   N)rj   r,   ro   r   r   r   r   r)   getr   r   )r*   rh   ri   rn   s       r   test_auto_squeezeSqueezerTest.test_auto_squeeze   s    ...Ell..w7*+'#3j(+6=X667;r   c                 R   S GH  nU R                  SS9nUR                  nU R                  U5      n[        SS9Ul        UR                  SSU5        UR                  SS5        U R                  UR                  SS	5      S
5        U R                  [        UR                  5      S5        UR                  5       nU R                  US5        U R                  UR                  SS	5      S5        U R                  [        UR                  5      S5        U R                  UR                  S   R                  S5        UR                  S   R                  5         U R                  UR                  SS	5      S
5        U R                  [        UR                  5      S5        GM     g)z%Test the squeeze_current_text method.)r   r   Tr   rQ   r   ru   
SOME
TEXT
insertr   SOME
TEXT

r   breakrF   r;   z	SOME
TEXTN)rj   r,   ro   r   r   r   rv   r)   r   r   r   squeeze_current_textsexpand)r*   tag_namerh   ri   rn   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                 "   U R                  SS9nUR                  nU R                  U5      n[        SS9Ul        UR                  SSS5        UR                  SS5        U R                  UR                  SS	5      S
5        U R                  [        UR                  5      S5        UR                  5       nU R                  US5        U R                  UR                  SS	5      S
5        U R                  [        UR                  5      S5        g)z@Test that the event doesn't squeeze text without a relevant tag.Tr   rQ   r   ru   r   TAGr   r   r   r   r   N)rj   r,   ro   r   r   r   rv   r)   r   r   r   r   r*   rh   ri   rn   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                    U R                  SS9nUR                  nU R                  U5      n[        SS9Ul        UR                  SSS5        UR                  SS5        UR                  5         U R                  [        UR                  5      S	5        UR                  SS
S5        UR                  SS5        UR                  5       nU R                  US5        U R                  UR                  SS5      S5        U R                  [        UR                  5      S5        U R                  UR                  UR                  S   SUR                  S	   5      5        g)z2Test squeezing text before existing squeezed text.Tr   rQ   r   ru   r   r   r   r;   zMORE
STUFF
r   r   z


r6   r   <N)rj   r,   ro   r   r   r   rv   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                    U R                  SS9nU R                  U5      nUR                  nUS-   nU R                  SSS[	        U5      5        [
        R                  " 5         U R                  UR                  U5        g)zTest the reload() class-method.Tr   rG   mainPyShellzauto-squeeze-min-linesN)rj   ro   r   r   strr   reloadr)   )r*   rh   rn   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                 .    [         R                  " 5         g)z@Test that Squeezer.reload() runs without any instances existing.N)r   r   r2   s    r   !test_reload_no_squeezer_instances.SqueezerTest.test_reload_no_squeezer_instances+  s    r   rX   )Fr   )rY   rZ   r[   r\   r]   rj   ro   rd   r   r   r   r   r   r   r   r   r   r   r   r   r^   rX   r   r   r`   r`   Q   sU    '
?K,8
@@@0
<@:<(45"r   r`   c                   V    \ rS rSrSrS r\" S\S9S 5       rS r	S r
S	 rS
 rS rSrg)ExpandingButtonTesti0  z$Tests for the ExpandingButton class.c                 ,   [        U 5      n[        5       n[        U5      UR                  l        [        UR                  R                  5      UR                  l        U R                  UR                  R                  R                  5        SUl	        U$ )z0Helper for tests: Create a mock Squeezer object.r   )
r#   r   r   rh   r,   r   re   r!   closer   )r*   r   rn   s      r   make_mock_squeezer&ExpandingButtonTest.make_mock_squeezer4  sq    %6 $T
)(*:*:*?*?@((,,223 +-'r   zidlelib.squeezer.Hovertipautospecc                    U R                  5       nUR                  R                  n[        SSSU5      nU R	                  UR
                  S5        U R	                  UR                  U5        U R                  SUR                  S5      ;   5        U R	                  UR                  SS5      S5        U R                  S	UR                  5       5        S
[        R                  " 5       (       a  SOS-  nU R                  XTR                  5       5        U R	                  UR                  S5        UR                  U[         [         S9  UR"                  S   S   nU R                  SUR%                  5       5        g)z1Test the simplest creation of an ExpandingButton.r   TAGSr   z50 linesr,   ru   r   rC   z<Double-Button-1>z<Button-%s>23r;   )hover_delayr   zright-clickN)r   rh   r,   r   r)   r   masterr   cgetr   assertInbindr   isAquaTkr   r   r
   	call_argslower)r*   MockHovertiprn   ri   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                 z   U R                  5       n[        SSSU5      nUR                  R                  nUR	                  SUS9  UR                  [        5       S9nU R                  US5        U R                  UR                  SS5      S	5        UR                  S
5      nU R                  UR                  SU5      S5        U R                  UR                  SS5      SU45        U R                  UR                  R                  R                  S5        UR                  R                  R                  U5        g)zTest the expand event.r   r   r   ru   windoweventNr   zTEXT
end-1cr;   )r   r   rh   r,   window_creater   r   r)   r   indextag_nextranger   remover   r   )r*   rn   r   ri   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                 H   U R                  5       nSS-  n[        USSU5      nUR                  5         U R                  UR                  5        UR
                  nUR                  SUS9  [        S5       nSUR                  l	        SUR                  l	        UR                  [        5       S	9nS
S
S
5        U R                  WS5        U R                  UR
                  R                  SS5      S5        [        S5       nSUR                  l	        SUR                  l	        UR                  [        5       S	9nS
S
S
5        U R                  US
5        U R                  UR
                  R                  SS5      U5        g
! , (       d  f       N= f! , (       d  f       N^= f)z@Test that expanding very long output asks user for confirmation.ai r   r   ru   r   zidlelib.squeezer.messageboxFr   Nr   r   r1   T)r   r   set_is_dangerousr   is_dangerousr,   r   r   askokcancelr   askyesnor   r   r)   r   )r*   rn   r,   r   ri   mock_msgboxr   s          r   test_expand_dangerous_oupput0ExpandingButtonTest.test_expand_dangerous_oupputx  si   **,U{)$HE((*445 &**!!%!@ 01[38K##005K  -$++$&+9F	 2 	)--11%BBG 01[37K##004K  -$++$&+9F	 2 	&--11%BDI' 21 21s   6:F:F
F
F!c                    U R                  5       n[        SSSU5      n[        5       Ul        [        5       Ul        UR                  [        5       S9nU R                  US5        U R                  UR                  R                  S5        U R                  UR                  R                  S5        UR                  R                  S5        g)zTest the copy event.r   r   r   r   Nr;   )	r   r   r   clipboard_clearclipboard_appendcopyr)   r   r   )r*   rn   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                 X   U R                  5       n[        SSSU5      n[        5       Ul        [	        S[
        S9 nUR                  [        5       S9  U R                  UR                  S5        U R                  UR                  S   S	   S5        S
S
S
5        g
! , (       d  f       g
= f)zTest the view event.r   r   r   zidlelib.squeezer.view_textr   r   r;   r   r6   N)
r   r   r   selection_ownr   r   viewr)   r   r   )r*   rn   r   mock_view_texts       r   	test_viewExpandingButtonTest.test_view  s    **,)&&"hG(,%/)D!  tv . ^66: ^55a8;VD EDDs   AB
B)c                    U R                  5       n[        SSSU5      n[        S5       n[        5       nXCl        [        5       nSUl        SUl        UR                  US9  U R                  UR                  R                  [        UR                  5      5        UR                   H"  tpgUR                  R                  U[        S9  M$     SSS5        g! , (       d  f       g= f)	zTest the context menu.r   r   r   ztkinter.MenurG   r   )labelcommandN)r   r   r   r   r   xycontext_menu_eventr)   add_commandr   r   rmenu_specsassert_any_callr
   )r*   rn   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
C$rX   N)rY   rZ   r[   r\   r]   r   r   r   r   r   r  r	  r  r  r^   rX   r   r   r   r   0  sE    .
 &:; ;;8M6!JFD(E"Pr   r   __main__r6   )	verbosity)%r]   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%   r`   r   rY   r   rX   r   r   <module>r.     s        J J ! # )   & $((,9X&& ,9^\8$$ \~^P(++ ^PB zMMA r   