
    /hhL                     j   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  \
R8                  rS r " S S\R<                  5      r " S S\R<                  5      r  " S S\R<                  5      r!\"S:X  a  \RF                  " SS9  gg)    )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$ )N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                   D    \ 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"   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 )N r   r(   r*   s    r   test_count_emptyCountLinesTest.test_count_empty*   s    226:r   c                 :    U R                  [        S5      S5        g )Nz
text   r(   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 )Nztext
   r(   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 )Nz1
2
3
   r(   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__r.   r3   r7   r<   r@   rI   rM   rV   __static_attributes__rX   r   r   r%   r%   "   s.    
;AAD>
D9r   r%   c                   z    \ 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   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$ )NrD   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$ r   )ri   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   rh   s      r   rc   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)N))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+   rb   )ri   rn   subTestevalr   objectr)   count_lines)r*   rg   rm   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 r   )ri   rn   assertIsrg   r)   expandingbuttons)r*   rg   rm   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 )
Nr1   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   )ri   r   SENTINEL_VALUEwritern   r)   rg   
call_countassert_called_withlenr   r*   rg   r,   
orig_writerm   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 )	Nr1   r   r   r   r   stderrr;   r   )ri   r   r   r   rn   r)   rg   r   r   r   r   )r*   r,   rg   r   rm   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 )
N)r1   r   r   2   stdoutr;   r   r   r   r   )ri   r   r   r   rn   auto_squeeze_min_linesr)   rg   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 )NTrf   rP   rQ   r   zTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
r   rt   endrC   r;   )ri   r,   rn   r   r   r   r   r)   getr   r   )r*   rg   rh   rm   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 )N)r   r   Tr   rQ   r   rt   
SOME
TEXT
insertr   SOME
TEXT

r   breakrF   r;   z	SOME
TEXT)ri   r,   rn   r   r   r   ru   r)   r   r   r   squeeze_current_textsexpand)r*   tag_namerg   rh   rm   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 )NTr   rQ   r   rt   r   TAGr   r   r   r   r   )ri   r,   rn   r   r   r   ru   r)   r   r   r   r   r*   rg   rh   rm   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 )NTr   rQ   r   rt   r   r   r   r;   zMORE
STUFF
r   r   z


r6   r   <)ri   r,   rn   r   r   r   ru   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 )NTr   rG   mainPyShellzauto-squeeze-min-lines)ri   rn   r   r   strr   reloadr)   )r*   rg   rm   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 r   )r   r   r2   s    r   !test_reload_no_squeezer_instances.SqueezerTest.test_reload_no_squeezer_instances+  s    r   rX   )Fr   )rY   rZ   r[   r\   ri   rn   rc   r   r   r   r   r   r   r   r   r   r   r   r   r]   rX   r   r   r_   r_   Q   sR    
?K,8
@@@0
<@:<(45"r   r_   c                   R    \ 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  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$ )Nr   )
r#   r   r   rg   r,   r   rd   r!   closer   )r*   r   rm   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 )Nr   TAGSr   z50 linesr,   rt   r   rC   z<Double-Button-1>z<Button-%s>23r;   )hover_delayr   zright-click)r   rg   r,   r   r)   r   masterr   cgetr   assertInbindr   isAquaTkr   r   r
   	call_argslower)r*   MockHovertiprm   rh   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 )Nr   r   r   rt   windoweventr   zTEXT
end-1cr;   )r   r   rg   r,   window_creater   r   r)   r   indextag_nextranger   remover   r   )r*   rm   r   rh   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)Nai r   r   rt   r   zidlelib.squeezer.messageboxFr   r   r   r1   T)r   r   set_is_dangerousr   is_dangerousr,   r   r   askokcancelr   askyesnor   r   r)   r   )r*   rm   r,   r   rh   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 )Nr   r   r   r   r;   )	r   r   r   clipboard_clearclipboard_appendcopyr)   r   r   )r*   rm   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)
Nr   r   r   zidlelib.squeezer.view_textr   r   r;   r   r6   )
r   r   r   selection_ownr   r   viewr)   r   r   )r*   rm   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)Nr   r   r   ztkinter.MenurG   r   )labelcommand)r   r   r   r   r   xycontext_menu_eventr)   add_commandr   r   rmenu_specsassert_any_callr
   )r*   rm   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]   rX   r   r   r   r   0  sB    
 &:; ;;8M6!JFD(E"Pr   r   __main__r6   )	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%   r_   r   rY   r   rX   r   r   <module>r,     s       J J ! # )   & $((,9X&& ,9^\8$$ \~^P(++ ^PB zMMA r   