a 5dg |@sddlZddlZddlZddlZddlZddlZddlZddlmZe dZ ddl Z ddl m Z ddl m Z zddlmZmZWneyejZZYn0eeee jdZdadd ZGd d d ejZGd d d ejZGdddejZddZddZ e!dkre dS)N)support_tkinter)Tcl)TclError)INT_MAXPY_SSIZE_T_MAX.cCstdurt}|dd}td|}|\}}}}t|t|t|}}}dddd|}|dkrz||||dfan||d||fatS) Ninfo patchlevelz(\d+)\.(\d+)([ab.])(\d+)alphabetafinal)abrr)_tk_patchlevelrcallre fullmatchgroupsint)tclr mmajorminor releaselevelserialr)/usr/local/lib/python3.9/test/test_tcl.pyget_tk_patchlevels  rc@seZdZddZdS) TkinterTestcCs|ttjddS)NT) assertRaises TypeErrorrZ_flattenselfrrrtestFlattenLen+szTkinterTest.testFlattenLenN)__name__ __module__ __qualname__r$rrrrr)src@sveZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zee j!d7kd8d9d:Z"d;d<Z#d=d>Z$d?d@Z%dAdBZ&ee'dCkdDdEdFZ(dGdHZ)dIdJZ*dKdLZ+dMdNZ,dOdPZ-dQdRZ.dSdTZ/dUdVZ0dWS)XTclTestcCst|_|jj|_dSN)rinterptk wantobjectsr"rrrsetUp2sz TclTest.setUpcCs&|j}|d||dddS)Nset a 1set a1)r*eval assertEqualr#rrrrtestEval6s zTclTest.testEvalcCs|j}||dddS)Nz set a "a\0b"ab)r*r2r1r3rrrtest_eval_null_in_result;sz TclTest.test_eval_null_in_resultcCs|j}||dddS)Nzset a "<\ud83d\udcbb>"<💻>)r*assertInr1r3rrrtest_eval_surrogates_in_result?sz&TclTest.test_eval_surrogates_in_resultcCs|j}|t|jddS)Nr/r*r rr1r3rrrtestEvalExceptionCszTclTest.testEvalExceptioncCs|j}|t|jddS)Nz this is wrongr:r3rrrtestEvalException2GszTclTest.testEvalException2cCs,|j}|ddd||ddddS)Nsetrr0)r*rr2r3rrrtestCallKszTclTest.testCallcCs|j}|t|jdddS)Nr=rr*r rrr3rrrtestCallExceptionPszTclTest.testCallExceptioncCs|j}|t|jddddS)NthisisZwrongr?r3rrrtestCallException2TszTclTest.testCallException2cCs(|j}|dd||dddS)Nrr0r/r*setvarr2r1r3rrr testSetVarXs zTclTest.testSetVarcCs(|j}|dd||dddS)Na(1)r0zset a(1)rDr3rrrtestSetVarArray]s zTclTest.testSetVarArraycCs&|j}|d||dddS)Nr.rr0r*r1r2getvarr3rrr testGetVarbs zTclTest.testGetVarcCs&|j}|d||dddS)Nz set a(1) 1rGr0rIr3rrrtestGetVarArraygs zTclTest.testGetVarArraycCs|j}|t|jddSNrr*r rrJr3rrrtestGetVarExceptionlszTclTest.testGetVarExceptioncCs|j}|t|jddS)NrGrNr3rrrtestGetVarArrayExceptionpsz TclTest.testGetVarArrayExceptioncCsD|j}|dd||dd|d||dddS)Nrz info exists ar00r*rEr2r1unsetvarr3rrr testUnsetVarts   zTclTest.testUnsetVarcCst|j}|dd|dd||dd||dd|d||dd||dddS) NrGrQza(2)zinfo exists a(1)r0zinfo exists a(2)rRrSr3rrrtestUnsetVarArray{s   zTclTest.testUnsetVarArraycCs|j}|t|jddSrM)r*r rrTr3rrrtestUnsetVarExceptionszTclTest.testUnsetVarExceptioncCsPd}tdkrLt}|dks2d|kr.dkrLnn|dddd dd  f7}|S) N) rrQiillll)r[rr )r[r\r[)r[r]llrV) tcl_versionr)r#Zintegersvrrr get_integerss  zTclTest.get_integersc Cs0|jj}|D]l}||d||tdkrH||d||||d|dd|||d||qtdkr|t|jt dd||d d |t |j|t |jd d |t |jd |t |jd |t|jd|t t tf|jd|t t tf|jddS)Nz %d rZz %#o oz %#x rVr^*Z4210s42E@rz42u42) r*r+rar2getintr_replacer rstrr! ValueErrorUnicodeEncodeError)r#rirrr test_getints*   zTclTest.test_getintcCs|jj}||dd||dd||dd||dd|t|j|t|jdd|t|jd|t|jd |tttf|jd |tttf|jd dS) Nz 42 rfz 42.5 g@E@rdz42.5res42.5rz42.5u42.5) r*r+r2 getdoubler r!rrjrkr3rrrtest_getdoubles  zTclTest.test_getdoublecCs|jj}||dd||dd||dd||dd|t|j|t|jdd|t|jd|t|jd|t|jd |tttf|jd |tttf|jd dS) NonTr0rdrFson?rzonuon) r*r+ZassertIs getbooleanr r!rrjrkr3rrrtest_getbooleans   zTclTest.test_getbooleancCs|j}tj}|tj|t|d}|dWdn1sD0Y|||| dd|| dd|| dddS) NwzKset a 1 set b 2 set c [ expr $a + $b ] r/r0set b2zset c3 r*r TESTFN_ASCII addCleanupunlinkopenwriteevalfiler2r1r#rfilenamefrrr testEvalFiles ( zTclTest.testEvalFilecCs|j}tj}|tj|t|d}|dWdn1sD0Y|||| dd|| dddS)Nrtz> set a "ab" set b "a\0b" r/r5rurxrrrrtest_evalfile_null_in_results ( z$TclTest.test_evalfile_null_in_resultcCs|j}|dd}||jdd||dddtj}|tj|t|d}|dWdn1sp0Y||| | dd| | dddS) Nencodingsystemzutf-8wbsM set a "<>" set b "<\ud83d\udcbb>" r/r7ru) r*rrzrryr{r|r}r~r2r1)r#rrrrrrr"test_evalfile_surrogates_in_results  ( z*TclTest.test_evalfile_surrogates_in_resultc CsR|j}d}zt|Wn$ty<}z WYd}~n d}~00|t|j|dS)NZ doesnotexists)r*osremove Exceptionr rr~)r#rrerrrtestEvalFileExceptionszTclTest.testEvalFileExceptioncCs|j}|t|jddS)Nzpackage require DNEr:r3rrrtestPackageRequireExceptionsz#TclTest.testPackageRequireExceptionwin32zRequires WindowscCstjtj}|ddkr$tddtjd|d|ddf}tj|sZtdt *}| d t |d d g}Wdn1s0Y|d |dS) NrQ:z$Absolute path should have drive partz \\%s\%s$\%sZ COMPUTERNAMErzCannot connect to UNC PathZ TCL_LIBRARY-czimport tkinter; print(tkinter)stkinter)rpathabspathsys executableunittestZSkipTestenvironexistsrZEnvironmentVarGuardZunset subprocess check_outputr8)r#fullnameZunc_nameenvstdoutrrrtestLoadWithUNCs        "zTclTest.testLoadWithUNCcsJjddddddfdd}tjtjdd tjd tjd |d d |dd|dd|dd|dd|dd |dd |dd|dd|dd|dd|dd |d!d|d"d#|d$d#|d%d&|d'd(|d)d(|d*d+td,krF|d-td.dS)/Nr=rrrr]cs&|}|||tdSr)) exprstringr2assertIsInstanceriexprexpectedresultr3rrchecks  z&TclTest.test_exprstring..check8.2+68.2 + 6spamrcrR8.2 + 6z14.23.1 + $az6.1 2 + "$a.$b"z5.64*[llength "6 2"]8{word one} < "word $a"4*2 < 7 hypot($a, 4)z5.05 / 4r05 / 4.0z1.25$5 / ( [string length "abcd"] + 0.0 )20.0/5.0z4.0 "0x03" > "2"[string length "a½€"]rw[string length "a\xbd\u20ac"]"abc"abcu"a½€"ua½€z "a\xbd\u20ac"z"a\0b"r5rZ2**64)r*rr r!rrr_rir#rrr3rtest_exprstrings:                    zTclTest.test_exprstringcs2jddddddfdd}tjtjdd tjd tjd |d d |dd|dd|dd|dd|dd |dd |dd|dd|dd|dd|dd |d!d|d"d#|d$d#tjd%td&kr.|d'td(dS))Nr=rrrr]cs&|}|||tdSr)) exprdoubler2rfloatrr3rrr?s  z&TclTest.test_exprdouble..checkrrrrrcrgffffff,@rgffffff@rgffffff@rg @rrrg@rrqrg?rrg@rrg@rrrZrr)r*rr r!rrr_rrrr3rtest_exprdouble;s4                zTclTest.test_exprdoublecs4jddddddfdd}tjtjdd tjd tjd |d d |dd|dd|dd|dd|dd |dd |dd|dd|dd|dd|dd|dd|dd|d dtjd!td"kr0tjd#dS)$Nr=rrrr]cs&|}|||tdSr))exprlongr2rrrr3rrr_s  z$TclTest.test_exprlong..checkrrrrrcrrrrr\rr[rrrrrQrrrrrrrrZr)r*rr r!rrr_rrr3r test_exprlong[s4                zTclTest.test_exprlongcsjddddddfdd}tjtjdd tjd tjd |d d dD]*}||d |d|d |d|d q~dD]*}||d|d|d|d|dq|dd|dd|dd|dd|dd |dd |dd|dd|dd|dd|dd|dd|dd|d dtjd!td"kr|d#ddS)$Nr=rrrr]cs2|}|||t|tdSr)) exprbooleanr2rrZassertNotIsInstanceboolrr3rrrs   z'TclTest.test_exprboolean..checkrrrrrcF)rRfalsenooffz"%s"z{%s})r0trueyesrpTrrrrrrrrrrrrrrrrZr)r*rr r!rrr_)r#rvaluerr3rtest_exprboolean{sD                  zTclTest.test_exprbooleanrZzrequires Tcl version >= 8.5cshjfdd}|dd|dd|dd|dd|d d|d d|d d|d ddS) NcsVd|}r.|||tn$||tt|f|tdS)Nr)rr,r2rrr8rirr3rrrs   z$TclTest.test_booleans..checkrTrrprFrrz1 < 2z1 > 2)r*rrr3r test_booleanss       zTclTest.test_booleanscCs|j}|D]P}|dt|}|jrB|||||tq||t|||tqtdkr| t |jdtdddS)NrrZrVr^) r*rarrir,r2rrrr r)r#rrlrrrrtest_expr_bignums   zTclTest.test_expr_bignumcsfdd}|djr dnd|djr:dnd|dd|dd|d d |d d |d d |d d |d d tjdkrڈ|dd|dd|djrdnd |djr dnd|djr&dndD]&}||jrN|nt|q4tdkr|ddtddddddtjjtjj tjj tjj fD]4}jrȈ|||nt |||qjr6|t d} |||t d t d |t d  t d  n<t |t d t d t |t d  t d  |d!jrd!nd"|d#d$d%ggjrd&nd'dS)(Ncsjdd|S)Nr=_)r*rrr"rr passValuesz.TclTest.test_passing_values..passValueTr0FrRstring string€ string💻string string½ string€u string💻r <><€><>r7stringstring strÀ€ingsstringustr½ingrZrVr^rrqUUUUUU?naninfrQrv333333 @z1 2 3.4rrcr)rra {b c}) r2r,rplatformrarir_ float_infominmaxrZassertNotEqual)r#rrlrrr"rtest_passing_valuessh          $      zTclTest.test_passing_valuescsdfdd}jd|jjjdd1jdfdd }fdd}|d d |d d |d |d|d|dtjdkr|dd|dd|d|dd |dd|dd|dd|d|d|d|dd|d d!|d"d#D]}||t |qt d$krJ|d%d&t d%d&d'D]}||t |qNd(tj j tj jtj j tj j fD]}|||dq|td)|d|td) |d|d*d|d+d,|d-d%gd.d/gd0ggd,dS)2Ncs||Sr)r)arg)rrrtestfuncsz+TclTest.test_user_command..testfuncr)eqcsN|dur |}djd|}t|||t|||dS)Nr)r*rrri)rrrrrr#rrrs   z(TclTest.test_user_command..checkcs jt||t|dddS)Ng|=)Zdelta)ZassertAlmostEqualrabs)actualrr"rrfloat_eq s  z+TclTest.test_user_command..float_eqTr0FrRrustring½rrrrrrr7rcsstrings string€u string€sstringrrrrrrs string€ustrÀ€ing€rZrVr^)rrqrrrr)rQ)rV)rr5 6rz1 2 {3 4} {5 6} {}rQrrr)N)r* createcommandrzr+ deletecommandr2rrrarir_reprrrrr)r#rrrrlrrrrtest_user_commandsR                  zTclTest.test_user_commandc Cs,|jjj}|jjj}|t||t|dd|t|ddddddd d d d d ddddddddddgdfdddggdddgff|dddd|jrdndfg}t}td kr|jr|d!krd"}nd#}||d$d%d&d'd(d|fg7}d)|jt|f}|D]"\}}| |||d*||fq|t |d+dS),NrrrV)rv)rv)rcr){}rc)""rz a b c rrrs a b c rua €r€)ua 💻ru💻sa €r)sa 💻r)sa rs ab cd)r5zcd)rrb c)a b\ cr )r r za 2)rrvrrVrza 3.4)r3.4rrrrrrrlistrQrvrrr0rvrrZr[r\r\Z12ru€r r€rdictcreaterrrz4want objects? %s, Tcl version: %s, Tk patchlevel: %sz arg=%a, %s{) r*r+ splitlistrr r!r,rr_r2r) r#rr testcasesZ tk_patchlevelrZdbg_inforresrrrtest_splitlist1sd         zTclTest.test_splitlistcCsp|jjj}|jjj}tHtddt|t ||t |dd|t |dWdn1sj0Ydddd d d d d ddddddddddddddgdfddgdfdddggdf|d d!d"d#|j rd$nd%fg}t d&kr|j rt d'krd(}nd)}||d*d+d,d-d.d#|fg7}|D]J\}}| t$|j||||d/Wdn1s^0Yq dS)0Nignorez\bsplit\b.*\bsplitlist\brrrV)rvrv)rcrc)rrc)rrc)rrrrrr)sabr5r )s {ab cdz{ab cd)rr)r r))rsb cr)r rr rrr)r)rVrr$rrr rrrrQrvrrrrZrrrrrrrr)msg)r*r+splitrwarningscatch_warningsfilterwarningsDeprecationWarningr r!r,r_rZ assertWarnsr2)r#r&rr rrr!rrr test_splitdsf    ,      zTclTest.test_splitc CsBtj}|jj}d}||||ddddd||||ddddd}||||dd dd d||||d dd d|t||d |t||d |d dd dddd}|||||jrd nddddt dkr>|dddd dddd}|jrt dkr dddd}n d ddd}|||||dS)Nz#-a {1 2 3} -something foo status {}Fz1 2 3foorc)-a -somethingstatus)rZ somethingr/)r-rQrVrr.r,r/rr0rz-a b -c )r-rrrr-r.r/rrZrrr) tkinterZ _splitdictr*r+r2r RuntimeErrorrr,r_r)r#Z splitdictrrrrrrtest_splitdictsD            zTclTest.test_splitdictcstjjjfddfdd}|d|d|d|d|d |d |d |d |d |d|d|d|d|d|d|d|d|d|d|d|d|d|d|ddS)Ncsd|dS)NZlindexr)r)srrrunpacksz!TclTest.test_join..unpackcs|g||dg||gg||dgg||gdg||dgdg|dS)Nr)r2r)joinr#r6rrrs z TclTest.test_join..checkrcrzsp amzsp amzsp amz z{spam}z{sp am}z"spam"z"sp am"z{"spam"}z"{spam}"zsp\amz"sp\am"z "{}" "{}"z"\z"{z"}z \z {z }z\ z{ z} )r1Z_joinr*r+rr)r7r#rr6r test_joins8 zTclTest.test_joincCs|ttjdSr))r r!rZTcl_Objr"rrrtest_new_tcl_objszTclTest.test_new_tcl_objN)1r%r&r'r-r4r6r9r;r<r>r@rCrFrHrKrLrOrPrUrWrXrarmrorsrrrrrr skipUnlessrrrrrrrr_rrrrr"r+r3r8r9rrrrr(0sV     #  )  2:35#%r(c@seZdZddZejeee kdej edddddd Z ejeee kdej edd ddd d Z ejeee kdej edd ddddZ dS) BigmemTclTestcCs t|_dSr))rr*r"rrrr-szBigmemTclTest.setUpzneeds UINT_MAX < SIZE_MAXrQr\F)sizeZmemusedry_runcCs$d|}|t|jjdd|ddS)N rindexr)r OverflowErrorr*r)r#r<rrrrtest_huge_string_callsz#BigmemTclTest.test_huge_string_callrVcCsT|jj}dd|}|t|j||t|j||t|j||t|j||t|j||t|j ||t|j ||t|j |dd|t|j d|d|t|j ||t|j d||t|j ||t|j ||t|j||t|j||t|j||t|j||t|j|t|t|j|dS)Nr0r>xr)r*r+r r@rgrnrrr1r~recordZ adderrorinforErTrrrrr&rrrr#r<r+rrrrtest_huge_string_builtinss* z'BigmemTclTest.test_huge_string_builtinsr]cCsJ|jj}dd|}|t|j||t|j||t|jd|dS)Nr0r>rB)r*r+r r@r~rTrDrrrtest_huge_string_builtins2 s  z(BigmemTclTest.test_huge_string_builtins2N)r%r&r'r-rZ cpython_onlyrr:rrZ bigmemtestrArErFrrrrr;sr;cCs"tjrt}td|dddS)Nz patchlevel =r r )rverboserprintrr5rrr setUpModulesrIcCsttttdSr))rZ run_unittestr(rr;rrrr test_mainsrJ__main__)"rlocalerrrrr'testr import_modulerr1rrZ _testcapirr ImportErrormaxsizetuplemaprZ TCL_VERSIONr&r_rrZTestCaserr(r;rIrJr%rrrrs<     92