
    daf'8                        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 G d dej                        Zedk(  r ej,                          yy)    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y)TurtleConfigTestc                    | j                  t        j                  t        j                         t	        t        j                  d      5 }|j                  |       d d d        t        j                  S # 1 sw Y   t        j                  S xY w)Nw)
addCleanupr   unlinkTESTFNopenwrite)selfcfg_strfs      +/root/Python-3.12.4/Lib/test/test_turtle.pyget_cfg_filezTurtleConfigTest.get_cfg_file7   sb    	(()*:*:;)""C( 	AGGG		s   	A33Bc                     | j                  t              }t        j                  |      }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#}| j	                  ||       y )$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

d
s
 #
 #	

 
 
 G
 
 S
 e
 X
 
 &
 6
 
  	!
" X#
$ &-)
. 	X.    c                     | j                  t              }t        j                  |      }dddddd}| j	                  ||       y )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[   sL    $$_5''1
 !
 	X.r?   c                 <   | j                  t              }t        j                         5 }t        j                  |      }d d d        j                         }| j                  d|       | j                  d|       | j                  ddd       y # 1 sw Y   SxY w)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$$& 	6&++H5J	6 //#0':'1&
 		6 	6s   BBN)__name__
__module____qualname__r   r>   rB   rJ    r?   r   r   r   5   s     /</r?   r   c                       e Zd Zd Zy)VectorComparisonMixinc                     t        |      t        |      k7  r| j                  d       t        t        ||            D ]+  \  }\  }}| j	                  ||dj                  |             - y )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~   sj    t9D	!II45$St_5 	IKC!Q""1;BB3G # I	Ir?   N)rK   rL   rM   r^   rN   r?   r   rP   rP   |   s    Ir?   rP   c                       e Zd Zd Zd Zy)
Multiplierc                     d| S )NM*rN   r   others     r   __mul__zMultiplier.__mul__   s    E7|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`      s    r?   r`   c                   N    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y)	TestVec2Dc                    t        dd      }| j                  |d   d       | j                  |d   d       | j                  |t                | j                  t        t                | j                  t        t         d       | j                  t        t         d       | j                  t        t         |       | j                  t        t         ddd       y )N      ?   r      r   rn   )Vec2Dr9   assertIsInstanceassertRaises	TypeErrorr   vecs     r   test_constructorzTestVec2D.test_constructor   s    CmQ%Q#c5))U+)UA.)UF3)UC0)UAq!4r?   c                 R    t        dd      }| j                  t        |      d       y )Ng/$?gX9v?z(0.57,1.23))rp   r9   reprrt   s     r   	test_reprzTestVec2D.test_repr   s"    E5!cM2r?   c                 $   t        dd      }t        dd      }t        dd      }| j                  ||       | j                  |t        |             | j                  t        |      |       | j                  ||       | j                  ||       y )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                 T   t        dd      }t        t        j                  dz         D ]q  }| j	                  |      5  t        j
                  ||      }t        j                  |      }| j                  ||       | j                  |t                d d d        s y # 1 sw Y   ~xY w)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m622Q67 	8EE* 8 ,,sU;"LL1	  C0%%i7	8 8	88 8s   ABB'	c                     |D ]X  }| j                  |      5  |\  \  }}}t        | }t        | } |||      }	t        | }| j                  |	|       d d d        Z y # 1 sw Y   exY w)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 (+--fh?@ @	@@ @s   <AA(	c                 2    g d}| j                  |d        y )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   s    

 	%%j2DEr?   c                 2    ddg}| j                  |d        y )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   s$     )8


 	%%j2DEr?   c                    t        dd      }t        dd      }||z  }d}| j                  ||       t        dd      }t        dd      }| j                  |dz  |       | j                  d|z  |       | j                  |dz  |       | j                  d|z  |       t               }| j	                  ||z  t        |d    d	|d
    d	             | j	                  ||z  d|        y )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CmB<%%cBh9%%b3h9%%cDj(;%%dSj(;Lq%3q6("#a&}"EFSBse*-r?   c                 F    t        dd      }d}| j                  | |       y )Nr   )r   r   )rp   r^   )r   ru   r=   s      r   test_vector_negativezTestVec2D.test_vector_negative   s$    Bn%%sdH5r?   c                     | j                  t        t        dd            d       | j                  t        t        dd            d       | j                  t        t        dd            d       y )N      r   r   r   g      @)rW   absrp   r9   r   s    r   test_distancezTestVec2D.test_distance   sS    s5A;/4U1a[)1-s5a=137r?   c                     g d}|D ]P  }| j                  |      5  |\  \  }}}t        | }|j                  |      }| j                  ||       d d d        R y # 1 sw Y   ]xY w)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   sv    
  	=D4( ='+$
cHSkjjo--c8<	= =	== =s   4AA$	N)rK   rL   rM   rv   ry   r   r   r   r   r   r   r   r   r   rN   r?   r   rj   rj      s<    
53(8@FF.&6
8
=r?   rj   c                   x    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 Zy)TestTNavigatorc                 6    t         j                         | _        y r   )r   
TNavigatornavr   s    r   setUpzTestTNavigator.setUp  s    $$&r?   c                     | j                   j                  dd       | j                  | j                   j                         d       | j                  | j                   j	                         d       y Nr   )r   gotorW   xcorycorr   s    r   	test_gotozTestTNavigator.test_goto	  sH    c4 txx}}4txx}}5r?   c                    | j                   j                  ddd       | j                  | j                   j                         d       | j                  | j                   j	                         d       | j                   j                  ddd       | j                  | j                   j                         d       | j                  | j                   j	                         d       y )N   iTfill_gapir   F)r   teleportrW   r   r   r   s    r   test_teleportzTestTNavigator.test_teleport  s    "cD1txx}}3txx}}4#rE2txx}}4txx}}3r?   c                 4   | j                  | j                  j                         | j                  j                         | j                  j	                  dd       | j                  | j                  j                         | j                  j                         y r   )r9   r   pos	_positionr   r   s    r   test_poszTestTNavigator.test_pos  s\    ););<c4 ););<r?   c                     | j                  | j                  j                  d       | j                  j                  d       | j	                  | j                  j                  d       y )Nr   r   r   )r{   r   )r9   r   _orientleftr^   r   s    r   	test_leftzTestTNavigator.test_left  sF    ))84b%%dhh&6&6
Cr?   c                     | j                  | j                  j                  d       | j                  j                  d       | j	                  | j                  j                  d       y )Nr   r   )r   g      )r9   r   r   rightr^   r   s    r   
test_rightzTestTNavigator.test_right   sF    ))84r%%dhh&6&6	Br?   c                    | j                   j                  dd       | j                  | j                   j                         d       | j                  | j                   j	                         d       | j                   j                          | j                  | j                   j                         d       | j                  | j                   j	                         d       y )Nr   r   r   )r   r   rW   r   r   resetr   s    r   
test_resetzTestTNavigator.test_reset%  s    c4 txx}}4txx}}5txx}}2txx}}2r?   c                    | j                   j                  d       t        dd      }| j                  | j                   j	                         |       | j                   j                          | j                   j                  d       | j                   j                  d       t        dd      }| j                  | j                   j	                         |       | j                  t        | j                   j                  d       y )N   r   r   
skldjfldsk)	r   forwardrp   r^   positionr   r   rr   rs   r   r=   s     r   test_forwardzTestTNavigator.test_forward-  s    a=%%dhh&7&7&98DbC=%%dhh&7&7&98D)TXX%5%5|Dr?   c                    | j                   j                  d       t        dd      }| j                  | j                   j	                         |       | j                   j                          | j                   j                  d       | j                   j                  d       t        dd      }| j                  | j                   j	                         |       y )Nr   8r   r   )r   backrp   r^   r   r   r   r   s     r   test_backwardszTestTNavigator.test_backwards:  s    cq>%%dhh&7&7&98DrcC=%%dhh&7&7&98Dr?   c                     | j                   j                  d       d}| j                  | j                   j                  t	        dd            |       y )Nr   r   )r   r   rW   distancerp   r   s     r   r   zTestTNavigator.test_distanceE  s>    txx00q<hGr?   c                    | j                   j                  d       | j                  | j                   j                         d       | j                   j	                          | j                  | j                   j                         d       | j                   j                          | j                  | j                   j                         d       y )Nr   gm U!?)r   r   rW   headingradiansdegreesr   s    r   test_radians_and_degreesz'TestTNavigator.test_radians_and_degreesJ  s    btxx//126txx//1:>txx//126r?   c           	      B   g d}|D ]  \  \  }}}| j                  | j                  j                  ||      |       | j                  | j                  j                  ||f      |       | j                  | j                  j                  t        ||            |        y )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_towardsR  s    

 !, 	FFQHTXX--a3X>TXX--q!f5x@TXX--eAqk:HE	Fr?   c                    | j                   j                  d       | j                  | j                   j                         d       | j                   j                  d       | j                  | j                   j                         d       | j                   j	                  d       | j                  | j                   j                         d       | j                  t        | j                   j                  d       | j                   j                          g d}t        |      dz  }|D ]  }| j                   j                  |        | j                  | j                   j                         |       | j                   j                          dt        |      z
  dz  }|D ]  }| j                   j	                  |        | j                  | j                   j                         |       | j                   j                          g d	}d
}|D ]y  }|d
k  r%| j                   j	                  t        |             n| j                   j                  |       ||z  }| j                  | j                   j                         |dz         { y )Nr   -      g?g̬`@sdkfjdsf)r   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_headinge  s   btxx//126btxx//137stxx//159)TXX^^Z@&	Y#% 	CHHMM#	))+V4c)n$+ 	 CHHNN3	 ))+V4L	
 	ICQws3x(c"#J""488#3#3#5zC7GH	Ir?   c                 ,   | j                   j                  d       | j                  | j                   j                         d       | j                   j                  d       | j                  | j                   j                         d       | j                   j                  d       | j                  | j                   j                         d       | j                   j                  d       | j                  | j                   j                         d       y )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#txx//16:G$txx//1?CH%txx//13CDF#txx//1:>r?   c                     | j                   j                  d       | j                   j                  d       | j                   j                  d       | j                  | j                   j	                         d       y )Nr   r   r   )g      Y@g      i)r   r   r   r^   r   r   s    r   test_positionszTestTNavigator.test_positions  sP    b%%dhhllnoFr?   c                     | j                   j                  d       | j                   j                  d       | j                  | j                   j	                         d       y )N Zd;YA)r  r  )r   setxsetyr^   r   r   s    r   test_setx_and_setyz!TestTNavigator.test_setx_and_sety  s=    j!j!%%dhhlln6NOr?   c                 L   | j                   j                  d       | j                   j                  d       | j                   j                          | j	                  | j                   j                         d       | j                  | j                   j                         d       y )Nr   i`yr   r   )r   r   r   homer^   r   rW   r   r   s    r   	test_homezTestTNavigator.test_home  sh    b!%%dhhllne<txx//115r?   c                    | j                  | j                  j                  dd      d       t        dd      }| j                  | j                  j                  |      d       t        j                         }|j                  d       |j                  d       | j                  | j                  j                  |      d       y )	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    txx00R8"=D$txx0057JK**,Bu%txx00@%Hr?   N)rK   rL   rM   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r!  rN   r?   r   r   r     sg    '6
4=
D
C
3E	EH
7F& ID?GP
6Ir?   r   c                       e Zd Zd Zd Zd Zy)TestTPenc                 &   t         j                         }| j                  |j                                |j	                          | j                  |j                                |j                          | j                  |j                                y r   )r   TPen
assertTrueisdownpenupassertFalsependownr   tpens     r   test_pendown_and_penupzTestTPen.test_pendown_and_penup  sW    {{}&

'&r?   c                 &   t         j                         }| j                  |j                                |j	                          | j                  |j                                |j                          | j                  |j                                y r   )r   r%  r&  	isvisible
hideturtler)  
showturtler+  s     r   (test_showturtle_hideturtle_and_isvisiblez1TestTPen.test_showturtle_hideturtle_and_isvisible  s\    {{}())*()r?   c                 F   t         j                         }dD ]  }|j                          |j                  dd|       | j	                  |j                                |j                          |j                  dd|       | j                  |j                                 y )N)TFr   r   r   )r   r%  r(  r   r)  r'  r*  r&  )r   r,  fill_gap_values      r   r   zTestTPen.test_teleport  sx    {{}+ 	+NJJLMM#s^M<T[[]+LLNMM$~M>OODKKM*	+r?   N)rK   rL   rM   r-  r2  r   rN   r?   r   r#  r#    s    '*
+r?   r#  c                       e Zd Zd Zy)TestModuleLevelc                     dd l }dddddd}|D ]\  }| j                  |      5  t        t        |      }|j	                  |      }| j                  t        |      ||          d d d        ^ y # 1 sw Y   ixY w)	Nr   z3(x=None, y=None, *, fill_gap: bool = False) -> Nonez()z(x, y=None)z(*args)z(pen=None, **pendict))r   undor   bgcolorpen)name)inspectr   getattrr   	signaturer9   str)r   r<  known_signaturesr;  objsigs         r   test_all_signaturesz#TestModuleLevel.test_all_signatures  s     F! *
 % 	CD4( Cfd+'',  S+;D+ABC C	CC Cs   A A//A8	N)rK   rL   rM   rC  rN   r?   r   r6  r6    s    Cr?   r6  __main__)r   unittesttestr   test.supportr   r   import_moduler   rp   r7   rA   rD   TestCaser   rP   r`   rj   r   r#  r6  rK   mainrN   r?   r   <module>rK     s       & " 
%	$	$X	..
 Dx(( DNI I s=%x'8'8 s=lfI*H,=,= fIR +x    +FCh'' C( zHMMO r?   