a ze}@sddlZddlZddlZddlZddlZddlZddlZddlmZe dZ ddl Z ddl m Z ddl m Z zddlmZmZWneyejZZYn0eeee jdZdadd ZGd d d ejZGd d d ejZGdddejZddZe 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 releaselevelserialrA/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_tcl.pyget_tk_patchlevels  rc@seZdZddZdS) TkinterTestcCsF|ttjd|ttji|ttjd|ttjdhdS)NTstringset) 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$rrrsetUp8sz TclTest.setUpcCs&|j}|d||dddS)Nset a 1set a1)r,eval assertEqualr%rrrrtestEval<s zTclTest.testEvalcCs|j}||dddS)Nz set a "a\0b"ab)r,r4r3r5rrrtest_eval_null_in_resultAsz TclTest.test_eval_null_in_resultcCs|j}||dddS)Nzset a "<\ud83d\udcbb>"<💻>)r,assertInr3r5rrrtest_eval_surrogates_in_resultEsz&TclTest.test_eval_surrogates_in_resultcCs|j}|t|jddS)Nr1r,r"rr3r5rrrtestEvalExceptionIszTclTest.testEvalExceptioncCs|j}|t|jddS)Nz this is wrongr<r5rrrtestEvalException2MszTclTest.testEvalException2cCs,|j}|ddd||ddddS)Nr!rr2)r,rr4r5rrrtestCallQszTclTest.testCallcCs|j}|t|jdddS)Nr!rr,r"rrr5rrrtestCallExceptionVszTclTest.testCallExceptioncCs|j}|t|jddddS)NthisisZwrongr@r5rrrtestCallException2ZszTclTest.testCallException2cCs(|j}|dd||dddS)Nrr2r1r,setvarr4r3r5rrr testSetVar^s zTclTest.testSetVarcCs(|j}|dd||dddS)Na(1)r2zset a(1)rEr5rrrtestSetVarArraycs zTclTest.testSetVarArraycCs&|j}|d||dddS)Nr0rr2r,r3r4getvarr5rrr testGetVarhs zTclTest.testGetVarcCs&|j}|d||dddS)Nz set a(1) 1rHr2rJr5rrrtestGetVarArrayms zTclTest.testGetVarArraycCs|j}|t|jddSNrr,r"rrKr5rrrtestGetVarExceptionrszTclTest.testGetVarExceptioncCs|j}|t|jddS)NrHrOr5rrrtestGetVarArrayExceptionvsz TclTest.testGetVarArrayExceptioncCsD|j}|dd||dd|d||dddS)Nrz info exists ar20r,rFr4r3unsetvarr5rrr testUnsetVarzs   zTclTest.testUnsetVarcCst|j}|dd|dd||dd||dd|d||dd||dddS) NrHrRza(2)zinfo exists a(1)r2zinfo exists a(2)rSrTr5rrrtestUnsetVarArrays   zTclTest.testUnsetVarArraycCs|j}|t|jddSrN)r,r"rrUr5rrrtestUnsetVarExceptionszTclTest.testUnsetVarExceptioncCsPd}tdkrLt}|dks2d|kr.dkrLnn|dddd dd  f7}|S) N) rrRiillll)r\rr )r\r]r\)r\r^llrW) 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 r[z %#o oz %#x rWr_*Z4210s42E@rz42u42) r,r-rbr4getintr`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 rgz 42.5 g@E@rez42.5rfs42.5rz42.5u42.5) r,r-r4 getdoubler"r#rrkrlr5rrrtest_getdoubles  zTclTest.test_getdoublecCs|jj}||dd||dd||dd||dd|t|j|t|jdd|t|jd|t|jd|t|jd |tttf|jd |tttf|jd dS) NonTr2rerFson?rzonuon) r,r-ZassertIs getbooleanr"r#rrkrlr5rrrtest_getbooleans   zTclTest.test_getbooleancCs|j}tj}|tj|t|d}|dWdn1sD0Y|||| dd|| dd|| dddS) NwzKset a 1 set b 2 set c [ expr $a + $b ] r1r2set b2zset c3 r,r TESTFN_ASCII addCleanupunlinkopenwriteevalfiler4r3r%rfilenamefrrr testEvalFiles ( zTclTest.testEvalFilecCs|j}tj}|tj|t|d}|dWdn1sD0Y|||| dd|| dddS)Nruz> set a "ab" set b "a\0b" r1r7rvryrrrrtest_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>" r1r9rv) r,rr{rrzr|r}r~rr4r3)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<r5rrrtestPackageRequireExceptionsz#TclTest.testPackageRequireExceptionwin32zRequires WindowscCstjtj}|ddkr$tddtjd|d|ddf}tj|sZtdt *}| d t |d d g}Wdn1s0Y|d |dS) NrR: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_outputr:)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+) exprstringr4assertIsInstancerjexprexpectedresultr5rrcheck"s  z&TclTest.test_exprstring..check8.2+68.2 + 6spamrdrS8.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 / 4r25 / 4.0z1.25$5 / ( [string length "abcd"] + 0.0 )20.0/5.0z4.0 "0x03" > "2"[string length "a½€"]rx[string length "a\xbd\u20ac"]"abc"abcu"a½€"ua½€z "a\xbd\u20ac"z"a\0b"r7r[2**64)r,rr"r#rrr`rjr%rrr5rtest_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+) exprdoubler4rfloatrr5rrrEs  z&TclTest.test_exprdouble..checkrrrrrdrgffffff,@rgffffff@rgffffff@rg @rrrg@rrrrg?rrg@rrg@rrr[rr)r,rr"r#rrr`rrrr5rtest_exprdoubleAs4                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+)exprlongr4rrrr5rrres  z$TclTest.test_exprlong..checkrrrrrdrrrrr]rr\rrrrrRrrrrrrrr[r)r,rr"r#rrr`rrr5r test_exprlongas4                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+) exprbooleanr4rrZassertNotIsInstanceboolrr5rrrs   z'TclTest.test_exprboolean..checkrrrrrdF)rSfalsenooffz"%s"z{%s})r2trueyesrqTrrrrrrrrrrrrrrrr[r)r,rr"r#rrr`)r%rvaluerr5rtest_exprbooleansD                  zTclTest.test_exprbooleanr[zrequires Tcl version >= 8.5cshjfdd}|dd|dd|dd|dd|d d|d d|d d|d ddS) NcsVd|}r.|||tn$||tt|f|tdS)Nr)rr.r4rrr:rjrr5rrrs   z$TclTest.test_booleans..checkrTrrqrFrrz1 < 2z1 > 2)r,rrr5r test_booleanss       zTclTest.test_booleanscCs|j}|D]P}|dt|}|jrB|||||tq||t|||tqtdkr| t |jdtdddS)Nrr[rWr_) r,rbrrjr.r4rrrr"r)r%rrmrrrrtest_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..passValueTr2FrSr string€ string💻string string½ string€u string💻r <><€><>r9stringstring strÀ€ingsstringustr½ingr[rWr_rrrUUUUUU?naninfrRrw333333 @z1 2 3.4rrcr)rra {b c}) r4r.rplatformrbrjr` float_infominmaxrZassertNotEqual)r%rrmrrr$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,rrrj)rrrrrr%rrrs   z(TclTest.test_user_command..checkcs jt||t|dddS)Ng|=)Zdelta)ZassertAlmostEqualrabs)actualrr$rrfloat_eqs  z+TclTest.test_user_command..float_eqTr2FrSr ustring½rrrrrrr9rdsstrings string€u string€sstringrrrrrrs string€ustrÀ€ing€r[rWr_)rrrrrrr)rR)rW)rr5 6rz1 2 {3 4} {5 6} {}rRrrr)N)r, createcommandr{r- deletecommandr4rrrbrjr`reprrrrr)r%rrrrmrrrrtest_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),NrrrW)rw)rw)rdr){}rd)""rz a b c rrrs a b c rua €r€)ua 💻ru💻sa €r)sa 💻r)sa rs ab cd)r7zcd)rrb c)a b\ cr )r r za 2)rrwrrWrza 3.4)r3.4rrrrrrrlistrRrwrrr2rwrr[r\r]r]Z12ru€r r€rdictcreaterrrz4want objects? %s, Tcl version: %s, Tk patchlevel: %sz arg=%a, %s{) r,r- splitlistrr"r#r.rr`r4r) r%rr testcasesZ tk_patchlevelrZdbg_inforresrrrtest_splitlist7sd         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\brrrW)rwrw)rdrd)rrd)rrd)rrrrrr)sabr7r )s {ab cdz{ab cd)rr)r r))rsb cr)r rr rrr)r)rWrr$rrr rrrrRrwrrrr[rrrrrrrr)msg)r,r-splitrwarningscatch_warningsfilterwarningsDeprecationWarningr"r#r.r`rZ assertWarnsr4)r%r&rr rrr!rrr test_splitjsf    ,      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 3foord)-a -somethingstatus)rZ somethingr/)r-rRrWrr.r,r/rr0rz-a b -c )r-rrrr-r.r/rr[rrr) tkinterZ _splitdictr,r-r4r" 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)r4r)joinr%r6rrrs z TclTest.test_join..checkrdrzsp 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/r6r8r;r=r>r?rArDrGrIrLrMrPrQrVrXrYrbrnrprtrrrrrr skipUnlessrrrrrrrr`rrrrr"r+r3r8r9rrrrr*6sV     #  )  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_MAXrRr]F)sizeZmemusedry_runcCs$d|}|t|jjdd|ddS)N r indexr)r" OverflowErrorr,r)r%r<rrrrtest_huge_string_callsz#BigmemTclTest.test_huge_string_callrWcCsT|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)Nr2r>xr)r,r-r"r@rhrorsr3rrecordZ adderrorinforFrUrrrrr&rrrr%r<r-rrrrtest_huge_string_builtinss* z'BigmemTclTest.test_huge_string_builtinsr^cCsJ|jj}dd|}|t|j||t|j||t|jd|dS)Nr2r>rB)r,r-r"r@rrUrDrrrtest_huge_string_builtins2s  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 setUpModulesrI__main__)"rlocalerrrrr'testr import_modulerr1rrZ _testcapirr ImportErrormaxsizetuplemaprZ TCL_VERSIONr&r`rrZTestCaserr*r;rIr'mainrrrrs:      92