a
    äze£2  ã                   @   s´   d dl Z d dl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r°e ¡  dS )é    N)ÚsupportÚ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   sL   |   tjtj¡ ttjdƒ}| |¡ W d   ƒ n1 s<0    Y  tjS )NÚw)Z
addCleanupr   ÚunlinkZTESTFNÚopenÚwrite)ÚselfZcfg_strÚf© r   ú&/usr/lib/python3.9/test/test_turtle.pyÚget_cfg_file4   s    (zTurtleConfigTest.get_cfg_filec                 C   sR   |   t¡}t |¡}ddddddddddd	d
ddd ddddddœ}|  ||¡ d S )Ng      è?gš™™™™™é?éô  éÈ   éd   Zworldéÿ   é'  ZcircleÚredÚblueÚautoÚenglishr   ZscreenzPython Turtle GraphicsÚ )ÚwidthZheightZ	canvwidthZ
canvheightZ	leftrightZ	topbottomÚmodeZ	colormodeÚdelayZundobuffersizeÚshapeÚpencolorÚ	fillcolorZ
resizemodeÚvisibleÚlanguageZexampleturtleZexamplescreenÚtitleÚ
using_IDLE)r   Útest_configr   Úconfig_dictÚassertEqual©r	   Úcfg_nameÚ
parsed_cfgÚexpectedr   r   r   Útest_config_dict:   s0    

ì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_commentsX   s    

ûz7TurtleConfigTest.test_partial_config_dict_with_commentsc                 C   sr   |   t¡}t ¡ }t |¡}W d   ƒ n1 s20    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_invalidg   s    

(þz)TurtleConfigTest.test_config_dict_invalidN)Ú__name__Ú
__module__Ú__qualname__r   r)   r+   r0   r   r   r   r   r   2   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)r1   r2   r3   r@   r   r   r   r   r4   y   s   r4   c                   @   s   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__„   s    zMultiplier.__mul__c                 C   s
   |› dS )Nú*Mr   rC   r   r   r   Ú__rmul__‡   s    zMultiplier.__rmul__N)r1   r2   r3   rE   rG   r   r   r   r   rA   ‚   s   rA   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   rK   )Ú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))rM   r$   ÚreprrQ   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   rK   ç        é*   )rM   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 ]`}| j|d@ tj||d}t |¡}|  ||¡ |  |t ¡ W d   ƒ q1 sn0    Y  qd S )NrI   rJ   rK   )Úproto)Úprotocol)	rM   ÚrangeÚpickleÚHIGHEST_PROTOCOLÚsubTestÚdumpsÚloadsr$   rN   )r	   rR   rZ   ZpickledZ	unpickledr   r   r   Útest_pickling§   s    

zTestVec2D.test_picklingc           
   	   C   st   |D ]j}| j |dJ |\\}}}t|Ž }t|Ž }|||ƒ}	t|Ž }|  |	|¡ W d   ƒ q1 sd0    Y  qd S )N©Úcase)r_   rM   r@   )
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   ©rK   rK   )ç      ð?rm   ))©éÿÿÿÿr   )rJ   rJ   )rK   rJ   )))g      ø?r   rl   )ç      @rK   c                 S   s   | | S ©Nr   ©ÚxÚyr   r   r   Ú<lambda>Ç   ó    z0TestVec2D.test_vector_addition.<locals>.<lambda>©ri   ©r	   re   r   r   r   Útest_vector_addition¿   s    zTestVec2D.test_vector_additionc                 C   s   ddg}|   |dd„ ¡ d S )N)rj   )ro   ro   )))g     @%@ç      À?)é
   r   )g      ä?rz   c                 S   s   | | S rq   r   rr   r   r   r   ru   Ð   rv   z3TestVec2D.test_vector_subtraction.<locals>.<lambda>rw   rx   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{   rI   é   é#   é   é   g      $@r   rF   rK   rB   )rM   r9   r@   rA   r$   )r	   r;   r<   Zanswerr(   rR   ÚMr   r   r   Útest_vector_multiplyÒ   s    



*zTestVec2D.test_vector_multiplyc                 C   s    t ddƒ}d}|  | |¡ d S )Nr{   éöÿÿÿ)rƒ   r{   )rM   r@   )r	   rR   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   rp   g      @)r9   ÚabsrM   r$   ©r	   r   r   r   Útest_distanceê   s    zTestVec2D.test_distancec              	   C   sl   g d¢}|D ]Z}| j |d: |\\}}}t|Ž }| |¡}|  ||¡ W d   ƒ q1 s\0    Y  qd S )N)))rk   r   rk   ))rL   éZ   rn   ))rL   i¦ÿÿÿ©rK   r   ))r‹   é´   rn   ))r‹   éh  r‹   rc   )r_   rM   Úrotater@   )r	   Zcasesrd   rR   Zrotr(   Zgotr   r   r   Útest_rotateï   s    
zTestVec2D.test_rotateN)r1   r2   r3   rS   rU   rY   rb   ri   ry   r|   r‚   r„   r‰   r   r   r   r   r   rH   ‹   s   
	
	rH   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 rq   )r   Ú
TNavigatorÚnavrˆ   r   r   r   ÚsetUp  s    zTestTNavigator.setUpc                 C   s6   | j  dd¡ |  | j  ¡ d¡ |  | j  ¡ d¡ d S ©Nr   éœÿÿÿ)r’   Úgotor9   Ú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   s0   |   | jjd¡ | j d¡ |  | jjd¡ d S )N©rm   r   rŠ   )rV   rm   )r$   r’   Ú_orientÚleftr@   rˆ   r   r   r   Ú	test_left  s    zTestTNavigator.test_leftc                 C   s0   |   | jjd¡ | j d¡ |  | jjd¡ d S )Nrœ   rŠ   )r   g      ð¿)r$   r’   r   Úrightr@   rˆ   r   r   r   Ú
test_right  s    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–   r9   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’   ÚforwardrM   r@   Úpositionr¢   rž   rO   rP   ©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backrM   r@   r¦   r¢   r    r§   r   r   r   Útest_backwards/  s    


zTestTNavigator.test_backwardsc                 C   s.   | j  d¡ d}|  | j  tddƒ¡|¡ d S )Nr   r   )r’   r¥   r9   ÚdistancerM   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ž   r9   ÚheadingÚradiansÚdegreesrˆ   r   r   r   Útest_radians_and_degrees?  s    

z'TestTNavigator.test_radians_and_degreesc                 C   sf   g d¢}|D ]T\\}}}|   | j ||¡|¡ |   | j ||f¡|¡ |   | j t||ƒ¡|¡ qd S )N)))r   r   rV   ))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towardsrM   )r	   Zcoordinatesrs   rt   r(   r   r   r   Útest_towardsG  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  |¡ qŽ|  	| j  ¡ |¡ | j  ¡  dt|ƒ d }|D ]}| j  |¡ qÐ|  	| j  ¡ |¡ | j  ¡  g d	¢}d
}|D ]L}|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ž   r9   r¬   r    rO   rP   r¢   Úsumr$   r‡   )r	   Z	rotationsrh   ÚnumZ
sum_so_farr   r   r   Útest_headingZ  s6    



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
setheadingr9   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ž   r@   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setyr@   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þÿrk   r   )r’   rž   r¥   Úhomer@   rš   r9   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   )r9   r’   r«   rM   r   r‘   rž   r¥   )r	   rR   Zanother_turtler   r   r   Útest_distance_method˜  s    


z#TestTNavigator.test_distance_methodN)r1   r2   r3   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                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestTPenc                 C   sF   t  ¡ }|  | ¡ ¡ | ¡  |  | ¡ ¡ | ¡  |  | ¡ ¡ d S rq   )r   ÚTPenÚ
assertTrueZisdownZpenupÚassertFalseZpendown©r	   Ztpenr   r   r   Útest_pendown_and_penup¤  s    zTestTPen.test_pendown_and_penupc                 C   sF   t  ¡ }|  | ¡ ¡ | ¡  |  | ¡ ¡ | ¡  |  | ¡ ¡ d S rq   )r   rÅ   rÆ   Z	isvisibleZ
hideturtlerÇ   Z
showturtlerÈ   r   r   r   Ú(test_showturtle_hideturtle_and_isvisible®  s    z1TestTPen.test_showturtle_hideturtle_and_isvisibleN)r1   r2   r3   rÉ   rÊ   r   r   r   r   rÄ   ¢  s   
rÄ   Ú__main__)r]   ZunittestÚtestr   Úimport_moduler   rM   r"   r*   r,   ZTestCaser   r4   rA   rH   r   rÄ   r1   Úmainr   r   r   r   Ú<module>   s    
G		v "