a
    äze+  ã                   @   sö   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ dd„ Zdd„ ZG dd	„ d	ee
jƒƒZG d
d„ dƒZG dd„ dee
jeddZG dd„ dee
jeddZG dd„ de
jƒZedkròe
 ¡  dS )é    N)Úsupport)Úscript_helperc                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                     sD   t  ¡ (}| d¡ ˆ | i |¤ŽW  d   ƒ S 1 s60    Y  d S )NÚSOURCE_DATE_EPOCH)r   ÚEnvironmentVarGuardZunset©ÚargsÚkwargsÚenv©Úfxn© ú*/usr/lib/python3.9/test/test_py_compile.pyÚwrapper   s    

z*without_source_date_epoch.<locals>.wrapper©Ú	functoolsÚwraps©r   r   r   r
   r   Úwithout_source_date_epoch   s    r   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                     sB   t  ¡ &}d|d< ˆ | i |¤ŽW  d   ƒ S 1 s40    Y  d S )NZ	123456789r   )r   r   r   r
   r   r   r      s    
z'with_source_date_epoch.<locals>.wrapperr   r   r   r
   r   Úwith_source_date_epoch   s    r   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSourceDateEpochTestMetac          	         sZ   t ƒ  | |||¡}t|ƒD ]:}| d¡rt||ƒ}|r@t|ƒ}nt|ƒ}t|||ƒ q|S )NZtest_)ÚsuperÚ__new__ÚdirÚ
startswithÚgetattrr   r   Úsetattr)	ÚmclsÚnameÚbasesZdctÚsource_date_epochÚclsÚattrÚmethr   ©Ú	__class__r   r   r   &   s    


zSourceDateEpochTestMeta.__new__)Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__r   r   r#   r   r   %   s   r   c                   @   sî   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	j
 e	j¡ pHe	j
 e	j¡d	¡d
d„ ƒZdd„ Zdd„ Zdd„ Ze ee	dƒo†e	 ¡ dkd¡e e	jdkd¡dd„ ƒƒZdd„ Zdd„ Ze ejjdkd¡dd„ ƒZd d!„ Zd"d#„ Zd$d%„ Zd&S )'ÚPyCompileTestsBasec                 C   s°   t jt ¡ d| _tj | jd¡| _| jd | _t	j
 | j¡| _tj t ¡ ¡d | _tj | j¡d }|rvt |¡ t| jdƒ}| d¡ W d   ƒ n1 s¢0    Y  d S )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   ÚsetUp7   s    
zPyCompileTestsBase.setUpc                 C   s"   t  | j¡ | jrt | j¡ d S ©N)ÚshutilÚrmtreer2   r<   r0   r=   ©r@   r   r   r   ÚtearDownG   s    zPyCompileTestsBase.tearDownc                 C   s<   t  | j| j¡ |  tj | j¡¡ |  tj | j	¡¡ d S rD   )
Ú
py_compileÚcompiler5   r6   Ú
assertTruer0   r3   ÚexistsÚassertFalser:   rG   r   r   r   Útest_absolute_pathL   s    z%PyCompileTestsBase.test_absolute_pathc              	   C   sx   zt  | jd | j¡ W n  ttfy8   |  d¡ Y n<0 |  t¡  t 	| j
| j¡ W d   ƒ n1 sj0    Y  d S )Nz.actualz.need to be able to create a symlink for a file)r0   Úsymlinkr6   ÚNotImplementedErrorÚOSErrorZskipTestÚassertRaisesÚFileExistsErrorrI   rJ   r5   rG   r   r   r   Útest_do_not_overwrite_symlinksQ   s    z1PyCompileTestsBase.test_do_not_overwrite_symlinksz7requires os.devnull and for it to be a non-regular filec                 C   s>   |   t¡  t | jtj¡ W d   ƒ n1 s00    Y  d S rD   )rR   rS   rI   rJ   r5   r0   ÚdevnullrG   r   r   r   Ú&test_do_not_overwrite_nonregular_files]   s    z9PyCompileTestsBase.test_do_not_overwrite_nonregular_filesc                 C   s$   t  | j¡ |  tj | j¡¡ d S rD   )rI   rJ   r5   rK   r0   r3   rL   r:   rG   r   r   r   Útest_cache_pathe   s    z"PyCompileTestsBase.test_cache_pathc                 C   sx   t  | j¡0 t tj | j¡tj | j	¡¡ W d   ƒ n1 sB0    Y  |  
tj | j	¡¡ |  tj | j¡¡ d S rD   )r   Z
change_cwdr2   rI   rJ   r0   r3   Úbasenamer5   r6   rK   rL   rM   r:   rG   r   r   r   Útest_cwdi   s    ÿ"zPyCompileTestsBase.test_cwdc                 C   sL   t  tj | j¡tj | j¡¡ |  tj | j¡¡ |  	tj | j
¡¡ d S rD   )rI   rJ   r0   r3   Úrelpathr5   r6   rK   rL   rM   r:   rG   r   r   r   Útest_relative_pathp   s
    ÿz%PyCompileTestsBase.test_relative_pathÚgeteuidr   znon-root user requiredÚntz/cannot control directory permissions on Windowsc              
   C   s‚   t  | j¡}t  | jtj¡ zN|  t¡  t | j	| j
¡ W d   ƒ n1 sN0    Y  W t  | j|j¡ nt  | j|j¡ 0 d S rD   )r0   Ústatr2   ÚchmodÚS_IREADrR   ÚIOErrorrI   rJ   r5   r6   Úst_mode)r@   Úmoder   r   r   Útest_exceptions_propagatev   s    0z,PyCompileTestsBase.test_exceptions_propagatec                 C   sp   t j t j t¡d¡}t ¡ $ |  tj	|dd¡ W d   ƒ n1 sH0    Y  |  
t j tj |¡¡¡ d S )Núbad_coding2.pyF)Údoraise)r0   r3   r4   ÚdirnameÚ__file__r   Úcaptured_stderrÚassertIsNonerI   rJ   rM   rL   r7   r8   r9   )r@   Ú
bad_codingr   r   r   Útest_bad_coding†   s    
2

ÿz"PyCompileTestsBase.test_bad_codingc                 C   sž   t  | j| j¡ |  tj | j¡¡ |  tj | j	¡¡ t
| jdƒ$}tj | ¡ di ¡}W d   ƒ n1 sn0    Y  tj d¡rŠd}nd}|  ||¡ d S )NÚrbÚtestr   é   r   )rI   rJ   r5   r6   rK   r0   r3   rL   rM   r:   r>   r7   Ú_bootstrap_externalÚ_classify_pycÚreadÚenvironÚgetÚassertEqual)r@   ÚfpÚflagsZexpected_flagsr   r   r   Útest_source_date_epoch   s    
ÿ"z)PyCompileTestsBase.test_source_date_epochztest does not work with -Oc              	   C   sÐ   t j | jd¡}tj |¡}|d }t j |¡\}}t j |¡}|  	t j ||¡t j dd 
tjj¡¡¡ t|dƒ}| d¡ W d   ƒ n1 s”0    Y  t |¡ |  t j |¡¡ |  t j |¡¡ d S )Nz
foo.bar.pyr+   Ú__pycache__zfoo.bar.{}.pycr,   r-   )r0   r3   r4   r2   r7   r8   r9   ÚsplitrX   ru   ÚformatÚsysÚimplementationÚ	cache_tagr>   r?   rI   rJ   rK   rL   rM   )r@   Z
weird_pathr:   r6   ÚheadÚtailZpenultimate_tailrB   r   r   r   Útest_double_dot_no_clobber›   s"    þþ(
z-PyCompileTestsBase.test_double_dot_no_clobberc                 C   s   |   dtj| jdd¡ d S )Nzopt-2é   )Úoptimize)ÚassertInrI   rJ   r5   rG   r   r   r   Útest_optimization_path¯   s    z)PyCompileTestsBase.test_optimization_pathc                 C   sÄ   t j| jt jjd t| jdƒ$}tj 	| 
¡ di ¡}W d   ƒ n1 sJ0    Y  |  |d¡ t j| jt jjd t| jdƒ$}tj 	| 
¡ di ¡}W d   ƒ n1 sª0    Y  |  |d¡ d S )N)Úinvalidation_moderm   rn   ro   é   )rI   rJ   r5   ÚPycInvalidationModeÚCHECKED_HASHr>   r:   r7   rp   rq   rr   ru   ÚUNCHECKED_HASH)r@   rv   rw   r   r   r   Útest_invalidation_mode³   s$    þ
ÿ"þ
ÿ"z)PyCompileTestsBase.test_invalidation_modec              	   C   sº   t j t j t¡d¡}t ¡ ˆ}|  tj	|ddd¡ |  tj	|ddd¡ |  
| ¡ d¡ |  tj¡  tj	|ddd W d   ƒ n1 sŽ0    Y  W d   ƒ n1 s¬0    Y  d S )Nre   Fr‚   )rf   ÚquietTÚ r‡   )r0   r3   r4   rg   rh   r   ri   rj   rI   rJ   ru   ÚgetvaluerR   ÚPyCompileError)r@   rk   Ústderrr   r   r   Ú
test_quietÅ   s    
zPyCompileTestsBase.test_quietN)r%   r&   r'   rC   rH   rN   rT   ÚunittestZskipIfr0   r3   rL   rU   ÚisfilerV   rW   rY   r[   Úhasattrr\   r   rd   rl   rx   r|   rw   rƒ   r   r…   r‹   r‘   r   r   r   r   r)   5   s2    ÿ
ÿÿ
r)   c                   @   s   e Zd ZdS )ÚPyCompileTestsWithSourceEpochN©r%   r&   r'   r   r   r   r   r•   Ï   s   r•   T)Ú	metaclassr   c                   @   s   e Zd ZdS )Ú PyCompileTestsWithoutSourceEpochNr–   r   r   r   r   r˜   Ö   s   r˜   Fc                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚPyCompileCLITestCasec                 C   sf   t  ¡ | _tj | jd¡| _tj 	| j¡| _
t| jdƒ}| d¡ W d   ƒ n1 sX0    Y  d S )Nr*   r,   r-   )r.   r/   r2   r0   r3   r4   r5   r7   r8   r9   r:   r>   r?   )r@   rB   r   r   r   rC   ß   s
    
zPyCompileCLITestCase.setUpc                 C   s   t  | j¡ d S rD   )r   rF   r2   rG   r   r   r   rH   æ   s    zPyCompileCLITestCase.tearDownc                 O   sT   |r:|d dkr:d|v r:t jtjdddg|d  ¡ ddS tjddg|¢R i |¤ŽS )Nr   ú-Úinputú-mrI   T)r›   Úcapture_output)Ú
subprocessÚrunr|   Ú
executableÚencoder   Zassert_python_ok)r@   r   r   r   r   r   Úpycompilecmdé   s    
þz!PyCompileCLITestCase.pycompilecmdc                 G   s   t jddg|¢R Ž S )Nrœ   rI   )r   Zassert_python_failure)r@   r   r   r   r   Úpycompilecmd_failureó   s    z)PyCompileCLITestCase.pycompilecmd_failurec                 C   sR   | j d| jd}|  |jd¡ |  |jd¡ |  |jd¡ |  tj 	| j
¡¡ d S )Nrš   )r›   r   ó    )r¢   r5   ru   Ú
returncodeÚstdoutr   rK   r0   r3   rL   r:   )r@   Úresultr   r   r   Ú
test_stdinö   s
    zPyCompileCLITestCase.test_stdinc                 C   sR   |   | j| j¡\}}}|  |d¡ |  |d¡ |  |d¡ |  tj | j¡¡ d S )Nr   r¤   )r¢   r5   ru   rK   r0   r3   rL   r:   )r@   Úrcr¦   r   r   r   r   Útest_with_filesý   s
    z$PyCompileCLITestCase.test_with_filesc                 C   sN   t j t j t¡d¡}|  |¡\}}}|  |d¡ |  |d¡ |  d|¡ d S )Nzbadsyntax_3131.pyr‡   r¤   s   SyntaxError)r0   r3   r4   rg   rh   r£   ru   r„   )r@   Z
bad_syntaxr©   r¦   r   r   r   r   Útest_bad_syntax  s
    z$PyCompileCLITestCase.test_bad_syntaxc                 C   sR   t j t j t¡d¡}|  | j|¡\}}}|  |d¡ |  |d¡ |  d|¡ d S )Nzshould_not_exists.pyr‡   r¤   s   No such file or directory)	r0   r3   r4   rg   rh   r£   r5   ru   r„   )r@   Zshould_not_existsr©   r¦   r   r   r   r   Útest_file_not_exists  s
    z)PyCompileCLITestCase.test_file_not_existsN)r%   r&   r'   rC   rH   r¢   r£   r¨   rª   r«   r¬   r   r   r   r   r™   Ý   s   
r™   Ú__main__)r   Úimportlib.utilr7   r0   rI   rE   r^   rž   r|   r.   r’   rn   r   Ztest.supportr   r   r   ÚtypeZTestCaser   r)   r•   r˜   r™   r%   Úmainr   r   r   r   Ú<module>   s:   
 ýý6