a 5êdg#3ã@s´ddlZddlZddlmZe d¡ZejZdZdZdZ Gdd„dej ƒZ Gd d „d ƒZ Gd d „d ƒZ Gd d„de ej ƒZGdd„de ej ƒZGdd„dej ƒZedkr°e ¡dS)é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,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTurtleConfigTestcCsL| tjtj¡ttjdƒ}| |¡Wdƒn1s<0YtjS)NÚw)Z addCleanuprÚunlinkZTESTFNÚopenÚwrite)ÚselfZcfg_strÚf©r ú,/usr/local/lib/python3.9/test/test_turtle.pyÚ get_cfg_file4s(zTurtleConfigTest.get_cfg_filecCsR| t¡}t |¡}ddddddddddd d d d dd dddddœ}| ||¡dS)Ngè?gš™™™™™é?éôéÈédZworldéÿé'ZcircleÚredÚblueÚautoÚenglishrZscreenzPython Turtle GraphicsÚ)ÚwidthZheightZ canvwidthZ canvheightZ leftrightZ topbottomÚmodeZ colormodeÚdelayZundobuffersizeÚ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_dictcCs4| t¡}t |¡}ddddddœ}| ||¡dS)NrrFr)rrrrr!)r Útest_config_tworr#r$r%r r r Ú&test_partial_config_dict_with_commentsXs  ûz7TurtleConfigTest.test_partial_config_dict_with_commentscCsr| t¡}t ¡}t |¡}Wdƒn1s20Y| ¡}| d|¡| d|¡| |dddœ¡dS)NzBad line in config-file zfillcolor: bluerF)rr) r Úinvalid_test_configrZcaptured_stdoutrr#ÚgetvalueZassertInr$)r r&Ústdoutr'Úerr_msgr r r Útest_config_dict_invalidgs  (  þz)TurtleConfigTest.test_config_dict_invalidN)Ú__name__Ú __module__Ú __qualname__r r)r+r0r r r r r2src@seZdZdd„ZdS)ÚVectorComparisonMixincCsPt|ƒt|ƒkr| d¡tt||ƒƒD]"\}\}}|j||d |¡dq(dS)NzTuples are not of equal sizezvalues at index {} do not match)Úmsg)ÚlenZfailÚ enumerateÚzipÚassertAlmostEqualÚformat)r Úvec1Úvec2ÚidxÚiÚjr r r ÚassertVectorsAlmostEqual{s   ÿz.VectorComparisonMixin.assertVectorsAlmostEqualN)r1r2r3r@r r r r r4ysr4c@seZdZdd„Zdd„ZdS)Ú MultipliercCs d|›S)NúM*r ©r Úotherr r r Ú__mul__„szMultiplier.__mul__cCs |›dS)Nú*Mr rCr r r Ú__rmul__‡szMultiplier.__rmul__N)r1r2r3rErGr r r r rA‚srAc@sdeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dS)Ú TestVec2DcCs‚tddƒ}| |dd¡| |dd¡| |t¡| tt¡| ttd¡| ttd¡| tt|¡| ttddd¡dS)Nçà?éré©rrK)ÚVec2Dr$ÚassertIsInstanceÚ assertRaisesÚ TypeError©r Úvecr r r Útest_constructors   zTestVec2D.test_constructorcCstddƒ}| t|ƒd¡dS)Ng¾Ÿ/Ý$â?gX9´Èv¾ó?z (0.57,1.23))rMr$ÚreprrQr r r Ú test_repr™s zTestVec2D.test_reprcCsftddƒ}tddƒ}tddƒ}| ||¡| |t|ƒ¡| t|ƒ|¡| ||¡| ||¡dS)NrrKçé*)rMr$ÚtupleZassertNotEqual)r r;r<Zvec3r r r Ú test_equalitys     zTestVec2D.test_equalityc Cs~tddƒ}ttjdƒD]`}|j|d@tj||d}t |¡}| ||¡| |t¡Wdƒq1sn0YqdS)NrIrJrK)Úproto)Úprotocol) rMÚrangeÚpickleÚHIGHEST_PROTOCOLÚsubTestÚdumpsÚloadsr$rN)r rRrZZpickledZ unpickledr r r Ú test_pickling§s   zTestVec2D.test_picklingc Cst|D]j}|j|dJ|\\}}}t|Ž}t|Ž}|||ƒ} t|Ž}| | |¡Wdƒq1sd0YqdS)N©Úcase)r_rMr@) r Ú test_casesZlambda_operatorZ test_caseÚfirstÚsecondr(Zop1Zop2Úresultr r r Ú_assert_arithmetic_cases°s  z"TestVec2D._assert_arithmetic_casescCsgd¢}| |dd„¡dS)N))©©rr©rKrK)çð?rm))©éÿÿÿÿr)rJrJ)rKrJ)))gø?rrl)ç@rKcSs||S©Nr ©ÚxÚyr r r ÚÇóz0TestVec2D.test_vector_addition..©ri©r rer r r Útest_vector_addition¿szTestVec2D.test_vector_additioncCsddg}| |dd„¡dS)N)rj)roro)))g@%@çÀ?)é r)gä?rzcSs||Srqr rrr r r ruÐrvz3TestVec2D.test_vector_subtraction..rwrxr r r Útest_vector_subtractionÉsþz!TestVec2D.test_vector_subtractioncCsÊtddƒ}tddƒ}||}d}| ||¡tddƒ}tddƒ}| |d|¡| d||¡| |d|¡| d||¡tƒ}| ||t|d›d |d ›d ƒ¡| ||d |›¡dS) Nr{rIéé#éég$@rrFrKrB)rMr9r@rAr$)r r;r<Zanswerr(rRÚMr r r Útest_vector_multiplyÒs     *zTestVec2D.test_vector_multiplycCs tddƒ}d}| | |¡dS)Nr{éöÿÿÿ)rƒr{)rMr@©r rRr(r r r Útest_vector_negativeås zTestVec2D.test_vector_negativecCs^tddƒ}d}| t|ƒ|¡tddƒ}d}| t|ƒ|¡tddƒ}d}| t|ƒ|¡dS)Néér{rrpg@)rMr$Úabsr„r r r Ú test_distanceês   zTestVec2D.test_distancec Cslgd¢}|D]Z}|j|d:|\\}}}t|Ž}| |¡}| ||¡Wdƒq 1s\0Yq dS)N)))rkrrk))rLéZrn))rLi¦ÿÿÿ©rKr))r‹é´rn))r‹éhr‹rc)r_rMÚrotater@)r ZcasesrdrRZrotr(Zgotr r r Ú test_rotate÷s  zTestVec2D.test_rotateN)r1r2r3rSrUrYrbriryr|r‚r…r‰rr r r r rH‹s      rHc@s”eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#S)$ÚTestTNavigatorcCst ¡|_dSrq)rÚ TNavigatorÚnav©r r r r ÚsetUp szTestTNavigator.setUpcCs6|j dd¡| |j ¡d¡| |j ¡d¡dS©Nréœÿÿÿ)r’Úgotor9ÚxcorÚycorr“r r r Ú test_gotoszTestTNavigator.test_gotocCs>| |j ¡|jj¡|j dd¡| |j ¡|jj¡dSr•)r$r’ÚposZ _positionr—r“r r r Útest_posszTestTNavigator.test_poscCs0| |jjd¡|j d¡| |jjd¡dS)N©rmrrŠ)rVrm)r$r’Ú_orientÚleftr@r“r r r Ú test_lefts zTestTNavigator.test_leftcCs0| |jjd¡|j d¡| |jjd¡dS)NrrŠ)rgð¿)r$r’ržÚrightr@r“r r r Ú test_rights zTestTNavigator.test_rightcCsd|j dd¡| |j ¡d¡| |j ¡d¡|j ¡| |j ¡d¡| |j ¡d¡dS)Nrr–r)r’r—r9r˜r™Úresetr“r r r Ú test_reset"s  zTestTNavigator.test_resetcCs||j d¡tddƒ}| |j ¡|¡|j ¡|j d¡|j d¡tddƒ}| |j ¡|¡| t|jjd¡dS)Né–rrŠZ skldjfldsk) r’ÚforwardrMr@Úpositionr£rŸrOrP©r r(r r r Ú test_forward*s      zTestTNavigator.test_forwardcCsj|j d¡tddƒ}| |j ¡|¡|j ¡|j d¡|j d¡tddƒ}| |j ¡|¡dS)Nré8ÿÿÿrrŠ)r’ZbackrMr@r§r£r¡r¨r r r Útest_backwards7s      zTestTNavigator.test_backwardscCs.|j d¡d}| |j tddƒ¡|¡dS)Nrr)r’r¦r9ÚdistancerMr¨r r r r‰Bs zTestTNavigator.test_distancecCsZ|j d¡| |j ¡d¡|j ¡| |j ¡d¡|j ¡| |j ¡d¡dS)NrŠgßm Uû!ù?)r’rŸr9ÚheadingÚradiansÚdegreesr“r r r Útest_radians_and_degreesGs    z'TestTNavigator.test_radians_and_degreescCsfgd¢}|D]T\\}}}| |j ||¡|¡| |j ||f¡|¡| |j t||ƒ¡|¡q dS)N)))rrrV))rrg€F@))rrg€V@))r–rgà`@))r–rg€f@))r–r–g l@))rr–gàp@))rr–g°s@)r$r’ZtowardsrM)r Z coordinatesrsrtr(r r r Ú test_towardsOs  zTestTNavigator.test_towardscCs`|j d¡| |j ¡d¡|j d¡| |j ¡d¡|j d¡| |j ¡d¡| t|jjd¡|j ¡gd¢}t|ƒd}|D]}|j |¡qŽ|  |j ¡|¡|j ¡dt|ƒd}|D]}|j |¡qÐ|  |j ¡|¡|j ¡gd ¢}d }|D]L}|d kr.|j t |ƒ¡n |j |¡||7}| |j ¡|d¡qdS) NrŠé-é‡gš™™™™™ù?gÍÌÌÌ̬`@Zsdkfjdsf)r{ééªé,r) r{r´iVÿÿÿr¶i.ÿÿÿgfffff&A@gš™™™™IÀrƒg{®Gáú=Àrr) r’rŸr9r­r¡rOrPr£Úsumr$rˆ)r Z rotationsrhÚnumZ sum_so_farr r r Ú test_headingbs6         zTestTNavigator.test_headingcCs||j d¡| |j ¡d¡|j d¡| |j ¡d¡|j d¡| |j ¡d¡|j d¡| |j ¡d¡dS)Ng®Gáz”Y@g…ëQ¸Î^Àgp= ×£˜m@g…ëQ¸BÀg×£p=êS@ià“éx)r’Z setheadingr9r­r“r r r Útest_setheading„s    zTestTNavigator.test_setheadingcCs:|j d¡|j d¡|j d¡| |j ¡d¡dS)NrrŠrª)gY@giÀ)r’r¦rŸr@r›r“r r r Útest_positionsŽs   zTestTNavigator.test_positionscCs.|j d¡|j d¡| |j ¡d¡dS)Nç·ÑÞùÀçZd;ßY™A)r½r¾)r’ZsetxZsetyr@r›r“r r r Útest_setx_and_sety”s  z!TestTNavigator.test_setx_and_setycCsJ|j d¡|j d¡|j ¡| |j ¡d¡| |j ¡d¡dS)Nr€i`yþÿrkr)r’rŸr¦Úhomer@r›r9r­r“r r r Ú test_home™s    zTestTNavigator.test_homecCsh| |j dd¡d¡tddƒ}| |j |¡d¡t ¡}| d¡| d¡| |j |¡d¡dS) Nr€é(é2g)\Âõ(Ì?gü©ñÒMbP?gð-Ó)Ì?rŠr)r9r’r¬rMrr‘rŸr¦)r rRZanother_turtler r r Útest_distance_method s   z#TestTNavigator.test_distance_methodN)r1r2r3r”ršrœr r¢r¤r©r«r‰r°r±r¹r»r¼r¿rÁrÄr r r r r s"  " rc@seZdZdd„Zdd„ZdS)ÚTestTPencCsFt ¡}| | ¡¡| ¡| | ¡¡| ¡| | ¡¡dSrq)rÚTPenÚ assertTrueZisdownZpenupÚ assertFalseZpendown©r Ztpenr r r Útest_pendown_and_penup¬s zTestTPen.test_pendown_and_penupcCsFt ¡}| | ¡¡| ¡| | ¡¡| ¡| | ¡¡dSrq)rrÆrÇZ isvisibleZ hideturtlerÈZ showturtlerÉr r r Ú(test_showturtle_hideturtle_and_isvisible¶s z1TestTPen.test_showturtle_hideturtle_and_isvisibleN)r1r2r3rÊrËr r r r rŪs rÅÚ__main__)r]ZunittestÚtestrÚ import_modulerrMr"r*r,ZTestCaserr4rArHrrÅr1Úmainr r r r Ús    G  ~"