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)z8Returns True if two files have the same inode (hardlink))Ú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¡dS©N©r/Úrmtreer&©r4rrrÚtearDownBszCompileallTestsBase.tearDowncCsLtj |jd¡|_t|jdƒ}| d¡Wdƒn1s>0YdS)Nz _test_bad.pyr#zx ( )rr'r(r&Úbad_source_pathr+r,r3rrrÚ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)r4r5Ú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) zOCheck that compileall recreates bytecode when the new metadata is used.ÚSOURCE_DATE_EPOCHzSOURCE_DATE_EPOCH is setr>NÚwbFT©ÚforceÚquiet)rÚenvironÚgetÚunittestÚSkipTestÚ py_compileÚcompiler)Ú assertEqualrIr+r*rAÚlenr,ÚassertNotEqualÚ compileallÚ compile_dirr&Ú assertTrue)r4Úmetadatar5Ú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<)r4Ú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)r4Ú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)NrGr5r#Ú __pycache__) rr'r(r&r1r+rXrarcÚexists)r4Zdata_dirZ data_filerrrÚtest_no_pycache_in_non_package›s   z2CompileallTestsBase.test_no_pycache_in_non_packagecCsŽdnd\}}tj|jd|dtjj|j|d}| tj   |¡¡tjj|j |d}| tj   |¡¡tjj|j |d}| tj   |¡¡dS)NT)rr)rr ©rNÚoptimizer ) rXrYr&r rrr)rZrr'rbr-r2)r4rzrÚ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)r4rkÚ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©r4Ú 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)r4Úcompile_file_mockr‡rrrÚtest_compile_one_workerÍs z+CompileallTestsBase.test_compile_one_workerN©ÚnewcCs"tj|jddd| |j¡dSr€r„)r4rrrrÚ$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(r1r/r0r)r rrrXrYrcrbrZ)r4Ú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€d S) z@Recursive compile_dir ddir must contain package paths; bpo39769.rrÚfooÚ__init__r Úmodzdef fn(): 1/0 fn() Trr)rNrmrƒNú")r&rr'r(r1rÚ make_scriptÚappendrXrYrZÚ startswithr rrrVÚsepÚassert_python_failurerrrsZget_code_from_pycrUÚ co_filenameÚassertInÚfsdecode)r4rmr›Úfullpathr'ZmodsZsubdirržZmodcodeÚmodpathÚ_ÚerrÚ expected_inZ mod_code_objrrrÚ_test_ddir_onlyës0  ÿ þ  z#CompileallTestsBase._test_ddir_onlycCs|jdddS)ú=Recursive compile_dir ddir= contains package paths; bpo39769.ú F©rmr›©r­r:rrrÚtest_ddir_only_one_workersz-CompileallTestsBase.test_ddir_only_one_workercCs|jdddS)r®r¯Tr°r±r:rrrÚtest_ddir_multiple_workerssz.CompileallTestsBase.test_ddir_multiple_workerscCs|jdddS)ú?Recursive compile_dir ddir='' contains package paths; bpo39769.r Fr°r±r:rrrÚtest_ddir_empty_only_one_worker sz3CompileallTestsBase.test_ddir_empty_only_one_workercCs|jdddS)r´r 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) r4r¨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Â) r4r¨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¾© r4r¨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)r4r¨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)r4rr\Ú 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© r4Z 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__r6r;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(eZdZdZdd„Zdd„Zdd„ZdS) Ú EncodingTestzTIssue 6716: compileall should escape source code when printing errors to stdout.cCsdt ¡|_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,r3rrrr6“s   zEncodingTest.setUpcCst |j¡dSr7r8r:rrrr;šszEncodingTest.tearDowncCs>z0tj}tjt ¡ddt_t |j¡W|t_n|t_0dS)NÚasciir¼)rÁrkÚioÚ TextIOWrapperÚBytesIOrXrYr&)r4Z orig_stdoutrrrÚ test_errors zEncodingTest.test_errorN)rârãräÚ__doc__r6r;rñrrrrrësrëc@s¬eZdZdZedd„ƒZdd„Zdd„Zdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z edd„ƒZdd„ZddgfdddgfdddgffD]&\ZZZeefd d!„Zeeƒd"e<qŒd#d$„Zd%d&„Zed'd(„ƒZd)d*„Zd+d,„Zejd-d.„ƒZd/d0„Zd1d2„Zd3d4„Z d5d6„Z!d7d8„Z"d9d:„Z#d;d<„Z$d=d>„Z%d?d@„Z&dAdB„Z'dCdD„Z(dEdF„Z)dGdH„Z*e+e,dIƒdJdK„ƒZ-e. /dL¡dMdN„ƒZ0dOdP„Z1dQdR„Z2ejdSdT„ƒZ3dUdV„Z4dWdX„Z5dYS)ZÚCommandLineTestsBasezTest compileall's CLI.c 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_dirr1r+r,ÚOSErrorrr`rÀÚrmdirÚ_sys_path_writable)Úclsr'Zdirectory_createdr&r5Zsys_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)r4ÚargsrrrÚ _get_run_argsÄs ÿÿÿþz"CommandLineTestsBase._get_run_argscOs4tj| |¡i|¤ddi¤Ž\}}}| d|¡|S)NÚPYTHONIOENCODINGrìr)rÚassert_python_okrÿrU©r4rþZenv_varsrÄrÅr«rrrÚ assertRunOKÉsÿÿþ z CommandLineTestsBase.assertRunOKcOs.tj| |¡i|¤ddi¤Ž\}}}|||fS)Nrrì)rr¤rÿrrrrÚassertRunNotOKÐsÿÿþz#CommandLineTestsBase.assertRunNotOKcCs"tj |¡}| tj |¡¡dSr7)r rrrZrr'rw©r4rdr'rrrÚassertCompiledÖs z#CommandLineTestsBase.assertCompiledcCs"tj |¡}| tj |¡¡dSr7)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(Úpkgdirr1Úpkgdir_cachedirrr ÚinitfnÚbarfnr:rrrr6Þs  zCommandLineTestsBase.setUpcCsL| ¡t |jdd¡}|j|jd| |¡| |j¡| |j¡dS)NÚbazr ©Ú PYTHONPATH) rürr r&rrrr r )r4Ú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)r4rÚ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ér4ZnoisyrNrrrÚ 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ˆ¡VqdSr7)ÚformatrÁÚimplementationÚ cache_tag)rÚbase©ÚextrrÚ sÿz)CommandLineTestsBase.f..)z__init__.{}.{}z bar.{}.{}csg|]}| ˆ¡r|‘qSr)Úendswith)rrdr!rrrs ÿz*CommandLineTestsBase.f..) rrrrZrr'rwr ÚsortedrUÚlistdirrc)r4r"ÚswitchÚexpectedrr!rÚfs ÿ ÿzCommandLineTestsBase.fZtest_pep3147_paths_cCsL| dd|j¡| tj |j¡¡tgd¢ƒ}| tt  |j¡ƒ|¡dS)Nz-br)ú __init__.pyz __init__.pyczbar.pyzbar.pyc) rrrcrr'rwr r%rUr&)r4r(rrrÚtest_legacy_pathss z&CommandLineTestsBase.test_legacy_pathscCs|| d|j¡| tj |j¡¡tj |jd¡}| tj |¡¡| d|j¡| tj |j¡¡| tj |¡¡dS)Nrrv) rrrZrr'rwr r(rc)r4Z 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 rrr rrrrrCrUrW)r4rrHrrrrÚ 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(rr1rr rrrcrwr)r4Ú 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) r4r0Z subpackage2Z subpackage3Úpkgr1r2ZspamfnZeggfnrrrÚ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(rrr4rßrr)r4r5rrrÚ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)r4rªrNZsilentrrrÚ test_silentˆs  z CommandLineTestsBase.test_silentcCs.| ddd|j¡| |j¡| |j¡dS)Nrz-xz ba[^\\/]*$)rrrr rr r:rrrÚ test_regexps z CommandLineTestsBase.test_regexpcCsvtj |jd¡}t |¡t |dd¡}t |dd¡}| d|j|¡|  |j ¡|  |j ¡|  |¡|  |¡dS)NZfoo2rr Úbar2r) rr'r(r&r1rr rrrr r )r4Zpkgdir2Zinit2fnÚbar2fnrrrÚtest_multiple_dirs”s    z'CommandLineTestsBase.test_multiple_dirscCs8t |jdd¡| ddd|j¡\}}}| |d¡dS)Nr:r;rú-dÚdinsdaleóFile "dinsdale)rr rrri©r4rÄ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 ExceptionrrArBÚbingz import bazzbaz.pycF)Ú __isolatedrC)rr rrr rrrÚrenamer'r(Úremover¤ri)r4rrdrrÄ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 rrr rDrrrÚ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.pyrK) rr rr+rr'r(r&r,Úlineseprrr©r4rNrOrPrQrRrrrÚ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) NrNr rOrPrQrRr#rTrK) rr rr+rr'r(r&r,rUrrrrVrrrÚ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) NrNr rOrPrQrrKú-rí) rr rZ spawn_pythonrÿÚstdinr,rrUÚencodeZ kill_pythonrr)r4rNrOrPrQÚprrrÚtest_include_on_stdinÑs    z*CommandLineTestsBase.test_include_on_stdincCs\t |jdd¡}| d|j||j¡\}}}| |d¡| |¡| |j¡| |j¡dS)NrFz syntax(errorrLsrror) rr rrr r rirr)r4ZbingfnrÄ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)r4rÅ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) NrNr rSz --invalidation-mode=checked-hashr>ééÚlittler”z"--invalidation-mode=unchecked-hashr)rr rr rrrr'r(rr+rArUrBÚ from_bytes)r4rÚ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(rr1r¡rr)r4r?ÚfilesÚsuffixrrdr5rrrÚ 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)r4rYrrrÚ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 rfÚ1Ú2)rfrmrncss|]}dt|ƒVqdS)z-oN)rÀ)rÚnrrrr#2rzICommandLineTestsBase.test_multiple_optimization_levels..)rr'r(r&r¿rr r¡r rrrrZrbrBr`rÑ)r4r'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 0rpz-o 2rqrrr) r$ÚTemporaryDirectoryÚsubTestrr rr¡rrUr )r4rtr'rÚpycsrþrrrÚ test_hardlinkXs  z"CommandLineTestsBase.test_hardlinkN)6rârãräròÚ classmethodrûrürÿrrrrr6rrrrÚnamer"r'r)Úlocalsr+r,r-r3r6rrær8r9r<r=r@rErJrMrWrXr]r^r_rerÚ_have_multiprocessingrirrårlrËrÕrárrrxrrrrró¦sf       ý     "          róc@s eZdZdS)ÚCommandLineTestsWithSourceEpochNrèrrrrr}nsr}c@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|_dSr7ror:rrrr6€szHardlinkDedupTestsBase.setUpccs>t ¡"}||_|Vd|_Wdƒn1s00YdSr7)r$rur')r4r'rrrÚtemporary_directoryƒs z*HardlinkDedupTestsBase.temporary_directoryrcCst |j||¡Sr7)rr r')r4Úcoderzrrrr Šsz"HardlinkDedupTestsBase.make_scriptTrF)rtrzrMcCstj|jd|||ddS)NT)rNrzÚhardlink_dupesrM)rXrYr')r4rtrzrMrrrrYs ÿ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()r4Ú docstringÚ assertionÚlinesrrrÚ create_codeŸs   z"HardlinkDedupTestsBase.create_codeccs2dD](}dD]}|j||d}|||fVq qdS)N)FT©r†r‡)r‰)r4r†r‡rrrrÚ 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ŠFrsrrr)r‹rvr€r rrYrcr )r4rr†r‡rrwrrrÚ test_disabled®s   z$HardlinkDedupTestsBase.test_disabledcCsft|ƒ}| t|d|dƒ| ¡| t|d|dƒ| oB| ¡| t|d|dƒ| ¡dS)Nrrr)rrUr )r4rr†r‡rwrrrÚcheck_hardlinksºsÿ ÿÿz&HardlinkDedupTestsBase.check_hardlinksc CsŽ| ¡D]€\}}}|j||dX| ¡0| |¡}| ¡| |||¡Wdƒn1s`0YWdƒq1s~0YqdS)NrŠ)r‹rvr€r rYr)r4rr†r‡rrrrrxÃ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)rvr€r r‰rYrrZr )r4rŽ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)rrrrrrr)r€r r‰rYrrZr )r4rrr‘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 rYrrrrrrUrZr rWrcÚfilecmpÚcmp©r4rrwÚ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)rzrr”rz-cz import moduleF)rGrrrTr•)r€r r‰rYrrrrrrrr'rUrcr r—r˜r™rrrÚ test_importþs   ÿz"HardlinkDedupTestsBase.test_importN)r)FF)FF)rârãrär6Ú contextlibÚcontextmanagerr€r rYr„r‰r‹rŒrrxr’r“r›rrrrrr}s       rc@s eZdZdS)Ú!HardlinkDedupTestsWithSourceEpochNrèrrrrr sr c@s eZdZdS)ÚHardlinkDedupTestsNoSourceEpochNrèrrrrr¡!sr¡Ú__main__).rXržr—Úimportlib.utilr rîÚ itertoolsrrgrSr/rDrÁr$Ztest.test_importlib.utilrrrrQrrÚconcurrent.futuresrr|Ú ImportErrorrZ test.supportrZtest_py_compilerr rrr r!ZTestCaserçrêrërór}r~rr r¡rârkrrrrÚsŒ       Q ý ýK ý ý ý ý