Ë
    #´˜jÈL  ã                   ór  — d Z 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j:                  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jH                  d¬«       yy)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                 ó~   ‡— t        d«       t        «       Š‰j                  «        ˆfd„}| j                  |«       ‰S )z*Helper for tests: Create a root Tk object.Úguic                  óF   •— ‰ j                  «        ‰ j                  «        y ©N)Úupdate_idletasksÚdestroy©Úroots   €ú1lib/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"      s4   ø€ äˆU„OÜ‹4€DØ‡M�M„Oôð ×Ñ˜\Ô*à€Kr   c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚCountLinesTestz1Tests for the count_lines_with_wrapping function.c                 ó:   — | j                  |t        ||«      «      S r   ©ÚassertEqualr   )ÚselfÚexpectedÚtextÚ	linewidths       r   ÚcheckzCountLinesTest.check$   s"   € Ø×ÑØÜ% d¨IÓ6ó
ð 	
r   c                 ó:   — | j                  t        d«      d«       y)zTest with an empty string.Ú r   Nr&   ©r(   s    r   Útest_count_emptyzCountLinesTest.test_count_empty*   s   € à×ÑÔ2°2Ó6¸Õ:r   c                 ó:   — | j                  t        d«      d«       y)z/Test with a string which begins with a newline.z
texté   Nr&   r/   s    r   Ú!test_count_begins_with_empty_linez0CountLinesTest.test_count_begins_with_empty_line.   ó   € à×ÑÔ2°8Ó<¸aÕ@r   c                 ó:   — | j                  t        d«      d«       y)z-Test with a string which ends with a newline.ztext
é   Nr&   r/   s    r   Útest_count_ends_with_empty_linez.CountLinesTest.test_count_ends_with_empty_line2   r4   r   c                 ó:   — | j                  t        d«      d«       y)z Test with several lines of text.z1
2
3
é   Nr&   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 )	Nr6   Ú
éP   ©r)   r*   r+   r2   ú

é
   z










©r,   r/   s    r   Útest_empty_lineszCountLinesTest.test_empty_lines:   s8   € Ø�
‰
˜A D°Bˆ
Ô7Ø�
‰
˜A F°bˆ
Ô9Ø�
‰
˜B Y¸"ˆ
Õ=r   c                 óT   — | j                  ddd¬«       | j                  ddd¬«       y )Nr9   ÚÈaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar=   r>   zÉaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
rA   r/   s    r   Útest_long_linezCountLinesTest.test_long_line?   s'   € Ø�
‰
˜A I¸ˆ
Ô<Ø�
‰
˜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   € Üð ó ˆð 	�
‰
˜A D°Bˆ
Ô7Ø�
‰
˜A D¨4¡K¸2ˆ
Ô>Ø�
‰
˜A D°Bˆ
Ô7Ø�
‰
˜A D°Bˆ
Ô7Ø�
‰
˜B T°Rˆ
Õ8r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r,   r0   r3   r7   r:   rB   rE   rM   © r   r   r$   r$   "   s1   „ Ù;ò
ò;òAòAòDò>ò
Dó9r   r$   c                   óp   — e Zd 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)ÚSqueezerTestzTests for the Squeezer class.c                 ó´   — t        «       }d|_        |rDt        | «      |_        | j	                  |j                  ¬«      }|x|_        |j                  _        |S )z$Create a mock EditorWindow instance.r=   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   sO   € ä&Ó(ˆØˆŒáÜ+¨DÓ1ˆGŒLØ×/Ñ/°W·\±\Ð/ÓBˆKØ0;Ð;ˆGŒL˜7Ÿ;™;Ô-àˆr   Nc                 ó@   — |€| j                  «       }t        |«      }|S )z<Create an actual Squeezer instance with a mock EditorWindow.)r]   r   )r(   Úeditor_windowÚsqueezers      r   Úmake_squeezer_instancez#SqueezerTest.make_squeezer_instance_   s%   € àÐ Ø ×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   r\   s      r   rW   zSqueezerTest.make_text_widgetf   s:   € Øˆ<Ü# DÓ)ˆDÜ˜4“jˆØ-ˆ�FÑØ×Ñ˜X uÔ-ØÐ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°¸Ô>Ø�‰œ×*Ñ*Ø" G¨V°Xõ	?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)z0Test Squeezer.count_lines() with various inputs.))z'\n'r=   r6   )z'\n' * 3r=   r9   )z'a' * 40 + '\n'r=   r6   )z'a' * 80 + '\n'r=   r6   )z'a' * 200 + '\n'r=   r9   )ú'aa\t' * 20r=   r2   )z'aa\t' * 21r=   r9   )rr   rI   é   )Ú	text_codeÚ
line_widthr)   rV   N)r]   ra   ÚsubTestÚevalr   Úobjectr'   Úcount_lines)r(   r[   r`   rt   ru   r)   r*   s          r   Útest_count_lineszSqueezerTest.test_count_linest   s©   € à×.Ñ.Ó0ˆØ×.Ñ.¨wÓ7ˆó	0
Ñ+ˆI�z 8ð —‘¨	Ø)3Ø'/ð õ 1ô ˜I“�Ü—\‘\ '¨7°JÕ?Ø×$Ñ$ X×%9Ñ%9¸$Ó%?ÀÔJ÷ @÷	1ð 1ñ	0
÷ @Ð?ú÷	1ð 1ús#   ¿#B#Á""BÂB#ÂB ÂB#Â#B,	c                 ó¶   — | j                  «       }| j                  |«      }| j                  |j                  |«       | j	                  |j
                  g «       y)z(Test the creation of Squeezer instances.N)r]   ra   ÚassertIsr[   r'   Úexpandingbuttons)r(   r[   r`   s      r   Ú	test_initzSqueezerTest.test_initŠ   sJ   € à×.Ñ.Ó0ˆØ×.Ñ.¨wÓ7ˆØ�‰�h×&Ñ&¨Ô0Ø×Ñ˜×2Ñ2°BÕ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
)ú@Test Squeezer's overriding of the EditorWindow's write() method.r.   Ú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_valuerR   r6   r   N)r]   r   ÚSENTINEL_VALUEÚwritera   r'   r[   Ú
call_countÚassert_called_withÚlenr}   ©r(   r[   r*   Ú
orig_writer`   s        r   Útest_write_no_tagszSqueezerTest.test_write_no_tags‘   s¯   € à×.Ñ.Ó0ˆØ˜ ¨tÑ!3Ð5IÓJˆDÜ)-¼>Ô)JÐJˆGŒM˜JØ×2Ñ2°7Ó;ˆHà×Ñ˜X×-Ñ-×3Ñ3°D¸"Ó=¼~ÔNØ×Ñ˜Z×2Ñ2°AÔ6Ø×)Ñ)¨$°Ô3Ø×ÑœS ×!:Ñ!:Ó;¸QÕ?ñ K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	)
r€   r.   r�   r‚   rƒ   r„   Ústderrr6   r   N)r]   r‡   rˆ   r†   ra   r'   r[   r‰   rŠ   r‹   r}   )r(   r*   r[   r�   r`   s        r   Útest_write_not_stdoutz"SqueezerTest.test_write_not_stdout�   s¶   € à˜ ¨tÑ!3Ð5IÓJˆDØ×2Ñ2Ó4ˆGÜ)7ˆG�M‰MÔ&Ø Ÿ™ˆJØ×2Ñ2°7Ó;ˆHà×Ñ˜X×-Ñ-×3Ñ3°D¸(ÓCÜ,ô.à×Ñ˜Z×2Ñ2°AÔ6Ø×)Ñ)¨$°Ô9Ø×ÑœS ×!:Ñ!:Ó;¸QÕ?ñ K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
)r€   )r.   r�   r…   é2   Ústdoutr6   r   r‚   rƒ   r„   N)r]   r   r‡   rˆ   ra   Úauto_squeeze_min_linesr'   r[   r‰   rŠ   r‹   r}   rŒ   s        r   Útest_write_stdoutzSqueezerTest.test_write_stdout«   s>  € à×.Ñ.Ó0ˆã ˆDÜ)-¼>Ô)JÐJˆGŒM˜JØ×2Ñ2°7Ó;ˆHØ.0ˆHÔ+à×Ñ˜X×-Ñ-×3Ñ3°D¸(ÓCÜ+ô-à×Ñ˜Z×2Ñ2°AÔ6Ø×)Ñ)¨$°Ô9Ø×ÑœS ×!:Ñ!:Ó;¸QÕ?ð !ð ! 4Ñ'Ð)=Ó>ˆDÜ)-¼>Ô)JÐJˆGŒM˜JØ×2Ñ2°7Ó;ˆHØ.0ˆHÔ+à×Ñ˜X×-Ñ-×3Ñ3°D¸(ÓCÀTÔJØ×Ñ˜Z×2Ñ2°AÔ6Ø×ÑœS ×!:Ñ!:Ó;¸QÕ?ñ ?r   c                 óD  — | j                  d¬«      }|j                  }| j                  |«      }d|_        t	        d¬«      |_        |j                  dd«       | j                  |j                  dd	«      d
«       | j                  t        |j                  «      d«       y)zATest that the auto-squeezing creates an ExpandingButton properly.T©rZ   rG   rH   r…   zTEXT
TEXT
TEXT
TEXT
TEXT
TEXT
r”   rf   Úendr<   r6   N)r]   r*   ra   r•   r   ry   rˆ   r'   Úgetr‹   r}   )r(   r[   r\   r`   s       r   Útest_auto_squeezezSqueezerTest.test_auto_squeezeÃ   s‡   € à×.Ñ.ÀÐ.ÓEˆØ—l‘lˆØ×.Ñ.¨wÓ7ˆØ*+ˆÔ'Ü#°Ô3ˆÔà�‰�j (Ô+Ø×Ñ˜Ÿ™¨°Ó6¸Ô=Ø×Ñœ˜X×6Ñ6Ó7¸Õ;r   c                 óZ  — 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)z%Test the squeeze_current_text method.)r”   r�   Tr˜   rH   r…   rf   ú
SOME
TEXT
Úinsertr™   úSOME
TEXT

r   Úbreakr?   r6   z	SOME
TEXTN)r]   r*   ra   r   ry   rž   rg   r'   rš   r‹   r}   Úsqueeze_current_textÚsÚexpand)r(   Útag_namer[   r\   r`   Úretvals         r   Útest_squeeze_current_textz&SqueezerTest.test_squeeze_current_textÏ   si  € ô -ˆHØ×2Ñ2ÀDÐ2ÓIˆGØ!Ÿ,™,ˆKØ×2Ñ2°7Ó;ˆHÜ#'°QÔ#7ˆHÔ ð ×Ñ˜u n°hÔ?Ø× Ñ  ¨5Ô1Ø×Ñ˜[Ÿ_™_¨U°EÓ:Ð<LÔMà×ÑœS ×!:Ñ!:Ó;¸QÔ?ð ×2Ñ2Ó4ˆFØ×Ñ˜V WÔ-Ø×Ñ˜[Ÿ_™_¨U°EÓ:¸FÔCØ×ÑœS ×!:Ñ!:Ó;¸QÔ?Ø×Ñ˜X×6Ñ6°qÑ9×;Ñ;¸\ÔJð ×%Ñ% aÑ(×/Ñ/Ô1Ø×Ñ˜[Ÿ_™_¨U°EÓ:Ð<LÔMØ×ÑœS ×!:Ñ!:Ó;¸QÖ?ñ1 -r   c                 ó.  — | 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)z@Test that the event doesn't squeeze text without a relevant tag.Tr˜   rH   r…   rf   r�   ÚTAGrž   r™   rŸ   r   r    N)r]   r*   ra   r   ry   rž   rg   r'   rš   r‹   r}   r¡   ©r(   r[   r\   r`   r¥   s        r   Ú)test_squeeze_current_text_no_allowed_tagsz6SqueezerTest.test_squeeze_current_text_no_allowed_tagsì   sí   € à×.Ñ.ÀÐ.ÓEˆØ—l‘lˆØ×.Ñ.¨wÓ7ˆÜ#°Ô3ˆÔð 	×Ñ˜5 .°%Ô8Ø×Ñ˜X uÔ-Ø×Ñ˜Ÿ™¨°Ó6Ð8HÔIà×Ñœ˜X×6Ñ6Ó7¸Ô;ð ×.Ñ.Ó0ˆØ×Ñ˜ Ô)Ø×Ñ˜Ÿ™¨°Ó6Ð8HÔ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)z2Test squeezing text before existing squeezed text.Tr˜   rH   r…   rf   r�   r”   rž   r6   zMORE
STUFF
r    r™   z


r2   r   Ú<N)r]   r*   ra   r   ry   rž   rg   r¡   r'   r‹   r}   rš   Ú
assertTrueÚcomparer©   s        r   Ú/test_squeeze_text_before_existing_squeezed_textz<SqueezerTest.test_squeeze_text_before_existing_squeezed_text   s6  € à×.Ñ.ÀÐ.ÓEˆØ—l‘lˆØ×.Ñ.¨wÓ7ˆÜ#°Ô3ˆÔð 	×Ñ˜5 .°(Ô;Ø×Ñ˜X uÔ-Ø×%Ñ%Ô'Ø×Ñœ˜X×6Ñ6Ó7¸Ô;ð 	×Ñ˜5 /°8Ô<Ø×Ñ˜X uÔ-Ø×.Ñ.Ó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)zTest the reload() class-method.Tr˜   r@   ÚmainÚPyShellzauto-squeeze-min-linesN)r]   ra   r•   rp   Ústrr   Úreloadr'   )r(   r[   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)z@Test that Squeezer.reload() runs without any instances existing.N)r   r´   r/   s    r   Ú!test_reload_no_squeezer_instancesz.SqueezerTest.test_reload_no_squeezer_instances+  s   € ä�‰Õr   )Fr   )rN   rO   rP   rQ   r]   ra   rW   rp   rz   r~   rŽ   r‘   r–   r›   r¦   rª   r¯   r·   r¹   rR   r   r   rT   rT   Q   sU   „ Ù'ó
óóò?òKò,8ò
@ò@ò@ò0
<ò@ò:<ò(ò45ó"r   rT   c                   óT   — e Zd ZdZd„ Z ede¬«      d„ «       Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)ÚExpandingButtonTestz$Tests for the ExpandingButton class.c                 ó,  — t        | «      }t        «       }t        |«      |j                  _        t        |j                  j                  «      |j                  _        | j                  |j                  j                  j                  «       d|_	        |S )z0Helper for tests: Create a mock Squeezer object.r“   )
r"   r   r   r[   r*   r   rX   r    Úcloser•   )r(   r   r`   s      r   Úmake_mock_squeezerz&ExpandingButtonTest.make_mock_squeezer4  sq   € ä Ó%ˆÜ“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)z1Test the simplest creation of an ExpandingButton.r�   ÚTAGSr“   z50 linesr*   rf   r™   r<   z<Double-Button-1>z<Button-%s>Ú2Ú3r6   )Úhover_delayr   zright-clickN)r¾   r[   r*   r   r'   r¢   Úmasterr­   Úcgetrš   ÚassertInÚbindr   ÚisAquaTkr‰   rŠ   r
   Ú	call_argsÚlower)r(   ÚMockHovertipr`   r\   Ú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Ø)´F·O±OÔ4E©SÈ3Ñ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)zTest the expand event.r�   rÂ   r“   rf   ©Úwindow©ÚeventNr™   zTEXT
úend-1cr6   )r¾   r   r[   r*   Úwindow_creater£   r   r'   rš   ÚindexÚtag_nextranger}   Úremover‰   rŠ   )r(   r`   rÎ   r\   r¥   Útext_end_indexs         r   Útest_expandzExpandingButtonTest.test_expand]  s  € à×*Ñ*Ó,ˆÜ)¨&°&¸"¸hÓGˆð ×&Ñ&×+Ñ+ˆØ×!Ñ! %°Ð!Ô@ð !×'Ñ'¬d«fÐ'Ó5ˆØ×Ñ˜ Ô&ð 	×Ñ˜Ÿ™¨°Ó6¸ÔAð %×*Ñ*¨8Ó4ˆØ×Ñ˜Ÿ™¨°Ó?ÀÔHØ×Ñ˜×2Ñ2°6¸5ÓAØ  .Ð1ô	3ð 	×Ñ˜×2Ñ2×9Ñ9×DÑDÀaÔHØ×!Ñ!×(Ñ(×;Ñ;¸OÕLr   c                 óF  — | 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)z@Test that expanding very long output asks user for confirmation.Úai † rÂ   r“   rf   rÒ   zidlelib.squeezer.messageboxFrÔ   Nr    rÖ   r.   T)r¾   r   Úset_is_dangerousr­   Úis_dangerousr*   r×   r   Úaskokcancelr†   Úaskyesnor£   r   r'   rš   )r(   r`   r*   rÎ   r\   Úmock_msgboxr¥   s          r   Útest_expand_dangerous_oupputz0ExpandingButtonTest.test_expand_dangerous_oupputx  si  € à×*Ñ*Ó,ˆØ�U‰{ˆÜ)¨$°¸¸HÓEˆØ×(Ñ(Ô*Ø�‰˜×4Ñ4Ô5ð &×*Ñ*ˆØ×!Ñ! %°Ð!Ô@ô Ð0Ô1°[Ø38ˆK×#Ñ#Ô0Ø05ˆK× Ñ Ô-à$×+Ñ+´$³&Ð+Ó9ˆF÷	 2ð 	×Ñ˜ Ô)Ø×Ñ˜×-Ñ-×1Ñ1°%¸ÓBÀBÔGô Ð0Ô1°[Ø37ˆK×#Ñ#Ô0Ø04ˆK× Ñ Ô-à$×+Ñ+´$³&Ð+Ó9ˆF÷	 2ð 	×Ñ˜ Ô&Ø×Ñ˜×-Ñ-×1Ñ1°%¸ÓBÀDÕI÷' 2Ð1ú÷ 2Ð1ús   Á9=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)zTest the copy event.r�   rÂ   r“   rÔ   Nr6   )	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ˆÔ(ð !×%Ñ%¬D«FÐ%Ó3ˆØ×Ñ˜ Ô&ð 	×Ñ˜×8Ñ8×CÑCÀQÔGØ×Ñ˜×9Ñ9×DÑDÀaÔHØ×(Ñ(×;Ñ;¸FÕCr   c                 óZ  — | 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)zTest the view event.r�   rÂ   r“   zidlelib.squeezer.view_textr¿   rÔ   r6   r   r2   N)
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Ø!à× Ñ ¤t£vÐ Ô.ð ×Ñ˜^×6Ñ6¸Ô:ð ×Ñ˜^×5Ñ5°aÑ8¸Ñ;¸VÔD÷ E×DÑDú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)	zTest the context menu.r�   rÂ   r“   ztkinter.Menur@   rÔ   )ÚlabelÚcommandN)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ˆÜ�>Ô" iÜ›ˆIØ%.ˆIÔ"Ü›ˆJØˆJŒLØˆJŒLØ×.Ñ.°ZÐ.Ô@Ø×Ñ˜Y×2Ñ2×=Ñ=Ü  ×!<Ñ!<Ó=ô?à /× ;Ô ;��˜Ø×%Ñ%×5Ñ5¸EÌ3Ð5ÕOñ !<÷ #×"Ñ"ús   ªB)CÃC&N)rN   rO   rP   rQ   r¾   r   r   r~   rÜ   rä   ré   rî   rü   rR   r   r   r»   r»   0  sE   „ Ù.ò
ñ Ð&°Ô:ñ;ó ;ð;ò8Mò6!JòFDò(Eó"Pr   r»   Ú__main__r2   )Ú	verbosity)%rQ   Ú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$   rT   r»   rN   r±   rR   r   r   Ú<module>r     sŸ   ðÙ å ß Û ß JÕ JÝ !å #Ý )÷ñ å Ý &Ý $à×(Ñ(€òô,9�X×&Ñ&ô ,9ô^\�8×$Ñ$ô \ô~^P˜(×+Ñ+ô ^PðB ˆzÒØ€H‡M�M˜AÖð r   