a 4êdg&³ã@sòddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZmZzddlmZdZWneyºdZYn0ddlmZddlmZdd lmZdd lmZd d „Zd d„Zdd„Z Gdd„dƒZ!Gdd„de!ej"eddZ#Gdd„de!ej"eddZ$Gdd„dej"ƒZ%Gdd„dƒZ&Gdd„de&ej"eddZ'Gdd„de&ej"eddZ(Gd d!„d!ƒZ)Gd"d#„d#e)ej"eddZ*Gd$d%„d%e)ej"eddZ+e,d&krîe -¡dS)'éN)ÚmockÚ skipUnless)ÚProcessPoolExecutorTF)Úsupport)Ú script_helperé)Úwithout_source_date_epoch)ÚSourceDateEpochTestMetacCs|sd}tjj||dS)NÚ©Ú optimization)Ú importlibÚutilÚcache_from_source)ÚscriptÚopt©rú0/usr/local/lib/python3.9/test/test_compileall.pyÚget_pyc srcs‡fdd„dDƒS)Ncsg|]}tˆ|ƒ‘qSr)r)Ú.0r©rrrÚ (ózget_pycs..©rrérrrrrÚget_pycs'srcCs t |¡j}t |¡j}||kS©N)ÚosÚstatÚst_ino)Z filename1Ú filename2Zinode1Zinode2rrrÚ is_hardlink+s  r!c@sPeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Ze d¡dd„ƒZd d!„Ze d¡d"d#„ƒZe d¡e d$¡d%d&„ƒƒZejdd'd(e d$¡d)d*„ƒƒZd+d,„Zd-d.œd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Zd=d>„Z d?d@„Z!dAdB„Z"e#j$dCdD„ƒZ%d'S)EÚCompileallTestsBasecCsØt ¡|_tj |jd¡|_tj  |j¡|_ t |jdƒ}|  d¡Wdƒn1sX0Ytj |jd¡|_ tj  |j ¡|_t |j|j ¡tj |jd¡|_t |j¡tj |jd¡|_t |j|j¡dS)Nú_test.pyÚwzx = 123 z _test2.pyZ_subdirz _test3.py)ÚtempfileÚmkdtempÚ directoryrÚpathÚjoinÚ source_pathr rrÚbc_pathÚopenÚwriteÚ source_path2Úbc_path2ÚshutilÚcopyfileZ subdirectoryÚmkdirÚ source_path3©ÚselfÚfilerrrÚsetUp4s ( zCompileallTestsBase.setUpcCst |j¡dSr©r0Úrmtreer'©r5rrrÚtearDownBszCompileallTestsBase.tearDowncCsLtj |jd¡|_t|jdƒ}| d¡Wdƒn1s>0YdS)Nz _test_bad.pyr$zx ( )rr(r)r'Úbad_source_pathr,r-r4rrrÚadd_bad_source_fileEsz'CompileallTestsBase.add_bad_source_filecCsdt|jdƒ}| d¡}Wdƒn1s,0Ytt |j¡jƒ}t  dt j j d|¡}||fS)NÚrbé ú<4sllr) r,r+ÚreadÚintrrr*Úst_mtimeÚstructÚpackr rÚ MAGIC_NUMBER)r5r6ÚdataÚmtimeZcomparerrrÚtimestamp_metadataJs (z&CompileallTestsBase.timestamp_metadatacCsâtj d¡rt d¡‚t |j¡|j|  ¡Žt |j dƒ$}|  ¡t |ƒd…}Wdƒn1sf0Yt |j dƒ$}| |¡| |¡Wdƒn1s¦0Y|j|  ¡Žtj|jddd|j|  ¡ŽdS)NÚSOURCE_DATE_EPOCHzSOURCE_DATE_EPOCH is setr>ÚwbFT©ÚforceÚquiet)rÚenvironÚgetÚunittestÚSkipTestÚ py_compileÚcompiler*Ú assertEqualrIr,r+rAÚlenr-ÚassertNotEqualÚ compileallÚ compile_dirr'Ú assertTrue)r5Úmetadatar6ÚbcrrrÚrecreation_checkQs   2 (z$CompileallTestsBase.recreation_checkcCs| t dtjjdd¡¡dS)Nr@rr)r]rDrEr rrFr:rrrÚ test_mtimeasÿzCompileallTestsBase.test_mtimecCs| d¡dS)Ns)r]r:rrrÚtest_magic_numberfsz%CompileallTestsBase.test_magic_numbercCs|j|jfD] }zt |¡Wq Yq 0q | tj|jddd¡| tj  |j¡oftj  |j¡ ¡t |j¡| tj |j ddd¡| tj  |j¡o¬tj  |j¡¡t |j¡t |j¡|  ¡|  tj|jddd¡|  tj |j ddd¡dS)NFTrLr)r+r/rÚunlinkrZrXÚ compile_filer*r(ÚisfilerYr'r=Ú assertFalser<)r5ÚfnrrrÚtest_compile_filesjs6 ÿÿ ÿ ÿ   ÿ ÿz&CompileallTestsBase.test_compile_filescCs|| tj |j¡¡t ¡(}| t  t   |j ¡¡¡Wdƒn1sJ0Y|  | ¡d¡| tj |j¡¡dS)Nz&Compiling ([^WindowsPath|PosixPath].*))rcrr(rbr+rÚcaptured_stdoutrZrXraÚpathlibÚPathr*Ú assertRegexÚgetvalue)r5ÚstdoutrrrÚtest_compile_file_pathlikeƒs  6z.CompileallTestsBase.test_compile_file_pathlikecCsP| tj |j¡¡| tjt  |j ¡t  d¡dd¡| tj |j¡¡dS)NZ ddir_pathr)ÚddirrN) rcrr(rbr+rZrXrargrhr*r:rrrÚtest_compile_file_pathlike_ddir‹s þz3CompileallTestsBase.test_compile_file_pathlike_ddircCsœtjjj|jgd"| tjdd¡Wdƒn1s<0Ytjjj|jgd.| ¡|  tjdddd¡Wdƒn1sŽ0YdS)N©r(r©rNFT)Ú skip_curdirrMrN) ÚtestÚtest_importlibrZ import_stater'rZrXÚ compile_pathr=rcr:rrrÚtest_compile_path’s0 ÿz%CompileallTestsBase.test_compile_pathcCs|tj |jd¡}tj |d¡}t |¡t|dƒWdƒn1sH0Yt |¡| tj  tj |d¡¡¡dS)NrGr6r$Ú __pycache__) rr(r)r'r2r,rXrarcÚexists)r5Zdata_dirZ data_filerrrÚtest_no_pycache_in_non_package›s   z2CompileallTestsBase.test_no_pycache_in_non_packagecCs’drdnd\}}tj|jd|dtjj|j|d}| tj   |¡¡tjj|j |d}| tj   |¡¡tjj|j |d}| tj   |¡¡dS)NF)rr)rr T©rNÚoptimizer ) rXrYr'r rrr*rZrr(rbr.r3)r5rzrÚcachedZcached2Zcached3rrrÚ test_optimize§s ÿ ÿ ÿz!CompileallTestsBase.test_optimizecCs‚| tj |j¡¡t ¡"}t t   |j ¡¡Wdƒn1sD0Y|  ¡  ¡d}| |d¡| tj |j¡¡dS)Nrz$Listing ([^WindowsPath|PosixPath].*))rcrr(rbr+rrfrXrYrgrhr'rjÚ splitlinesrirZ)r5rkÚlinerrrÚtest_compile_dir_pathlike¶s  0 z-CompileallTestsBase.test_compile_dir_pathlikez&concurrent.futures.ProcessPoolExecutorcCs"tj|jddd| |j¡dS©NTé©rNÚworkers©rXrYr'rZÚcalled©r5Ú pool_mockrrrÚtest_compile_pool_called¾sz,CompileallTestsBase.test_compile_pool_calledcCs@| td¡ tj|jddWdƒn1s20YdS)Nz%workers must be greater or equal to 0éÿÿÿÿ)rƒ)ZassertRaisesRegexÚ ValueErrorrXrYr'r:rrrÚ!test_compile_workers_non_positiveÃsÿz5CompileallTestsBase.test_compile_workers_non_positivecCs,tj|jddd| |jddd¡dS)NTrr‚rÚ max_workers)rXrYr'rUÚ call_argsr†rrrÚtest_compile_workers_cpu_countÈsz2CompileallTestsBase.test_compile_workers_cpu_countzcompileall.compile_filecCs,tj|jdd| |j¡| |j¡dS)NTrp)rXrYr'rcr…rZ)r5Úcompile_file_mockr‡rrrÚtest_compile_one_workerÍs z+CompileallTestsBase.test_compile_one_workerN©ÚnewcCs"tj|jddd| |j¡dSr€r„)r5rrrrÚ$test_compile_missing_multiprocessingÔsz8CompileallTestsBase.test_compile_missing_multiprocessingcCs´d}|j}td|dƒD]>}tj |d|›¡}tj |d¡}t |¡t |j|¡qt j   |¡}t j |jd|dd| tj |¡¡t j |jd|d| tj |¡¡dS)NérZdir_z script.pyT)rNÚ maxlevels)r'Úrangerr(r)r2r0r1r*r rrrXrYrcrbrZ)r5Údepthr(ÚiÚsourceZ pyc_filenamerrrÚtest_compile_dir_maxlevelsÚs  z.CompileallTestsBase.test_compile_dir_maxlevelsT)ÚparallelcCsddg}|j}g}|D]>}tj ||¡}t |¡t |dd¡| t |dd¡¡qtj |jd||rjdnd d |  |¡|D]}|  |  |j¡|¡t j  |¡}|t|jtjƒd…} t |¡\} } } tj || ¡} tjj  |¡} | | j| ¡| d | ›d t | ¡¡q€dS) NrrÚfooÚ__init__r Úmodzdef fn(): 1/0 fn() Trr)rNrmrƒú")r'rr(r)r2rÚ make_scriptÚappendrXrYrZÚ startswithr rrrVÚsepÚassert_python_failurerrrsZget_code_from_pycrUÚ co_filenameÚassertInÚfsdecode)r5rmr›Úfullpathr(ZmodsZsubdirržZmodcodeÚmodpathÚ_ÚerrÚ expected_inZ mod_code_objrrrÚ_test_ddir_onlyës0  ÿ þ  z#CompileallTestsBase._test_ddir_onlycCs|jdddS)Nú F©rmr›©r­r:rrrÚtest_ddir_only_one_workersz-CompileallTestsBase.test_ddir_only_one_workercCs|jdddS)Nr®Tr¯r°r:rrrÚtest_ddir_multiple_workerssz.CompileallTestsBase.test_ddir_multiple_workerscCs|jdddS)Nr Fr¯r°r:rrrÚtest_ddir_empty_only_one_worker sz3CompileallTestsBase.test_ddir_empty_only_one_workercCs|jdddS)Nr Tr¯r°r:rrrÚ test_ddir_empty_multiple_workerssz4CompileallTestsBase.test_ddir_empty_multiple_workersc CsÈgd¢}tjj|jg|¢RŽ}t |¡t |dd¡}tj  |¡}tjj|jg|dd…¢RŽ}t j |d|dt  |¡\}}}tjj|dd…Ž} |  | t|t ¡d¡| |t|t ¡d¡dS)N©rrÚbuildÚrealr(rrú1 / 0rT)rNÚstripdir©Úencoding©rr(r)r'Úmakedirsrr r rrrXrYr¤r¦ÚstrÚsysÚgetdefaultencodingÚ assertNotIn) r5r¨r(rr\r¹ÚrcÚoutr«r¬rrrÚtest_strip_onlys"  þþz#CompileallTestsBase.test_strip_onlyc Csšgd¢}tjj|jg|¢RŽ}t |¡t |dd¡}tj  |¡}d}t j |d|dt  |¡\}}}tjj||jg|¢RŽ} |  | t|t ¡d¡dS)Nrµrrr¸ú/fooT)rNÚ prependdirrº)rr(r)r'r½rr r rrrXrYr¤r¦r¾r¿rÀ) r5r¨r(rr\rÆrÂrÃr«r¬rrrÚtest_prepend_only's  þz%CompileallTestsBase.test_prepend_onlyc CsÖgd¢}tjj|jg|¢RŽ}t |¡t |dd¡}tj  |¡}tjj|jg|dd…¢RŽ}d}t j |d||dt  |¡\}}} tjj|g|dd…¢RŽ} |  | t| t ¡d¡| |t| t ¡d¡dS) Nrµrrr¸rrÅT)rNr¹rÆrºr¼© r5r¨r(rr\r¹rÆrÂrÃr«r¬rrrÚtest_strip_and_prepend6s(  ÿþþz*CompileallTestsBase.test_strip_and_prependcCsxgd¢}tjj|jg|¢RŽ}t |¡t |dd¡| t¡$t j |dddddWdƒn1sj0YdS)N)rrr¶r·r(rmrrr¸Tz/barrÅ)rNrmr¹rÆ) rr(r)r'r½rr Ú assertRaisesrŠrXrY)r5r¨r(rrrÚtest_strip_prepend_and_ddirKs   ÿz/CompileallTestsBase.test_strip_prepend_and_ddirc Cs´t |jdd¡}g}dD]}| tjj||d¡qddgddgddggd¢g}|D]Z}tj|d |d |D]@}|  t j   ||¡¡zt   ||¡WqltyªYql0qlqTdS) NÚtest_optimizationúa = 0©r rrr”r rrrrTry)rr r'r¡r rrrXrarZrr(rbr`Ú Exception)r5rr\Ú opt_levelÚtest_combinationsÚopt_combinationrrrÚ!test_multiple_optimization_levelsTs(þ ÿ ÿ z5CompileallTestsBase.test_multiple_optimization_levelsc Csútj |jddd¡}tj |jddd¡}tj |jddd¡}t |¡t |¡t |¡t |dd¡}t |dd¡}tj |d ¡}tj |d ¡}t ||¡t ||¡tj   |¡}tj   |¡} t j |d |d |  tj |¡¡| tj | ¡¡dS) NrrÚdirÚallowedÚsymlinksÚ prohibitedÚ test_allowedrÍÚtest_prohibitedútest_allowed.pyútest_prohibited.pyT)rNÚ limit_sl_dest)rr(r)r'r½rr Úsymlinkr rrrXrYrZrbrc© r5Z allowed_pathZ symlinks_pathZprohibited_pathZallowed_scriptZprohibited_scriptZallowed_symlinkZprohibited_symlinkZ allowed_bcZ prohibited_bcrrrÚtest_ignore_symlink_destinationgs"       z3CompileallTestsBase.test_ignore_symlink_destination)&Ú__name__Ú __module__Ú __qualname__r7r;r=rIr]r^r_rerlrnrurxr|rrÚpatchrˆr‹rŽrr“ršr­r±r²r³r´rÄrÇrÉrËrÓrÚskip_unless_symlinkrßrrrrr"2sL        r"c@s eZdZdS)ÚCompileallTestsWithSourceEpochN©ràrárârrrrråsrå)Ú metaclassZsource_date_epochc@s eZdZdS)Ú!CompileallTestsWithoutSourceEpochNrærrrrrèˆsrèc@s$eZdZdd„Zdd„Zdd„ZdS)Ú EncodingTestcCsdt ¡|_tj |jd¡|_t|jddd$}| d¡| d¡Wdƒn1sV0YdS)Nr#r$úutf-8rºz# -*- coding: utf-8 -*- u print u"€" ) r%r&r'rr(r)r*r,r-r4rrrr7“s   zEncodingTest.setUpcCst |j¡dSrr8r:rrrr;šszEncodingTest.tearDowncCs>z0tj}tjt ¡ddt_t |j¡W|t_n|t_0dS)NÚasciirº)r¿rkÚioÚ TextIOWrapperÚBytesIOrXrYr')r5Z orig_stdoutrrrÚ test_errors zEncodingTest.test_errorN)ràrárâr7r;rïrrrrrésréc@s¨eZdZedd„ƒZdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z e dd„ƒZdd„ZddgfdddgfdddgffD]&\ZZZeefdd „Zeeƒd!e<qˆd"d#„Zd$d%„Ze d&d'„ƒZd(d)„Zd*d+„Zejd,d-„ƒZd.d/„Zd0d1„Zd2d3„Zd4d5„Z d6d7„Z!d8d9„Z"d:d;„Z#dd?„Z%d@dA„Z&dBdC„Z'dDdE„Z(dFdG„Z)e*e+dHƒdIdJ„ƒZ,e- .dK¡dLdM„ƒZ/dNdO„Z0dPdQ„Z1ejdRdS„ƒZ2dTdU„Z3dVdW„Z4dXS)YÚCommandLineTestsBasec CsttjjtjƒD]à}d}t |¡d}|d}z¤zL| ¡sF| ¡d}|  d¡}|  d¡Wdƒn1sp0YWn8t y´d}YWt   t|ƒ¡|r¬| ¡qöYn0Wt   t|ƒ¡|rð| ¡qt   t|ƒ¡|rî| ¡0qd}||_dS)NFrvztest.tryTr$z# for test_compileall)Úfilterrr(Úisdirr¿rgrhÚis_dirr2r,r-ÚOSErrorrr`r¾ÚrmdirÚ_sys_path_writable)Úclsr(Zdirectory_createdr'r6Zsys_path_writablerrrÚ setUpClass©s2 , ü  þ zCommandLineTestsBase.setUpClasscCs|jst d¡‚dS)Nz(not all entries on sys.path are writable)rörQrRr:rrrÚ_skip_if_sys_path_not_writableÀsz3CommandLineTestsBase._skip_if_sys_path_not_writablecCsgt ¡¢d‘d‘d‘|¢S)Nz-Sú-mrX)rZ!optim_args_from_interpreter_flags)r5ÚargsrrrÚ _get_run_argsÄs ÿÿÿþz"CommandLineTestsBase._get_run_argscOs4tj| |¡i|¤ddi¤Ž\}}}| d|¡|S)NÚPYTHONIOENCODINGrêr)rÚassert_python_okrürU©r5rûZenv_varsrÂrÃr«rrrÚ assertRunOKÉsÿÿþ z CommandLineTestsBase.assertRunOKcOs.tj| |¡i|¤ddi¤Ž\}}}|||fS)Nrýrê)rr¤rürÿrrrÚassertRunNotOKÐsÿÿþz#CommandLineTestsBase.assertRunNotOKcCs"tj |¡}| tj |¡¡dSr)r rrrZrr(rw©r5rdr(rrrÚassertCompiledÖs z#CommandLineTestsBase.assertCompiledcCs"tj |¡}| tj |¡¡dSr)r rrrcrr(rwrrrrÚassertNotCompiledÚs z&CommandLineTestsBase.assertNotCompiledcCsrt ¡|_| tj|j¡tj |jd¡|_ t  |j ¡tj |j d¡|_ t   |j dd¡|_t   |j dd¡|_dS)Nrœrvrr Zbar)r%r&r'Z addCleanuprr9rr(r)Úpkgdirr2Úpkgdir_cachedirrr ÚinitfnÚbarfnr:rrrr7Þs  zCommandLineTestsBase.setUpcCsL| ¡t |jdd¡}|j|jd| |¡| |j¡| |j¡dS)NÚbazr ©Ú PYTHONPATH) rùrr r'rrrrr)r5ÚbazfnrrrÚtest_no_args_compiles_pathès   z/CommandLineTestsBase.test_no_args_compiles_pathcCsª| ¡t |jdd¡}|j|jdtj |¡}t  |t   ¡dfd¡t  |¡j }|j|jdt  |¡j }|  ||¡|jd|jdt  |¡j }| ||¡dS)Nr r r é<rú-f)rùrr r'rr rrrÚutimeÚtimerrCrUrW)r5r ÚpycpathrHÚmtime2rrrÚ test_no_args_respects_force_flagñs     z5CommandLineTestsBase.test_no_args_respects_force_flagcCsR| ¡t |jdd¡|j|jd}| d|¡|jd|jd}| d|¡dS)Nr r r sListing ú-q)rùrr r'rr¦rÁ©r5ZnoisyrNrrrÚ test_no_args_respects_quiet_flags  z5CommandLineTestsBase.test_no_args_respects_quiet_flagZnormalÚpycrzz opt-1.pycú-OZdoubleoptimizez opt-2.pycz-OOcs~tj|ddd|jgŽ| tj |j¡¡t‡fdd„dDƒƒ}|  tt  |j¡ƒ|¡|  ‡fdd„t  |j¡Dƒ¡dS) NrúrXrc3s|]}| tjjˆ¡VqdSr)Úformatr¿ÚimplementationÚ cache_tag)rÚbase©ÚextrrÚ sÿz)CommandLineTestsBase.f..)z__init__.{}.{}z bar.{}.{}csg|]}| ˆ¡r|‘qSr)Úendswith)rrdrrrrs ÿz*CommandLineTestsBase.f..) rrþrrZrr(rwrÚsortedrUÚlistdirrc)r5rÚswitchÚexpectedrrrÚfs ÿ ÿzCommandLineTestsBase.fZtest_pep3147_paths_cCsL| dd|j¡| tj |j¡¡tgd¢ƒ}| tt  |j¡ƒ|¡dS)Nz-br)ú __init__.pyz __init__.pyczbar.pyzbar.pyc) rrrcrr(rwrr"rUr#)r5r%rrrÚtest_legacy_pathss z&CommandLineTestsBase.test_legacy_pathscCs|| d|j¡| tj |j¡¡tj |jd¡}| tj |¡¡| d|j¡| tj |j¡¡| tj |¡¡dS)Nrrv) rrrZrr(rwrr)rc)r5Z cachecachedirrrrÚtest_multiple_runs)sz'CommandLineTestsBase.test_multiple_runscCs”| d|j¡tj |j¡}t |t ¡dfd¡t  |¡j }| d|j¡t  |¡j }|  ||¡| dd|j¡t  |¡j }|  ||¡dS)Nrrrr) rrr rrrrrrrrCrUrW)r5rrHrrrrÚ test_force6s    zCommandLineTestsBase.test_forcecCs’tj |jd¡}t |¡t |dd¡}t |dd¡}| dd|j¡| |¡|  tj  tj |d¡¡¡| d|j¡|  |¡|  |¡dS)NÚspamrr Úhamrz-lrv) rr(r)rr2rr rrrcrwr)r5Ú subpackageÚ subinitfnÚhamfnrrrÚtest_recursion_controlFs   z+CommandLineTestsBase.test_recursion_controlc CsVtj |jd¡}tj |d¡}tj |d¡}|||fD]}t |¡q6tj |d¡}t |dd¡}t |dd¡}t |dd¡}| dd|j¡| |¡|  tj  tj |d ¡¡¡| dd |j¡|  |¡|  |¡| |¡| dd |j¡|  |¡|  |¡|  |¡| |¡| dd |j¡|  |¡|  |¡|  |¡|  |¡dS) Nr+r,Zeggsr'r Zeggrz-r 0rvz-r 1z-r 2z-r 5) rr(r)rrÚmake_pkgr rrrcrwr) r5r-Z subpackage2Z subpackage3Úpkgr.r/ZspamfnZeggfnrrrÚtest_recursion_limitRs8  ÿ          z)CommandLineTestsBase.test_recursion_limitc Csttj |jd¡}t |¡t dtj |d¡¡t dtj |d¡¡| d|j¡| tj |jdddd¡¡dS)Nr+Ú.ZevilZevil2rr') rr(r)rrr1rÝrr)r5r2rrrÚtest_symlink_loopts   ÿz&CommandLineTestsBase.test_symlink_loopcCs6| |j¡}| d|j¡}| d|¡| d|¡dS)Nrr)rrrWrUrrrrÚ test_quiet‚s  zCommandLineTestsBase.test_quietcCsTt |jdd¡| d|j¡\}}}| d|j¡\}}}| d|¡| d|¡dS)NÚ crunchyfrogú bad(syntaxrz-qqr)rr rrrWrU)r5rªrNZsilentrrrÚ test_silentˆs  z CommandLineTestsBase.test_silentcCs.| ddd|j¡| |j¡| |j¡dS)Nrz-xz ba[^\\/]*$)rrrrrrr:rrrÚ test_regexps z CommandLineTestsBase.test_regexpcCsvtj |jd¡}t |¡t |dd¡}t |dd¡}| d|j|¡|  |j ¡|  |j ¡|  |¡|  |¡dS)NZfoo2rr Úbar2r) rr(r)r'r2rr rrrrr)r5Zpkgdir2Zinit2fnÚbar2fnrrrÚtest_multiple_dirs”s    z'CommandLineTestsBase.test_multiple_dirscCs8t |jdd¡| ddd|j¡\}}}| |d¡dS)Nr7r8rú-dÚdinsdaleóFile "dinsdale)rr rrri©r5rÂrÃr«rrrÚtest_d_compile_errorŸsz)CommandLineTestsBase.test_d_compile_errorcCs„t |jdd¡}| ddd|j¡t |jdd¡}tj |¡}t |tj   |jd¡¡t  |¡tj |d d \}}}|  |d ¡dS) Nr zraise Exceptionrr>r?Úbingz import bazzbaz.pycF)Ú __isolatedr@)rr rrr rrrÚrenamer(r)Úremover¤ri)r5r rdrrÂrÃr«rrrÚtest_d_runtime_error¤s  z)CommandLineTestsBase.test_d_runtime_errorcCsZ| dtj |jd¡|j¡\}}}| |d¡| |d¡| tj  t j   |j ¡¡¡dS)Nú-iÚ nosuchfilesrror.*nosuchfiles Traceback)rrr(r)r'rriZassertNotRegexrcrwr rrrrArrrÚtest_include_bad_file®sÿ   ÿz*CommandLineTestsBase.test_include_bad_filecCsôt |jdd¡}t |jdd¡}t |jdd¡}t |jdd¡}ttj |jd¡dƒH}| tj |jd¡tj ¡| tj |jd ¡tj ¡Wdƒn1s¤0Y|  d tj |jd¡|¡|  |¡|  |¡|  |¡|  |¡dS) NÚf1r Úf2Úf3Úf4Úl1r$úf1.pyúf2.pyrH) rr rr,rr(r)r'r-Úlineseprrr©r5rKrLrMrNrOrrrÚtest_include_file_with_arg¶s:   z/CommandLineTestsBase.test_include_file_with_argcCsÖt |jdd¡}t |jdd¡}t |jdd¡}t |jdd¡}ttj |jd¡dƒ,}| tj |jd¡tj ¡Wdƒn1sˆ0Y|  d tj |jd¡¡|  |¡|  |¡|  |¡|  |¡dS) NrKr rLrMrNrOr$rQrH) rr rr,rr(r)r'r-rRrrrrSrrrÚtest_include_file_no_argÄs:   z-CommandLineTestsBase.test_include_file_no_argcCs¦t |jdd¡}t |jdd¡}t |jdd¡}t |jdd¡}tj| d¡ddgŽ}|j |tj  d ¡¡t  |¡|  |¡|  |¡|  |¡|  |¡dS) NrKr rLrMrNrrHú-rë) rr rZ spawn_pythonrüÚstdinr-rrRÚencodeZ kill_pythonrr)r5rKrLrMrNÚprrrÚtest_include_on_stdinÑs    z*CommandLineTestsBase.test_include_on_stdincCs\t |jdd¡}| d|j||j¡\}}}| |d¡| |¡| |j¡| |j¡dS)NrCz syntax(errorrIsrror) rr rrrrrirr)r5ZbingfnrÂrÃr«rrrÚ!test_compiles_as_much_as_possibleÞs ÿ    z6CommandLineTestsBase.test_compiles_as_much_as_possiblecCs| d¡}| |d¡dS)NZ badfilenamesCan't list 'badfilename')rri)r5rÃrrrÚ!test_invalid_arg_produces_messageçs z6CommandLineTestsBase.test_invalid_arg_produces_messagecCsät |jdd¡tj tj |jd¡¡}|  d|j¡t |dƒ}|  ¡}Wdƒn1s^0Y|  t  |dd…d¡d ¡|  d |j¡t |dƒ}|  ¡}Wdƒn1sº0Y|  t  |dd…d¡d ¡dS) NrKr rPz --invalidation-mode=checked-hashr>ééÚlittler”z"--invalidation-mode=unchecked-hashr)rr rr rrrr(r)rr,rArUrBÚ from_bytes)r5rÚfprGrrrÚtest_pyc_invalidation_modeësÿ & &z/CommandLineTestsBase.test_pyc_invalidation_modezrequires multiprocessingcCs–t |jdd¡}g}tdƒD]F}tj |jd |¡¡}t |¡t |dd¡}|  t |dd¡¡q|  |jdd¡|  |¡|D]}|  |¡q‚dS)Nr;r rzfoo{}rz-jÚ0) rr r'r–rr(r)rr2r¡rr)r5r<ÚfilesÚsuffixrrdr6rrrÚ test_workersøs   z!CommandLineTestsBase.test_workerszcompileall.compile_dircCsftjdtj|jdgd:t ¡| |j¡|  |j ddd¡Wdƒn1sX0YdS)Nzsys.argvz-j0r‘r‰rƒr) rrãr¿Ú executabler'rXÚmainrZr…rUr)r5rYrrrÚtest_workers_available_coress  ÿ z1CommandLineTestsBase.test_workers_available_coresc CsÖgd¢}tjj|jg|¢RŽ}t |¡t |dd¡}tj  |¡}tjj|jg|dd…¢RŽ}d}|  d|d||¡t  |¡\}}} tjj|g|dd…¢RŽ} |  | t | t ¡d¡| |t | t ¡d¡dS) Nrµrrr¸rrÅz-sz-prº)rr(r)r'r½rr r rrrr¤r¦r¾r¿rÀrÁrÈrrrrÉs$  þþz+CommandLineTestsBase.test_strip_and_prependc CsÜtj |jd¡}t |¡t |dd¡}g}dD]}| tj j ||d¡q0ddgddgddggd ¢g}|D]j}|j |gd d „|Dƒ¢RŽ|D]D}|  tj  |t|ƒ¡¡zt ||¡WqtyÒYq0qqldS) NZ optimizationsrÌrÍrÎr rcÚ1Ú2)rcrjrkcss|]}dt|ƒVqdS)z-oN)r¾)rÚnrrrr 2rzICommandLineTestsBase.test_multiple_optimization_levels..)rr(r)r'r½rr r¡r rrrrZrbrBr`rÏ)r5r(rr\rÐrÑrÒrrrrÓ#s0 þ ÿ ý z6CommandLineTestsBase.test_multiple_optimization_levelsc Csøtj |jddd¡}tj |jddd¡}tj |jddd¡}t |¡t |¡t |¡t |dd¡}t |dd¡}tj |d ¡}tj |d ¡}t ||¡t ||¡tj   |¡}tj   |¡} |  |d |¡|  tj  |¡¡| tj  | ¡¡dS) NrrrÔrÕrÖr×rØrÍrÙrÚrÛz-e)rr(r)r'r½rr rÝr rrrrZrbrcrÞrrrrß:s"       z4CommandLineTestsBase.test_ignore_symlink_destinationcCs| |jdd¡dS)Nú-o 1ú--hardlink-dupes)rr'r:rrrÚtest_hardlink_bad_argsSsz+CommandLineTestsBase.test_hardlink_bad_argsc CsîdD]ä}t ¡È}|j|dœt |dd¡}t|ƒ}gd¢}|rL| d¡|j|g|¢RŽ| t |d|dƒ|¡| t |d|d ƒ|¡| t |d|d ƒ|¡Wdƒn1sÀ0YWdƒq1sÞ0YqdS) N)TF©ÚdeduprrÍ)rz-o 0rmz-o 2rnrrr) r%ÚTemporaryDirectoryÚsubTestrr rr¡rrUr!)r5rqr(rÚpycsrûrrrÚ test_hardlinkXs  z"CommandLineTestsBase.test_hardlinkN)5ràrárâÚ classmethodrørùrürrrrr7r rrrÚnamerr$r&Úlocalsr(r)r*r0r3rrär5r6r9r:r=rBrGrJrTrUrZr[r\rbrÚ_have_multiprocessingrfrrãrirÉrÓrßrorurrrrrð¦sd       ý     "          rðc@s eZdZdS)ÚCommandLineTestsWithSourceEpochNrærrrrrznsrzc@s eZdZdS)ÚCommandLineTestsNoSourceEpochNrærrrrr{usr{c@s’eZdZdd„Zejdd„ƒZd#dd„Zdd d d œd d „Zdd„Z d$dd„Z dd„Z dd„Z d%dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"S)&ÚHardlinkDedupTestsBasecCs d|_dSrror:rrrr7€szHardlinkDedupTestsBase.setUpccs>t ¡"}||_|Vd|_Wdƒn1s00YdSr)r%rrr()r5r(rrrÚtemporary_directoryƒs z*HardlinkDedupTestsBase.temporary_directoryrcCst |j||¡Sr)rr r()r5Úcoderwrrrr Šsz"HardlinkDedupTestsBase.make_scriptTrF)rqrzrMcCstj|jd|||ddS)NT)rNrzÚhardlink_dupesrM)rXrYr()r5rqrzrMrrrrYs ÿz"HardlinkDedupTestsBase.compile_dirc Cs¶| ¡š| d¡| t¡$tj|jddddWdƒn1sH0Y| t¡(tj|jdddgddWdƒn1sŠ0YWdƒn1s¨0YdS)NÚpassTr)rNrzr)r}r rÊrŠrXrYr(r:rrrÚ test_bad_args‘s    ÿ$ ÿz$HardlinkDedupTestsBase.test_bad_argscCs4g}|r| d¡| d¡|r*| d¡d |¡S)Nz'module docstring'zx = 1z assert x == 1Ú )r¡r))r5Ú docstringÚ assertionÚlinesrrrÚ create_codeŸs   z"HardlinkDedupTestsBase.create_codeccs2dD](}dD]}|j||d}|||fVq qdS)N)FT©rƒr„)r†)r5rƒr„r~rrrÚ iter_codes¨sz!HardlinkDedupTestsBase.iter_codesc CsÔ| ¡D]Æ\}}}|j||dž| ¡v| |¡}t|ƒ}|jdd| t|d|dƒ¡| t|d|dƒ¡| t|d|dƒ¡Wdƒn1s¦0YWdƒq1sÄ0YqdS)Nr‡Frprrr)rˆrsr}r rrYrcr!)r5r~rƒr„rrtrrrÚ test_disabled®s   z$HardlinkDedupTestsBase.test_disabledcCsft|ƒ}| t|d|dƒ| ¡| t|d|dƒ| oB| ¡| t|d|dƒ| ¡dS)Nrrr)rrUr!)r5rrƒr„rtrrrÚcheck_hardlinksºsÿ ÿÿz&HardlinkDedupTestsBase.check_hardlinksc CsŽ| ¡D]€\}}}|j||dX| ¡0| |¡}| ¡| |||¡Wdƒn1s`0YWdƒq1s~0YqdS)Nr‡)rˆrsr}r rYrŠ)r5r~rƒr„rrrrruÃs   z$HardlinkDedupTestsBase.test_hardlinkc Cs¨dD]ž}|j|d~| ¡V| | ¡¡}|j|dt||dƒ}t||dƒ}| t||ƒ¡Wdƒn1sz0YWdƒq1s˜0YqdS)N))rr)rr)rr)Úopts©rzrr)rsr}r r†rYrrZr!)r5r‹rÚpyc1Úpyc2rrrÚtest_only_two_levelsÌs  z+HardlinkDedupTestsBase.test_only_two_levelscCsn| ¡R| | ¡¡}|jgd¢dt|dƒ}t|dƒ}| t||ƒ¡Wdƒn1s`0YdS)N)rrrrrŒrr)r}r r†rYrrZr!)r5rrrŽrrrÚtest_duplicated_levelsÙs    z-HardlinkDedupTestsBase.test_duplicated_levelscCsâ| ¡Æ| d¡}| ¡| |¡t|ƒ}t |d¡j}| d¡}|jddgdd| |t |d¡j¡|  t |d|dƒ¡|  |t |d¡j¡|  t j|d|ddd¡Wdƒn1sÔ0YdS) NrÍrúprint(0)rT)rzrMr©Úshallow)r}r rYrŠrrrrrUrZr!rWrcÚfilecmpÚcmp©r5rrtÚinoderrrÚtest_recompilationås    z)HardlinkDedupTestsBase.test_recompilationcCsò| ¡Ö|j| ¡dd}| ¡| |¡t|ƒ}t |d¡j}|jddd}t j dddd|j d |  |t |d¡j¡|  |t |d ¡j¡|  t|d |d ƒ¡|  tj|d |d d d ¡Wdƒn1sä0YdS)NÚmodule)rwrr‘rz-cz import moduleF)rDr rrTr’)r}r r†rYrŠrrrrrrþr(rUrcr!r”r•r–rrrÚ test_importþs   ÿz"HardlinkDedupTestsBase.test_importN)r)FF)FF)ràrárâr7Ú contextlibÚcontextmanagerr}r rYrr†rˆr‰rŠrurrr˜ršrrrrr|}s       r|c@s eZdZdS)Ú!HardlinkDedupTestsWithSourceEpochNrærrrrrsrc@s eZdZdS)ÚHardlinkDedupTestsNoSourceEpochNrærrrrrž!sržÚ__main__).rXr›r”Úimportlib.utilr rìÚ itertoolsrrgrSr0rDr¿r%Ztest.test_importlib.utilrrrrQrrÚconcurrent.futuresrryÚ ImportErrorrZ test.supportrZtest_py_compilerr rrr!r"ZTestCaserårèrérðrzr{r|rržràrhrrrrÚsŒ       Q ý ýK ý ý ý ý