
    <e2                     r   d dl Z d dlZd dlmZ d dlmZ d dlmZ  ej        d          Zej	        Z	dZ
dZdZ G d	 d
ej                  Z G d d          Z G d d          Z G d deej                  Z G d deej                  Z G d dej                  Zedk    r ej                     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                   &    e Zd Zd Zd Zd Zd ZdS )TurtleConfigTestc                     |                      t          j        t          j                   t	          t          j        d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        S )Nw)
addCleanupr   unlinkTESTFNopenwrite)selfcfg_strfs      '/usr/lib/python3.11/test/test_turtle.pyget_cfg_filezTurtleConfigTest.get_cfg_file7   s    	()*:;;;)"C(( 	AGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A''A+.A+c                    |                      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      ?heightg?	canvwidth  
canvheight   	leftrightd   	topbottommodeworld	colormode   delayundobuffersize'  shapecirclepencolorred	fillcolorblue
resizemodeautovisiblelanguageenglishexampleturtler   screenzPython Turtle Graphics )examplescreentitle
using_IDLE)r   test_configr   config_dictassertEqualr   cfg_name
parsed_cfgexpecteds       r   test_config_dictz!TurtleConfigTest.test_config_dict=   s/   $$[11''11

d
s
 #
 #	

 
 
 G
 
 S
 e
 X
 
 &
 6
 
  	!
" X#
$ &-)
 
 
. 	X.....    c                     |                      t                    }t                              |          }dddddd}|                     ||           d S )Nr)   r+   Fr0   )r(   r*   r.   r/   r6   )r   test_config_twor   r8   r9   r:   s       r   &test_partial_config_dict_with_commentsz7TurtleConfigTest.test_partial_config_dict_with_comments[   sc    $$_55''11
 !
 
 	X.....r?   c                 v   |                      t                    }t          j                    5 }t                              |          }d d d            n# 1 swxY 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   captured_stdoutr   r8   getvalueassertInr9   )r   r;   stdoutr<   err_msgs        r   test_config_dict_invalidz)TurtleConfigTest.test_config_dict_invalidj   s    $$%899$&& 	6&++H55J	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 //##0':::'111&
 &
 	 	 	 	 	s   AAAN)__name__
__module____qualname__r   r>   rB   rJ    r?   r   r   r   5   sP             / / /</ / /    r?   r   c                       e Zd Zd ZdS )VectorComparisonMixinc                    t          |          t          |          k    r|                     d           t          t          ||                    D ]3\  }\  }}|                     ||d                    |                     4d S )NzTuples are not of equal sizezvalues at index {} do not match)msg)lenfail	enumeratezipassertAlmostEqualformat)r   vec1vec2idxijs         r   assertVectorsAlmostEqualz.VectorComparisonMixin.assertVectorsAlmostEqual~   s    t99D		!!II4555$St__55 	I 	IKC!Q""1;BB3GG # I I I I	I 	Ir?   N)rK   rL   rM   r^   rN   r?   r   rP   rP   |   s(        I I I I Ir?   rP   c                       e Zd Zd Zd ZdS )
Multiplierc                     d| S )NM*rN   r   others     r   __mul__zMultiplier.__mul__   s    E||r?   c                     | dS )N*MrN   rc   s     r   __rmul__zMultiplier.__rmul__   s    |||r?   N)rK   rL   rM   re   rh   rN   r?   r   r`   r`      s2              r?   r`   c                   P    e 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dS )	TestVec2Dc                    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   rn   )Vec2Dr9   assertIsInstanceassertRaises	TypeErrorr   vecs     r   test_constructorzTestVec2D.test_constructor   s    CmmQ%%%Q###c5))))U+++)UA...)UF333)UC000)UAq!44444r?   c                 l    t          dd          }|                     t          |          d           d S )Ng/$?gX9v?z(0.57,1.23))rp   r9   reprrt   s     r   	test_reprzTestVec2D.test_repr   s3    E5!!cM22222r?   c                 v   t          dd          }t          dd          }t          dd          }|                     ||           |                     |t          |                     |                     t          |          |           |                     ||           |                     ||           d S )Nr   rn           *   )rp   r9   tupleassertNotEqual)r   rY   rZ   vec3s       r   test_equalityzTestVec2D.test_equality   s    Q{{S!}}R||t$$$uT{{+++td+++D$'''D$'''''r?   c                 v   t          dd          }t          t          j        dz             D ]}|                     |          5  t          j        ||          }t          j        |          }|                     ||           |                     |t                      d d d            n# 1 swxY w Y   d S )Nrl   rm   rn   )proto)protocol)	rp   rangepickleHIGHEST_PROTOCOLsubTestdumpsloadsr9   rq   )r   ru   r   pickled	unpickleds        r   test_picklingzTestVec2D.test_pickling   s    Cmm62Q677 	8 	8EE** 8 8 ,sU;;;"L11	  C000%%i777	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8s   AB--B1	4B1	c                     |D ]u}|                      |          5  |\  \  }}}t          | }t          | } |||          }	t          | }|                     |	|           d d d            n# 1 swxY w Y   vd S )Ncase)r   rp   r^   )
r   
test_caseslambda_operator	test_casefirstsecondr=   op1op2results
             r   _assert_arithmetic_casesz"TestVec2D._assert_arithmetic_cases   s    # 	@ 	@I9-- @ @.7+%(UmVn(c22 (+--fh???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@s   AA--A1	4A1	c                 <    g d}|                      |d            d S )N))r   r   rn   rn   )      ?r   ))r   )rm   rm   )rn   rm   )))g      ?r   r   )      @rn   c                     | |z   S NrN   xys     r   <lambda>z0TestVec2D.test_vector_addition.<locals>.<lambda>   
    q1u r?   r   r   r   s     r   test_vector_additionzTestVec2D.test_vector_addition   s5    
 
 

 	%%j2D2DEEEEEr?   c                 <    ddg}|                      |d            d S )N)r   )r   r   )))g     @%@      ?)
   r   )g      ?r   c                     | |z
  S r   rN   r   s     r   r   z3TestVec2D.test_vector_subtraction.<locals>.<lambda>   r   r?   r   r   s     r   test_vector_subtractionz!TestVec2D.test_vector_subtraction   s3     )8


 	%%j2D2DEEEEEr?   c                 N   t          dd          }t          dd          }||z  }d}|                     ||           t          dd          }t          dd          }|                     |dz  |           |                     d|z  |           |                     |dz  |           |                     d|z  |           t                      }|                     ||z  t          |d          d	|d
          d	                     |                     ||z  d|            d S )Nr   rl      #         g      $@r   rg   rn   rb   )rp   rW   r^   r`   r9   )r   rY   rZ   answerr=   ru   Ms          r   test_vector_multiplyzTestVec2D.test_vector_multiply   s)   R}}S!}}vx000CmmB<<%%cBh999%%b3h999%%cDj(;;;%%dSj(;;;LLq%3q6#a&}}}"E"EFFFS*s**-----r?   c                 X    t          dd          }d}|                     | |           d S )Nr   )r   r   )rp   r^   )r   ru   r=   s      r   test_vector_negativezTestVec2D.test_vector_negative   s2    Bnn%%sdH55555r?   c                 ,   |                      t          t          dd                    d           |                     t          t          dd                    d           |                      t          t          dd                    d           d S )N      r   r   r   g      @)rW   absrp   r9   r   s    r   test_distancezTestVec2D.test_distance   sz    s5A;;//444U1a[[))1---s5a==11377777r?   c                     g d}|D ]l}|                      |          5  |\  \  }}}t          | }|                    |          }|                     ||           d d d            n# 1 swxY w Y   md S )N)))r   r   r   ))ro   Z   r   ))ro   irn   r   ))r      r   ))r   h  r   r   )r   rp   rotater^   )r   casesr   ru   rotr=   gots          r   test_rotatezTestVec2D.test_rotate   s    
 
 
  	= 	=D4(( = ='+$
cHSkjjoo--c8<<<	= = = = = = = = = = = = = = =	= 	=s   =A((A,	/A,	N)rK   rL   rM   rv   ry   r   r   r   r   r   r   r   r   r   rN   r?   r   rj   rj      s        
5 
5 
53 3 3( ( (8 8 8@ @ @F F FF F F. . .&6 6 6
8 8 8
= = = = =r?   rj   c                   t    e 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d Zd Zd Zd Zd Zd ZdS )TestTNavigatorc                 B    t                                           | _        d S r   )r   
TNavigatornavr   s    r   setUpzTestTNavigator.setUp  s    $$&&r?   c                     | j                             dd           |                     | j                                         d           |                     | j                                         d           d S Nr   )r   gotorW   xcorycorr   s    r   	test_gotozTestTNavigator.test_goto	  s^    c4   tx}}444tx}}55555r?   c                    |                      | j                                        | j        j                   | j                            dd           |                      | j                                        | j        j                   d S r   )r9   r   pos	_positionr   r   s    r   test_poszTestTNavigator.test_pos  sh    );<<<c4   );<<<<<r?   c                     |                      | j        j        d           | j                            d           |                     | j        j        d           d S )Nr   r   r   )r{   r   )r9   r   _orientleftr^   r   s    r   	test_leftzTestTNavigator.test_left  sR    )8444b%%dh&6
CCCCCr?   c                     |                      | j        j        d           | j                            d           |                     | j        j        d           d S )Nr   r   )r   g      )r9   r   r   rightr^   r   s    r   
test_rightzTestTNavigator.test_right  sR    )8444r%%dh&6	BBBBBr?   c                    | j                             dd           |                     | j                                         d           |                     | j                                         d           | j                                          |                     | j                                         d           |                     | j                                         d           d S )Nr   r   r   )r   r   rW   r   r   resetr   s    r   
test_resetzTestTNavigator.test_reset  s    c4   tx}}444tx}}555tx}}222tx}}22222r?   c                    | j                             d           t          dd          }|                     | j                                         |           | j                                          | j                             d           | j                             d           t          dd          }|                     | j                                         |           |                     t          | j         j        d           d S )N   r   r   
skldjfldsk)	r   forwardrp   r^   positionr   r   rr   rs   r   r=   s     r   test_forwardzTestTNavigator.test_forward%  s    a==%%dh&7&7&9&98DDDbC==%%dh&7&7&9&98DDD)TX%5|DDDDDr?   c                    | j                             d           t          dd          }|                     | j                                         |           | j                                          | j                             d           | j                             d           t          dd          }|                     | j                                         |           d S )Nr   8r   r   )r   backrp   r^   r   r   r   r   s     r   test_backwardszTestTNavigator.test_backwards2  s    cq>>%%dh&7&7&9&98DDDrcC==%%dh&7&7&9&98DDDDDr?   c                     | j                             d           d}|                     | j                             t	          dd                    |           d S )Nr   r   )r   r   rW   distancerp   r   s     r   r   zTestTNavigator.test_distance=  sQ    tx00q<<hGGGGGr?   c                    | j                             d           |                     | j                                         d           | j                                          |                     | j                                         d           | j                                          |                     | j                                         d           d S )Nr   gm U!?)r   r   rW   headingradiansdegreesr   s    r   test_radians_and_degreesz'TestTNavigator.test_radians_and_degreesB  s    btx//112666tx//11:>>>tx//11266666r?   c           	      Z   g d}|D ]\  \  }}}|                      | j                            ||          |           |                      | j                            ||f          |           |                      | j                            t          ||                    |           d S )N)))r   r   r{   ))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@)r9   r   towardsrp   )r   coordinatesr   r   r=   s        r   test_towardszTestTNavigator.test_towardsJ  s    

 

 

 !, 	F 	FFQHTX--a33X>>>TX--q!f55x@@@TX--eAqkk::HEEEE	F 	Fr?   c                 (   | j                             d           |                     | j                                         d           | j                             d           |                     | j                                         d           | j                             d           |                     | j                                         d           |                     t          | j         j        d           | j                                          g d}t          |          dz  }|D ]}| j                             |           | 	                    | j                                         |           | j                                          dt          |          z
  dz  }|D ]}| j                             |           | 	                    | j                                         |           | j                                          g d	}d
}|D ]}|d
k     r(| j                             t          |                     n| j                             |           ||z  }|                     | j                                         |dz             d S )Nr   -      g?g̬`@sdkfjdsf)r         ,  r   )
r   r  iVr  i.gfffff&A@gIr   g{G=r   r   )r   r   rW   r   r   rr   rs   r   sumr9   r   )r   	rotationsr   num
sum_so_fars        r   test_headingzTestTNavigator.test_heading]  s]   btx//112666btx//113777stx//115999)TX^Z@@@&&&	Y#% 	 	CHMM#))++V444c)nn$+ 	  	 CHNN3))++V444LLL	
 	I 	ICQwws3xx((((c"""#J""48#3#3#5#5zC7GHHHH	I 	Ir?   c                 >   | j                             d           |                     | j                                         d           | j                             d           |                     | j                                         d           | j                             d           |                     | j                                         d           | j                             d           |                     | j                                         d           d S )NgGzY@gQ^gp=
ףm@gQBgףp=S@i x   )r   
setheadingrW   r   r   s    r   test_setheadingzTestTNavigator.test_setheading  s    F###tx//116:::G$$$tx//11?CCCH%%%tx//113CDDDF###tx//11:>>>>>r?   c                     | j                             d           | j                             d           | j                             d           |                     | j                                         d           d S )Nr   r   r   )g      Y@g      i)r   r   r   r^   r   r   s    r   test_positionszTestTNavigator.test_positions  sh    b%%dhllnnoFFFFFr?   c                     | j                             d           | j                             d           |                     | j                                         d           d S )N Zd;YA)r  r  )r   setxsetyr^   r   r   s    r   test_setx_and_setyz!TestTNavigator.test_setx_and_sety  sQ    j!!!j!!!%%dhllnn6NOOOOOr?   c                 T   | j                             d           | j                             d           | j                                          |                     | j                                         d           |                     | j                                         d           d S )Nr   i`yr   r   )r   r   r   homer^   r   rW   r   r   s    r   	test_homezTestTNavigator.test_home  s    b!!!%%dhllnne<<<tx//11155555r?   c                    |                      | j                            dd          d           t          dd          }|                      | j                            |          d           t                                          }|                    d           |                    d           |                      | j                            |          d           d S )	Nr   (   2   g)\(?gMbP?g-)?r   r%   )rW   r   r   rp   r   r   r   r   )r   ru   another_turtles      r   test_distance_methodz#TestTNavigator.test_distance_method  s    tx00R88"===D$tx00557JKKK**,,Bu%%%tx00@@%HHHHHr?   N)rK   rL   rM   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  rN   r?   r   r   r     s4       ' ' '6 6 6
= = =
D D D
C C C
3 3 3E E E	E 	E 	EH H H
7 7 7F F F& I  I  ID? ? ?G G GP P P
6 6 6I I I I Ir?   r   c                       e Zd Zd Zd ZdS )TestTPenc                 r   t                                           }|                     |                                           |                                 |                     |                                           |                                 |                     |                                           d S r   )r   TPen
assertTrueisdownpenupassertFalsependownr   tpens     r   test_pendown_and_penupzTestTPen.test_pendown_and_penup  s    {{}}&&&

'''&&&&&r?   c                 r   t                                           }|                     |                                           |                                 |                     |                                           |                                 |                     |                                           d S r   )r   r   r!  	isvisible
hideturtler$  
showturtler&  s     r   (test_showturtle_hideturtle_and_isvisiblez1TestTPen.test_showturtle_hideturtle_and_isvisible  s    {{}}(()))))***(()))))r?   N)rK   rL   rM   r(  r-  rN   r?   r   r  r    s2        ' ' '* * * * *r?   r  __main__)r   unittesttestr   test.supportr   r   import_moduler   rp   r7   rA   rD   TestCaser   rP   r`   rj   r   r  rK   mainrN   r?   r   <module>r5     s           & & & & & & " " " " " " 
%	$X	.	..
 D D D D Dx( D D DNI I I I I I I I       s= s= s= s= s=%x'8 s= s= s=l^I ^I ^I ^I ^I*H,= ^I ^I ^IB* * * * *x  * * *. zHMOOOOO r?   