o
    HXîhü2  ã                   @   sÐ   d dl Z d dlZd dlmZ d dlmZ d dlmZ e d¡Zej	Z	dZ
dZdZG d	d
„ d
ejƒZG dd„ dƒZG dd„ dƒZG dd„ deejƒZG dd„ deejƒZG dd„ dejƒZedkrfe ¡  dS dS )é    N)Úsupport)Úimport_helper)Ú	os_helperÚturtlea_  width = 0.75
height = 0.8
canvwidth = 500
canvheight = 200
leftright = 100
topbottom = 100
mode = world
colormode = 255
delay = 100
undobuffersize = 10000
shape = circle
pencolor  = red
fillcolor  = blue
resizemode  = auto
visible  = None
language = english
exampleturtle = turtle
examplescreen = screen
title = Python Turtle Graphics
using_IDLE = ''
z# Comments!
# Testing comments!
pencolor  = red
fillcolor  = blue
visible  = False
language = english
# Some more
# comments
using_IDLE = False
z0
pencolor = red
fillcolor: blue
visible = False
c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTurtleConfigTestc                 C   sP   |   tjtj¡ ttjdƒ}| |¡ W d   ƒ tjS 1 s w   Y  tjS )NÚw)Z
addCleanupr   ÚunlinkZTESTFNÚopenÚwrite)ÚselfZcfg_strÚf© r   ú:/opt/python-3.10.19/usr/lib/python3.10/test/test_turtle.pyÚget_cfg_file7   s   
ÿþzTurtleConfigTest.get_cfg_filec                 C   sš   |   t¡}t |¡}i dd“dd“dd“dd“d	d
“dd
“dd“dd“dd
“dd“dd“dd“dd“dd“dd “dd“dd“d d!d"d#œ¥}|  ||¡ d S )$NÚwidthg      è?Zheightgš™™™™™é?Z	canvwidthéô  Z
canvheightéÈ   Z	leftrightéd   Z	topbottomÚmodeZworldZ	colormodeéÿ   ÚdelayZundobuffersizeé'  ÚshapeZcircleÚpencolorÚredÚ	fillcolorÚblueZ
resizemodeÚautoÚvisibleÚlanguageÚenglishZexampleturtler   ZscreenzPython Turtle GraphicsÚ )ZexamplescreenÚtitleÚ
using_IDLE)r   Útest_configr   Úconfig_dictÚassertEqual©r   Úcfg_nameÚ
parsed_cfgÚexpectedr   r   r   Útest_config_dict=   sT   

ÿþýüûúùø	÷
öõôóòñðïìz!TurtleConfigTest.test_config_dictc                 C   s4   |   t¡}t |¡}ddddddœ}|  ||¡ d S )Nr   r   Fr    )r   r   r   r   r#   )r   Útest_config_twor   r%   r&   r'   r   r   r   Ú&test_partial_config_dict_with_comments[   s   

ûz7TurtleConfigTest.test_partial_config_dict_with_commentsc                 C   sr   |   t¡}t ¡ }t |¡}W d   ƒ n1 sw   Y  | ¡ }|  d|¡ |  d|¡ |  |dddœ¡ d S )NzBad line in config-file zfillcolor: bluer   F)r   r   )	r   Úinvalid_test_configr   Zcaptured_stdoutr   r%   ÚgetvalueZassertInr&   )r   r(   Ústdoutr)   Úerr_msgr   r   r   Útest_config_dict_invalidj   s   

ÿþz)TurtleConfigTest.test_config_dict_invalidN)Ú__name__Ú
__module__Ú__qualname__r   r+   r-   r2   r   r   r   r   r   5   s
    r   c                   @   s   e Zd Zdd„ ZdS )ÚVectorComparisonMixinc                 C   sP   t |ƒt |ƒkr|  d¡ tt||ƒƒD ]\}\}}| j||d |¡d qd S )NzTuples are not of equal sizezvalues at index {} do not match)Úmsg)ÚlenZfailÚ	enumerateÚzipÚassertAlmostEqualÚformat)r   Úvec1Úvec2ÚidxÚiÚjr   r   r   ÚassertVectorsAlmostEqual~   s   
ÿÿz.VectorComparisonMixin.assertVectorsAlmostEqualN)r3   r4   r5   rB   r   r   r   r   r6   |   s    r6   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Ú
Multiplierc                 C   s
   d|› S )NúM*r   ©r   Úotherr   r   r   Ú__mul__‡   ó   
zMultiplier.__mul__c                 C   s
   |› dS )Nú*Mr   rF   r   r   r   Ú__rmul__Š   rI   zMultiplier.__rmul__N)r3   r4   r5   rH   rK   r   r   r   r   rD   …   s    rD   c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )Ú	TestVec2Dc                 C   s‚   t ddƒ}|  |d d¡ |  |d d¡ |  |t ¡ |  tt ¡ |  tt d¡ |  tt d¡ |  tt |¡ |  tt ddd¡ d S )Nç      à?é   r   é   ©r   rO   )ÚVec2Dr&   ÚassertIsInstanceÚassertRaisesÚ	TypeError©r   Úvecr   r   r   Útest_constructor   s   
zTestVec2D.test_constructorc                 C   s   t ddƒ}|  t|ƒd¡ d S )Ng¾Ÿ/Ý$â?gX9´Èv¾ó?z(0.57,1.23))rQ   r&   ÚreprrU   r   r   r   Ú	test_reprœ   s   
zTestVec2D.test_reprc                 C   sf   t ddƒ}t ddƒ}t ddƒ}|  ||¡ |  |t|ƒ¡ |  t|ƒ|¡ |  ||¡ |  ||¡ d S )Nr   rO   ç        é*   )rQ   r&   ÚtupleZassertNotEqual)r   r=   r>   Zvec3r   r   r   Útest_equality    s   


zTestVec2D.test_equalityc              	   C   s~   t ddƒ}ttjd ƒD ]0}| j|d  tj||d}t |¡}|  ||¡ |  |t ¡ W d   ƒ n1 s7w   Y  qd S )NrM   rN   rO   )Úproto)Úprotocol)	rQ   ÚrangeÚpickleÚHIGHEST_PROTOCOLÚsubTestÚdumpsÚloadsr&   rR   )r   rV   r^   ZpickledZ	unpickledr   r   r   Útest_picklingª   s   

ü€ÿzTestVec2D.test_picklingc           
   	   C   st   |D ]5}| j |d% |\\}}}t|Ž }t|Ž }|||ƒ}	t|Ž }|  |	|¡ W d   ƒ n1 s2w   Y  qd S )N©Úcase)rc   rQ   rB   )
r   Ú
test_casesZlambda_operatorZ	test_caseÚfirstÚsecondr*   Zop1Zop2Úresultr   r   r   Ú_assert_arithmetic_cases³   s   
õ€ÿz"TestVec2D._assert_arithmetic_casesc                 C   s   g d¢}|   |dd„ ¡ d S )N))©©r   r   ©rO   rO   )ç      ð?rq   ))©éÿÿÿÿr   )rN   rN   )rO   rN   )))g      ø?r   rp   )ç      @rO   c                 S   s   | | S ©Nr   ©ÚxÚyr   r   r   Ú<lambda>Ê   ó    z0TestVec2D.test_vector_addition.<locals>.<lambda>©rm   ©r   ri   r   r   r   Útest_vector_additionÂ   s   zTestVec2D.test_vector_additionc                 C   s   ddg}|   |dd„ ¡ d S )N)rn   )rs   rs   )))g     @%@ç      À?)é
   r   )g      ä?r~   c                 S   s   | | S ru   r   rv   r   r   r   ry   Ó   rz   z3TestVec2D.test_vector_subtraction.<locals>.<lambda>r{   r|   r   r   r   Útest_vector_subtractionÌ   s   þz!TestVec2D.test_vector_subtractionc                 C   sÊ   t ddƒ}t ddƒ}|| }d}|  ||¡ t ddƒ}t ddƒ}|  |d |¡ |  d| |¡ |  |d |¡ |  d| |¡ tƒ }|  || t |d › d	|d
 › d	ƒ¡ |  || d|› ¡ d S )Nr   rM   é   é#   é   é   g      $@r   rJ   rO   rE   )rQ   r;   rB   rD   r&   )r   r=   r>   Zanswerr*   rV   ÚMr   r   r   Útest_vector_multiplyÕ   s   



*zTestVec2D.test_vector_multiplyc                 C   s    t ddƒ}d}|  | |¡ d S )Nr   éöÿÿÿ)r‡   r   )rQ   rB   )r   rV   r*   r   r   r   Útest_vector_negativeè   s   
zTestVec2D.test_vector_negativec                 C   sF   |   ttddƒƒd¡ |  ttddƒƒd¡ |   ttddƒƒd¡ d S )Né   é   r   r   rt   g      @)r;   ÚabsrQ   r&   ©r   r   r   r   Útest_distanceí   s   zTestVec2D.test_distancec              	   C   sl   g d¢}|D ]-}| j |d |\\}}}t|Ž }| |¡}|  ||¡ W d   ƒ n1 s.w   Y  qd S )N)))ro   r   ro   ))rP   éZ   rr   ))rP   i¦ÿÿÿ©rO   r   ))r   é´   rr   ))r   éh  r   rg   )rc   rQ   ÚrotaterB   )r   Úcasesrh   rV   Zrotr*   Zgotr   r   r   Útest_rotateò   s   
ü€ÿzTestVec2D.test_rotateN)r3   r4   r5   rW   rY   r]   rf   rm   r}   r€   r†   rˆ   r   r”   r   r   r   r   rL   Ž   s    
	
	rL   c                   @   s”   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚTestTNavigatorc                 C   s   t  ¡ | _d S ru   )r   Ú
TNavigatorÚnavrŒ   r   r   r   ÚsetUp  s   zTestTNavigator.setUpc                 C   s6   | j  dd¡ |  | j  ¡ d¡ |  | j  ¡ d¡ d S ©Nr   éœÿÿÿ)r—   Úgotor;   ÚxcorÚycorrŒ   r   r   r   Ú	test_goto	  s   zTestTNavigator.test_gotoc                 C   s>   |   | j ¡ | jj¡ | j dd¡ |   | j ¡ | jj¡ d S r™   )r&   r—   ÚposZ	_positionr›   rŒ   r   r   r   Útest_pos  s   zTestTNavigator.test_posc                 C   ó0   |   | jjd¡ | j d¡ |  | jjd¡ d S )N©rq   r   rŽ   )rZ   rq   )r&   r—   Ú_orientÚleftrB   rŒ   r   r   r   Ú	test_left  ó   zTestTNavigator.test_leftc                 C   r¡   )Nr¢   rŽ   )r   g      ð¿)r&   r—   r£   ÚrightrB   rŒ   r   r   r   Ú
test_right  r¦   zTestTNavigator.test_rightc                 C   sd   | j  dd¡ |  | j  ¡ d¡ |  | j  ¡ d¡ | j  ¡  |  | j  ¡ d¡ |  | j  ¡ d¡ d S )Nr   rš   r   )r—   r›   r;   rœ   r   ÚresetrŒ   r   r   r   Ú
test_reset  s   
zTestTNavigator.test_resetc                 C   s|   | j  d¡ tddƒ}|  | j  ¡ |¡ | j  ¡  | j  d¡ | j  d¡ tddƒ}|  | j  ¡ |¡ |  t| j jd¡ d S )Né–   r   rŽ   Z
skldjfldsk)	r—   ÚforwardrQ   rB   Úpositionr©   r¤   rS   rT   ©r   r*   r   r   r   Útest_forward%  s   


zTestTNavigator.test_forwardc                 C   sj   | j  d¡ tddƒ}|  | j  ¡ |¡ | j  ¡  | j  d¡ | j  d¡ tddƒ}|  | j  ¡ |¡ d S )Nr   é8ÿÿÿr   rŽ   )r—   ZbackrQ   rB   r­   r©   r§   r®   r   r   r   Útest_backwards2  s   


zTestTNavigator.test_backwardsc                 C   s.   | j  d¡ d}|  | j  tddƒ¡|¡ d S )Nr   r   )r—   r¬   r;   ÚdistancerQ   r®   r   r   r   r   =  s   zTestTNavigator.test_distancec                 C   sZ   | j  d¡ |  | j  ¡ d¡ | j  ¡  |  | j  ¡ d¡ | j  ¡  |  | j  ¡ d¡ d S )NrŽ   gßm Uû!ù?)r—   r¤   r;   ÚheadingÚradiansÚdegreesrŒ   r   r   r   Útest_radians_and_degreesB  s   

z'TestTNavigator.test_radians_and_degreesc                 C   sf   g d¢}|D ]*\\}}}|   | j ||¡|¡ |   | j ||f¡|¡ |   | j t||ƒ¡|¡ qd S )N)))r   r   rZ   ))r   r   g     €F@))r   r   g     €V@))rš   r   g     à`@))rš   r   g     €f@))rš   rš   g      l@))r   rš   g     àp@))r   rš   g     °s@)r&   r—   ZtowardsrQ   )r   Zcoordinatesrw   rx   r*   r   r   r   Útest_towardsJ  s   ýzTestTNavigator.test_towardsc                 C   s\  | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ |  t| j jd¡ | j  ¡  g d¢}t|ƒd }|D ]}| j  |¡ qG|  	| j  ¡ |¡ | j  ¡  dt|ƒ d }|D ]}| j  |¡ qh|  	| j  ¡ |¡ | j  ¡  g d	¢}d
}|D ]$}|d
k r–| j  t
|ƒ¡ n| j  |¡ ||7 }|  | j  ¡ |d ¡ q‡d S )NrŽ   é-   é‡   gš™™™™™ù?gÍÌÌÌÌ¬`@Zsdkfjdsf)r   é   éª   é,  r‘   )
r   rº   iVÿÿÿr¼   i.ÿÿÿgfffff&A@gš™™™™IÀr‡   g{®Gáú=Àr   r   )r—   r¤   r;   r³   r§   rS   rT   r©   Úsumr&   r‹   )r   Z	rotationsrl   ÚnumZ
sum_so_farr   r   r   Útest_heading]  s8   


úzTestTNavigator.test_headingc                 C   s|   | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ | j  d¡ |  | j  ¡ d¡ d S )Ng®Gáz”Y@g…ëQ¸Î^Àgp=
×£˜m@g…ëQ¸BÀg×£p=êS@ià“ éx   )r—   Z
setheadingr;   r³   rŒ   r   r   r   Útest_setheading  s   zTestTNavigator.test_setheadingc                 C   s:   | j  d¡ | j  d¡ | j  d¡ |  | j  ¡ d¡ d S )Nr   rŽ   r°   )g      Y@g      iÀ)r—   r¬   r¤   rB   rŸ   rŒ   r   r   r   Útest_positions‰  s   zTestTNavigator.test_positionsc                 C   s.   | j  d¡ | j  d¡ |  | j  ¡ d¡ d S )Nç·Ñ ÞùÀçZd;ßY™A)rÃ   rÄ   )r—   ZsetxZsetyrB   rŸ   rŒ   r   r   r   Útest_setx_and_sety  s   z!TestTNavigator.test_setx_and_setyc                 C   sJ   | j  d¡ | j  d¡ | j  ¡  |  | j  ¡ d¡ |  | j  ¡ d¡ d S )Nr„   i`yþÿro   r   )r—   r¤   r¬   ÚhomerB   rŸ   r;   r³   rŒ   r   r   r   Ú	test_home”  s
   
zTestTNavigator.test_homec                 C   sh   |   | j dd¡d¡ tddƒ}|   | j |¡d¡ t ¡ }| d¡ | d¡ |   | j |¡d¡ d S )	Nr„   é(   é2   g)\Âõ(Ì?gü©ñÒMbP?gð-Ó)Ì?rŽ   r   )r;   r—   r²   rQ   r   r–   r¤   r¬   )r   rV   Zanother_turtler   r   r   Útest_distance_method›  s   


z#TestTNavigator.test_distance_methodN)r3   r4   r5   r˜   rž   r    r¥   r¨   rª   r¯   r±   r   r¶   r·   r¿   rÁ   rÂ   rÅ   rÇ   rÊ   r   r   r   r   r•     s$    "
r•   c                   @   rC   )ÚTestTPenc                 C   óF   t  ¡ }|  | ¡ ¡ | ¡  |  | ¡ ¡ | ¡  |  | ¡ ¡ d S ru   )r   ÚTPenÚ
assertTrueZisdownZpenupÚassertFalseZpendown©r   Ztpenr   r   r   Útest_pendown_and_penup§  ó   zTestTPen.test_pendown_and_penupc                 C   rÌ   ru   )r   rÍ   rÎ   Z	isvisibleZ
hideturtlerÏ   Z
showturtlerÐ   r   r   r   Ú(test_showturtle_hideturtle_and_isvisible±  rÒ   z1TestTPen.test_showturtle_hideturtle_and_isvisibleN)r3   r4   r5   rÑ   rÓ   r   r   r   r   rË   ¥  s    
rË   Ú__main__)ra   ZunittestÚtestr   Ztest.supportr   r   Úimport_moduler   rQ   r$   r,   r.   ZTestCaser   r6   rD   rL   r•   rË   r3   Úmainr   r   r   r   Ú<module>   s(    
G		v "ÿ