a 5êdg+ã@söddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZdd„Zdd„ZGdd „d ee jƒƒZGd d „d ƒZGd d „d ee jeddZGdd„dee jeddZGdd„de jƒZedkròe  ¡dS)éN)Úsupport)Ú script_helpercst ˆ¡‡fdd„ƒ}|S)NcsDt ¡(}| d¡ˆ|i|¤ŽWdƒS1s60YdS)NÚSOURCE_DATE_EPOCH)rÚEnvironmentVarGuardZunset©ÚargsÚkwargsÚenv©Úfxn©ú0/usr/local/lib/python3.9/test/test_py_compile.pyÚwrappers  z*without_source_date_epoch..wrapper©Ú functoolsÚwraps©r rr r r Úwithout_source_date_epochsrcst ˆ¡‡fdd„ƒ}|S)NcsBt ¡&}d|d<ˆ|i|¤ŽWdƒS1s40YdS)NZ 123456789r)rrrr r r rs z'with_source_date_epoch..wrapperrrr r r Úwith_source_date_epochsrcseZdZ‡fdd„Z‡ZS)ÚSourceDateEpochTestMetac sZtƒ ||||¡}t|ƒD]:}| d¡rt||ƒ}|r@t|ƒ}nt|ƒ}t|||ƒq|S)NZtest_)ÚsuperÚ__new__ÚdirÚ startswithÚgetattrrrÚsetattr) ÚmclsÚnameÚbasesZdctÚsource_date_epochÚclsÚattrÚmethr©Ú __class__r r r&s    zSourceDateEpochTestMeta.__new__)Ú__name__Ú __module__Ú __qualname__rÚ __classcell__r r r#r r%src@sîeZdZdd„Zdd„Zdd„Zdd„Ze e j   e j ¡ pHe j   e j ¡d ¡d d „ƒZd d „Zdd„Zdd„Ze ee dƒo†e  ¡dkd¡e e jdkd¡dd„ƒƒZdd„Zdd„Ze ejjdkd¡dd„ƒZd d!„Zd"d#„Zd$d%„Zd&S)'ÚPyCompileTestsBasecCs°tjt ¡d|_tj |jd¡|_|jd|_t j   |j¡|_ tj  t ¡¡d|_tj  |j¡d}|rvt |¡t|jdƒ}| d¡Wdƒn1s¢0YdS)N)rú_test.pyÚcrÚwúx = 123 )ÚtempfileÚmkdtempÚosÚgetcwdÚ directoryÚpathÚjoinÚ source_pathÚpyc_pathÚ importlibÚutilÚcache_from_sourceÚ cache_pathÚ splitdriveÚ cwd_driveÚchdirÚopenÚwrite)ÚselfÚdriveÚfiler r r ÚsetUp7s  zPyCompileTestsBase.setUpcCs"t |j¡|jrt |j¡dS©N)ÚshutilÚrmtreer2r<r0r=©r@r r r ÚtearDownGs zPyCompileTestsBase.tearDowncCs<t |j|j¡| tj |j¡¡| tj |j ¡¡dSrD) Ú py_compileÚcompiler5r6Ú assertTruer0r3ÚexistsÚ assertFalser:rGr r r Útest_absolute_pathLsz%PyCompileTestsBase.test_absolute_pathc Csxzt |jd|j¡Wn ttfy8| d¡Yn<0| t¡ t  |j |j¡Wdƒn1sj0YdS)Nz.actualz.need to be able to create a symlink for a file) r0Úsymlinkr6ÚNotImplementedErrorÚOSErrorZskipTestÚ assertRaisesÚFileExistsErrorrIrJr5rGr r r Útest_do_not_overwrite_symlinksQs  z1PyCompileTestsBase.test_do_not_overwrite_symlinksz7requires os.devnull and for it to be a non-regular filecCs>| t¡ t |jtj¡Wdƒn1s00YdSrD)rRrSrIrJr5r0ÚdevnullrGr r r Ú&test_do_not_overwrite_nonregular_files]s z9PyCompileTestsBase.test_do_not_overwrite_nonregular_filescCs$t |j¡| tj |j¡¡dSrD)rIrJr5rKr0r3rLr:rGr r r Útest_cache_pathes z"PyCompileTestsBase.test_cache_pathcCsxt |j¡0t tj |j¡tj |j ¡¡Wdƒn1sB0Y|  tj  |j ¡¡|  tj  |j ¡¡dSrD)rZ change_cwdr2rIrJr0r3Úbasenamer5r6rKrLrMr:rGr r r Útest_cwdis  ÿ"zPyCompileTestsBase.test_cwdcCsLt tj |j¡tj |j¡¡| tj |j¡¡|  tj |j ¡¡dSrD) rIrJr0r3Úrelpathr5r6rKrLrMr:rGr r r Útest_relative_pathps  ÿz%PyCompileTestsBase.test_relative_pathÚgeteuidrznon-root user requiredÚntz/cannot control directory permissions on Windowsc Cs‚t |j¡}t |jtj¡zN| t¡ t |j |j ¡Wdƒn1sN0YWt |j|j ¡nt |j|j ¡0dSrD) r0Ústatr2ÚchmodÚS_IREADrRÚIOErrorrIrJr5r6Úst_mode)r@Úmoder r r Útest_exceptions_propagatevs   0z,PyCompileTestsBase.test_exceptions_propagatecCsptj tj t¡d¡}t ¡$| tj |dd¡Wdƒn1sH0Y|  tj  t j  |¡¡¡dS)Núbad_coding2.pyF)Údoraise)r0r3r4ÚdirnameÚ__file__rÚcaptured_stderrÚ assertIsNonerIrJrMrLr7r8r9)r@Ú bad_codingr r r Útest_bad_coding†s  2  ÿz"PyCompileTestsBase.test_bad_codingcCsžt |j|j¡| tj |j¡¡| tj |j ¡¡t |jdƒ$}t j   | ¡di¡}Wdƒn1sn0Ytj d¡rŠd}nd}| ||¡dS)NÚrbÚtestrér)rIrJr5r6rKr0r3rLrMr:r>r7Ú_bootstrap_externalÚ _classify_pycÚreadÚenvironÚgetÚ assertEqual)r@ÚfpÚflagsZexpected_flagsr r r Útest_source_date_epochs ÿ" z)PyCompileTestsBase.test_source_date_epochztest does not work with -Oc CsÐtj |jd¡}tj |¡}|d}tj |¡\}}tj |¡}|  tj ||¡tj dd  t j j ¡¡¡t|dƒ}| d¡Wdƒn1s”0Yt |¡| tj |¡¡| tj |¡¡dS)Nz foo.bar.pyr+Ú __pycache__zfoo.bar.{}.pycr,r-)r0r3r4r2r7r8r9ÚsplitrXruÚformatÚsysÚimplementationÚ cache_tagr>r?rIrJrKrLrM)r@Z weird_pathr:r6ÚheadÚtailZpenultimate_tailrBr r r Útest_double_dot_no_clobber›s"    þþ ( z-PyCompileTestsBase.test_double_dot_no_clobbercCs| dtj|jdd¡dS)Nzopt-2é)Úoptimize)ÚassertInrIrJr5rGr r r Útest_optimization_path¯sz)PyCompileTestsBase.test_optimization_pathcCsÄtj|jtjjdt|jdƒ$}tj  |  ¡di¡}Wdƒn1sJ0Y|  |d¡tj|jtjj dt|jdƒ$}tj  |  ¡di¡}Wdƒn1sª0Y|  |d¡dS)N)Úinvalidation_modermrnroé) rIrJr5ÚPycInvalidationModeÚ CHECKED_HASHr>r:r7rprqrrruÚUNCHECKED_HASH)r@rvrwr r r Útest_invalidation_mode³s$þ ÿ" þ ÿ"z)PyCompileTestsBase.test_invalidation_modec Csºtj tj t¡d¡}t ¡ˆ}| tj |ddd¡| tj |ddd¡|  |  ¡d¡|  tj ¡ tj |dddWdƒn1sŽ0YWdƒn1s¬0YdS)NreFr‚)rfÚquietTÚr‡)r0r3r4rgrhrrirjrIrJruÚgetvaluerRÚPyCompileError)r@rkÚstderrr r r Ú test_quietÅs zPyCompileTestsBase.test_quietN)r%r&r'rCrHrNrTÚunittestZskipIfr0r3rLrUÚisfilerVrWrYr[Úhasattrr\rrdrlrxr|rwrƒrr…r‹r‘r r r r r)5s2 ÿ ÿ ÿ  r)c@s eZdZdS)ÚPyCompileTestsWithSourceEpochN©r%r&r'r r r r r•Ïsr•T)Ú metaclassrc@s eZdZdS)Ú PyCompileTestsWithoutSourceEpochNr–r r r r r˜Ösr˜Fc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚPyCompileCLITestCasecCsft ¡|_tj |jd¡|_tj  |j¡|_ t |jdƒ}|  d¡Wdƒn1sX0YdS)Nr*r,r-) r.r/r2r0r3r4r5r7r8r9r:r>r?)r@rBr r r rCßs  zPyCompileCLITestCase.setUpcCst |j¡dSrD)rrFr2rGr r r rHæszPyCompileCLITestCase.tearDowncOsT|r:|ddkr:d|vr:tjtjdddg|d ¡ddStjddg|¢Ri|¤ŽS)Nrú-Úinputú-mrIT)r›Úcapture_output)Ú subprocessÚrunr|Ú executableÚencoderZassert_python_ok)r@rrr r r Ú pycompilecmdés  þz!PyCompileCLITestCase.pycompilecmdcGstjddg|¢RŽS)NrœrI)rZassert_python_failure)r@rr r r Úpycompilecmd_failureósz)PyCompileCLITestCase.pycompilecmd_failurecCsR|jd|jd}| |jd¡| |jd¡| |jd¡| tj  |j ¡¡dS)Nrš)r›ró) r¢r5ruÚ returncodeÚstdoutrrKr0r3rLr:)r@Úresultr r r Ú test_stdinös zPyCompileCLITestCase.test_stdincCsR| |j|j¡\}}}| |d¡| |d¡| |d¡| tj |j¡¡dS)Nrr¤)r¢r5rurKr0r3rLr:)r@Úrcr¦rr r r Útest_with_filesýs    z$PyCompileCLITestCase.test_with_filescCsNtj tj t¡d¡}| |¡\}}}| |d¡| |d¡| d|¡dS)Nzbadsyntax_3131.pyr‡r¤s SyntaxError)r0r3r4rgrhr£rur„)r@Z bad_syntaxr©r¦rr r r Útest_bad_syntaxs   z$PyCompileCLITestCase.test_bad_syntaxcCsRtj tj t¡d¡}| |j|¡\}}}| |d¡| |d¡| d|¡dS)Nzshould_not_exists.pyr‡r¤sNo such file or directory) r0r3r4rgrhr£r5rur„)r@Zshould_not_existsr©r¦rr r r Útest_file_not_exists s   z)PyCompileCLITestCase.test_file_not_existsN) r%r&r'rCrHr¢r£r¨rªr«r¬r r r r r™Ýs r™Ú__main__)rÚimportlib.utilr7r0rIrEr^ržr|r.r’rnrZ test.supportrrrÚtypeZTestCaserr)r•r˜r™r%Úmainr r r r Ús:     ý ý6