o
    °ó®gØ¹  ã                   @   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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mZ d dlmZ zd dlmZ eƒ  dZW n eyf   dZY nw d dlmZ d dlmZ d d	lmZ d
dlmZ d
dlm Z  dd„ Z!dd„ Z"dd„ 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(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#ƒZ,G d$d%„ d%e,ej%e ddZ-G d&d'„ d'e,ej%e ddZ.e/d(kre 0¡  dS dS ))é    N)ÚmockÚ
skipUnless)ÚProcessPoolExecutor)Ú_check_system_limitsTF)Úsupport)Ú	os_helper)Úscript_helperé   )Úwithout_source_date_epoch)ÚSourceDateEpochTestMetac                 C   s   |sd}t jj| |dS )NÚ ©Úoptimization)Ú	importlibÚutilÚcache_from_source)ÚscriptÚopt© r   úJ/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_compileall.pyÚget_pyc%   s   r   c                    s   ‡ fdd„dD ƒS )Nc                    s   g | ]}t ˆ |ƒ‘qS r   )r   )Ú.0r   ©r   r   r   Ú
<listcomp>-   s    zget_pycs.<locals>.<listcomp>©r   r	   é   r   r   r   r   r   Úget_pycs,   s   r   c                 C   s    t  | ¡j}t  |¡j}||kS )z8Returns True if two files have the same inode (hardlink)N)ÚosÚstatÚst_ino)Z	filename1Ú	filename2Zinode1Zinode2r   r   r   Úis_hardlink0   s   r!   c                   @   s†  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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eed#ƒe d$¡d%d&„ ƒƒZd'd(„ Zeed#ƒe d$¡d)d*„ ƒƒZeed#ƒe d$¡e d+¡d,d-„ ƒƒƒZejd$d.d/e d+¡d0d1„ ƒƒZd2d3„ Zd4d5œd6d7„Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'e(j)dJdK„ ƒZ*d.S )LÚCompileallTestsBasec                 C   sÜ   t  ¡ | _tj | jd¡| _tj 	| j¡| _
t| jddd}| d¡ W d   ƒ n1 s.w   Y  tj | jd¡| _tj 	| j¡| _t | j| j¡ tj | jd¡| _t | j¡ tj | jd¡| _t | j| j¡ d S )	Nú_test.pyÚwúutf-8©Úencodingzx = 123
z	_test2.pyZ_subdirz	_test3.py)ÚtempfileÚmkdtempÚ	directoryr   ÚpathÚjoinÚsource_pathr   r   r   Úbc_pathÚopenÚwriteÚsource_path2Úbc_path2ÚshutilÚcopyfileZsubdirectoryÚmkdirÚsource_path3©ÚselfÚfiler   r   r   ÚsetUp9   s   
ÿzCompileallTestsBase.setUpc                 C   ó   t  | j¡ d S ©N©r3   Úrmtreer*   ©r8   r   r   r   ÚtearDownG   ó   zCompileallTestsBase.tearDownc                 C   sR   t j | jd¡| _t| jddd}| d¡ W d   ƒ d S 1 s"w   Y  d S )Nz_test_bad.pyr$   r%   r&   zx (
)r   r+   r,   r*   Úbad_source_pathr/   r0   r7   r   r   r   Úadd_bad_source_fileJ   s   "ÿz'CompileallTestsBase.add_bad_source_filec                 C   sh   t | jdƒ}| d¡}W d   ƒ n1 sw   Y  tt | j¡jƒ}t 	dt
jjd|d@ ¡}||fS )NÚrbé   ú<4sLLr   ì   ÿÿ )r/   r.   ÚreadÚintr   r   r-   Úst_mtimeÚstructÚpackr   r   ÚMAGIC_NUMBER)r8   r9   ÚdataÚmtimeZcomparer   r   r   Útimestamp_metadataO   s   ÿÿz&CompileallTestsBase.timestamp_metadatac              	   C   óJ   z	t  | jd¡ W n ttfy   |  d¡ Y nw |  t | j¡¡ d S )N)rG   rG   z0filesystem doesn't support timestamps near 2**32©	r   Úutimer-   ÚOverflowErrorÚOSErrorZskipTestÚ
assertTrueÚ
compileallÚcompile_filer?   r   r   r   Ú test_year_2038_mtime_compilationW   ó   ÿz4CompileallTestsBase.test_year_2038_mtime_compilationc              	   C   rQ   )N)ì         r[   z+filesystem doesn't support large timestampsrR   r?   r   r   r   Útest_larger_than_32_bit_times`   rZ   z1CompileallTestsBase.test_larger_than_32_bit_timesc                 C   sâ   t j d¡rt d¡‚t | j¡ | j|  	¡ Ž  t
| jdƒ}| ¡ t|ƒd… }W d  ƒ n1 s3w   Y  t
| jdƒ}| |¡ | |¡ W d  ƒ n1 sSw   Y  | j|  	¡ Ž  tj| jddd | j|  	¡ Ž  dS )	zOCheck that compileall recreates bytecode when the new metadata is
        used.ÚSOURCE_DATE_EPOCHzSOURCE_DATE_EPOCH is setrD   NÚwbFT©ÚforceÚquiet)r   ÚenvironÚgetÚunittestÚSkipTestÚ
py_compileÚcompiler-   ÚassertEqualrP   r/   r.   rH   Úlenr0   ÚassertNotEqualrW   Úcompile_dirr*   rV   )r8   Zmetadatar9   Úbcr   r   r   Úrecreation_checki   s   
ÿ
þz$CompileallTestsBase.recreation_checkc                 C   s   |   t dtjjdd¡¡ d S )NrF   r   r	   )rm   rK   rL   r   r   rM   r?   r   r   r   Ú
test_mtimey   s   
ÿzCompileallTestsBase.test_mtimec                 C   s   |   d¡ d S )Ns       )rm   r?   r   r   r   Útest_magic_number~   ó   z%CompileallTestsBase.test_magic_numberc                 C   s   | j | jfD ]}zt |¡ W q   Y q|  tj| jddd¡ |  tj 	| j ¡o1tj 	| j¡ ¡ t | j ¡ |  tj
| jddd¡ |  tj 	| j ¡oTtj 	| j¡¡ t | j ¡ t | j¡ |  ¡  |  tj| jddd¡ |  tj
| jddd¡ d S )NFTr_   r   )r.   r2   r   ÚunlinkrV   rW   rX   r-   r+   Úisfilerk   r*   rC   ÚassertFalserB   )r8   Úfnr   r   r   Útest_compile_files‚   s6   ÿÿÿÿÿÿz&CompileallTestsBase.test_compile_filesc                 C   s|   |   tj | j¡¡ t ¡ }|  t 	t
 | j¡¡¡ W d   ƒ n1 s%w   Y  |  | ¡ d¡ |  tj | j¡¡ d S )Nz&Compiling ([^WindowsPath|PosixPath].*))rs   r   r+   rr   r.   r   Úcaptured_stdoutrV   rW   rX   ÚpathlibÚPathr-   ÚassertRegexÚgetvalue)r8   Ústdoutr   r   r   Útest_compile_file_pathlike›   s   
ÿz.CompileallTestsBase.test_compile_file_pathlikec                 C   sP   |   tj | j¡¡ |  tjt 	| j
¡t 	d¡dd¡ |  tj | j¡¡ d S )NZ	ddir_pathr   )Úddirra   )rs   r   r+   rr   r.   rV   rW   rX   rw   rx   r-   r?   r   r   r   Útest_compile_file_pathlike_ddir£   s   þz3CompileallTestsBase.test_compile_file_pathlike_ddirc                 C   sž   t jjj| jgd |  tjdd¡ W d   ƒ n1 sw   Y  t jjj| jgd |  ¡  |  	tjdddd¡ W d   ƒ d S 1 sHw   Y  d S )N©r+   r   ©ra   FT)Úskip_curdirr`   ra   )
ÚtestÚtest_importlibr   Zimport_stater*   rV   rW   Úcompile_pathrC   rs   r?   r   r   r   Útest_compile_pathª   s   ÿ

ÿ"þz%CompileallTestsBase.test_compile_pathc                 C   s|   t j | jd¡}t j |d¡}t  |¡ t|dƒ W d   ƒ n1 s$w   Y  t |¡ |  t j 	t j |d¡¡¡ d S )NrN   r9   r^   Ú__pycache__)
r   r+   r,   r*   r5   r/   rW   rX   rs   Úexists)r8   Zdata_dirZ	data_filer   r   r   Útest_no_pycache_in_non_package³   s   
ÿ
 z2CompileallTestsBase.test_no_pycache_in_non_packagec                 C   sN   |   ¡  t t ¡ ¡ |  t | j¡¡ W d   ƒ d S 1 s w   Y  d S r<   )	rC   Ú
contextlibÚredirect_stdoutÚioÚStringIOrs   rW   rX   rB   r?   r   r   r   Ú#test_compile_file_encoding_fallbackÀ   s   "ÿz7CompileallTestsBase.test_compile_file_encoding_fallbackc                 C   sŠ   d\}}t j| jd|d tjj| j|d}|  tj	 
|¡¡ tjj| j|d}|  tj	 
|¡¡ tjj| j|d}|  tj	 
|¡¡ d S )NT)r	   r	   )r   r   ©ra   Úoptimizer   )rW   rk   r*   r   r   r   r-   rV   r   r+   rr   r1   r6   )r8   r   r   ÚcachedZcached2Zcached3r   r   r   Útest_optimizeÇ   s   
ÿ
ÿ
ÿz!CompileallTestsBase.test_optimizec                 C   s‚   |   tj | j¡¡ t ¡ }t t	 
| j¡¡ W d   ƒ n1 s"w   Y  | ¡  ¡ d }|  |d¡ |  tj | j¡¡ d S )Nr   z$Listing ([^WindowsPath|PosixPath].*))rs   r   r+   rr   r.   r   rv   rW   rk   rw   rx   r*   rz   Ú
splitlinesry   rV   )r8   r{   Úliner   r   r   Útest_compile_dir_pathlikeÖ   s   
ÿz-CompileallTestsBase.test_compile_dir_pathlikeúrequires multiprocessingz&concurrent.futures.ProcessPoolExecutorc                 C   ó"   t j| jddd |  |j¡ d S ©NTé   ©ra   Úworkers©rW   rk   r*   rV   Úcalled©r8   Ú	pool_mockr   r   r   Útest_compile_pool_calledÞ   ó   z,CompileallTestsBase.test_compile_pool_calledc                 C   sB   |   td¡ tj| jdd W d   ƒ d S 1 sw   Y  d S )Nz%workers must be greater or equal to 0éÿÿÿÿ)rš   )ZassertRaisesRegexÚ
ValueErrorrW   rk   r*   r?   r   r   r   Ú!test_compile_workers_non_positiveä   s
   ÿ"þz5CompileallTestsBase.test_compile_workers_non_positivec                 C   s,   t j| jddd |  |jd d d ¡ d S )NTr   r™   r	   Úmax_workers)rW   rk   r*   rh   Ú	call_argsr   r   r   r   Útest_compile_workers_cpu_counté   s   z2CompileallTestsBase.test_compile_workers_cpu_countzcompileall.compile_filec                 C   s,   t j| jdd |  |j¡ |  |j¡ d S )NTr€   )rW   rk   r*   rs   rœ   rV   )r8   Úcompile_file_mockrž   r   r   r   Útest_compile_one_workerï   s   z+CompileallTestsBase.test_compile_one_workerN©Únewc                 C   r–   r—   r›   )r8   r§   r   r   r   Ú$test_compile_missing_multiprocessing÷   r    z8CompileallTestsBase.test_compile_missing_multiprocessingc                 C   s´   d}| j }td|d ƒD ]}tj |d|› ¡}tj |d¡}t |¡ t | j|¡ qt	j
 |¡}tj| j d|d d |  tj |¡¡ tj| j d|d |  tj |¡¡ d S )Né   r	   Zdir_z	script.pyT)ra   Ú	maxlevels)r*   Úranger   r+   r,   r5   r3   r4   r-   r   r   r   rW   rk   rs   rr   rV   )r8   Zdepthr+   ÚiÚsourceZpyc_filenamer   r   r   Útest_compile_dir_maxlevelsý   s   
z.CompileallTestsBase.test_compile_dir_maxlevelsT)Úparallelc                C   s  ddg}| j }g }|D ]}tj ||¡}t |¡ t |dd¡ | t |dd¡¡ qtj	| j d||r5dnd	d
 |  
|¡ |D ]H}|  
| | j ¡|¡ tj |¡}|t| j tj ƒd… }	t |¡\}
}
}tj ||	¡}tjj |¡}|  |j|¡ |  d|› dt |¡¡ q@dS )z@Recursive compile_dir ddir must contain package paths; bpo39769.r‚   ÚfooÚ__init__r   Úmodzdef fn(): 1/0
fn()
Tr   r	   )ra   r}   rš   Nú")r*   r   r+   r,   r5   r   Úmake_scriptÚappendrW   rk   rV   Ú
startswithr   r   r   ri   ÚsepÚassert_python_failurer‚   rƒ   Zget_code_from_pycrh   Úco_filenameÚassertInÚfsdecode)r8   r}   r²   Úfullpathr+   ZmodsZsubdirrµ   ZmodcodeÚmodpathÚ_ÚerrÚexpected_inZmod_code_objr   r   r   Ú_test_ddir_only  s2   
ÿ
þ
øz#CompileallTestsBase._test_ddir_onlyc                 C   ó   | j dddS )ú=Recursive compile_dir ddir= contains package paths; bpo39769.ú
<a prefix>F©r}   r²   N©rÄ   r?   r   r   r   Útest_ddir_only_one_worker'  rp   z-CompileallTestsBase.test_ddir_only_one_workerc                 C   rÅ   )rÆ   rÇ   TrÈ   NrÉ   r?   r   r   r   Útest_ddir_multiple_workers+  rp   z.CompileallTestsBase.test_ddir_multiple_workersc                 C   rÅ   )ú?Recursive compile_dir ddir='' contains package paths; bpo39769.r   FrÈ   NrÉ   r?   r   r   r   Útest_ddir_empty_only_one_worker/  rp   z3CompileallTestsBase.test_ddir_empty_only_one_workerc                 C   rÅ   )rÌ   r   TrÈ   NrÉ   r?   r   r   r   Ú test_ddir_empty_multiple_workers3  rp   z4CompileallTestsBase.test_ddir_empty_multiple_workersc           
      C   sÈ   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡}tj 	|¡}t jj| jg|d d… ¢R Ž }t
j|d|d t |¡\}}}t jj|dd … Ž }	|  |	t|t ¡ d¡ |  |t|t ¡ d¡ d S )N©r‚   ÚbuildÚrealr+   r‚   ú1 / 0r   T)ra   Ústripdirr&   ©r   r+   r,   r*   Úmakedirsr   r·   r   r   r   rW   rk   r»   r½   ÚstrÚsysÚgetdefaultencodingÚassertNotIn)
r8   r¿   r+   r   rl   rÓ   ÚrcÚoutrÂ   rÃ   r   r   r   Útest_strip_only7  s"   
þþz#CompileallTestsBase.test_strip_onlyc           
      C   sš   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡}tj 	|¡}d}t
j|d|d t |¡\}}}t jj|| jg|¢R Ž }	|  |	t|t ¡ d¡ d S )NrÏ   r‚   rÒ   ú/fooT)ra   Ú
prependdirr&   )r   r+   r,   r*   rÕ   r   r·   r   r   r   rW   rk   r»   r½   rÖ   r×   rØ   )
r8   r¿   r+   r   rl   rÞ   rÚ   rÛ   rÂ   rÃ   r   r   r   Útest_prepend_onlyJ  s   
þz%CompileallTestsBase.test_prepend_onlyc                 C   sÖ   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡}tj 	|¡}t jj| jg|d d… ¢R Ž }d}t
j|d||d t |¡\}}}	t jj|g|dd … ¢R Ž }
|  |
t|	t ¡ d¡ |  |t|	t ¡ d¡ d S )	NrÏ   r‚   rÒ   r   rÝ   T)ra   rÓ   rÞ   r&   rÔ   ©r8   r¿   r+   r   rl   rÓ   rÞ   rÚ   rÛ   rÂ   rÃ   r   r   r   Útest_strip_and_prependY  s(   
ÿþþz*CompileallTestsBase.test_strip_and_prependc                 C   sz   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡ |  t¡ t	j
|ddddd W d   ƒ d S 1 s6w   Y  d S )N)r‚   rÐ   rÑ   r+   r}   r‚   rÒ   Tz/barrÝ   )ra   r}   rÓ   rÞ   )r   r+   r,   r*   rÕ   r   r·   ÚassertRaisesr¢   rW   rk   )r8   r¿   r+   r   r   r   Útest_strip_prepend_and_ddirn  s   

ÿ"ÿz/CompileallTestsBase.test_strip_prepend_and_ddirc              
   C   s²   t  | jdd¡}g }dD ]}| tjj||d¡ qddgddgddgg d¢g}|D ],}tj|d	|d
 |D ]}|  	t
j || ¡¡ z	t
 || ¡ W q6 tyU   Y q6w q*d S )NÚtest_optimizationúa = 0©r   r	   r   r¬   r   r   r	   r   r   TrŽ   )r   r·   r*   r¸   r   r   r   rW   rX   rV   r   r+   rr   rq   Ú	Exception)r8   r   rl   Ú	opt_levelÚtest_combinationsÚopt_combinationr   r   r   Ú!test_multiple_optimization_levelsw  s.   þ
ÿÿÿüýz5CompileallTestsBase.test_multiple_optimization_levelsc           
      C   sú   t j | jddd¡}t j | jddd¡}t j | jddd¡}t  |¡ t  |¡ t  |¡ t |dd¡}t |dd¡}t j |d	¡}t j |d
¡}t  ||¡ t  ||¡ tj	 
|¡}tj	 
|¡}	tj|d|d |  t j |¡¡ |  t j |	¡¡ d S )Nr‚   ÚdirÚallowedÚsymlinksÚ
prohibitedÚtest_allowedrå   Útest_prohibitedútest_allowed.pyútest_prohibited.pyT)ra   Úlimit_sl_dest)r   r+   r,   r*   rÕ   r   r·   Úsymlinkr   r   r   rW   rk   rV   rr   rs   ©
r8   Zallowed_pathZsymlinks_pathZprohibited_pathZallowed_scriptZprohibited_scriptZallowed_symlinkZprohibited_symlinkZ
allowed_bcZprohibited_bcr   r   r   Útest_ignore_symlink_destinationŠ  s"   


z3CompileallTestsBase.test_ignore_symlink_destination)+Ú__name__Ú
__module__Ú__qualname__r:   r@   rC   rP   rY   r\   rm   rn   ro   ru   r|   r~   r…   rˆ   r   r‘   r”   r   Ú_have_multiprocessingr   ÚpatchrŸ   r£   r¦   r¨   r«   r±   rÄ   rÊ   rË   rÍ   rÎ   rÜ   rß   rá   rã   rë   r   Úskip_unless_symlinkr÷   r   r   r   r   r"   7   sZ    				r"   c                   @   ó   e Zd ZdS )ÚCompileallTestsWithSourceEpochN©rø   rù   rú   r   r   r   r   rÿ   ¤  ó    rÿ   )Ú	metaclassZsource_date_epochc                   @   rþ   )Ú!CompileallTestsWithoutSourceEpochNr   r   r   r   r   r  «  r  r  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚEncodingTestzTIssue 6716: compileall should escape source code when printing errors
    to stdout.c                 C   sf   t  ¡ | _tj | jd¡| _t| jddd}| d¡ | d¡ W d   ƒ d S 1 s,w   Y  d S )Nr#   r$   r%   r&   z# -*- coding: utf-8 -*-
u   print u"â‚¬"
)	r(   r)   r*   r   r+   r,   r-   r/   r0   r7   r   r   r   r:   ¶  s   

"þzEncodingTest.setUpc                 C   r;   r<   r=   r?   r   r   r   r@   ½  rA   zEncodingTest.tearDownc                 C   s<   zt j}tjt ¡ ddt _t | j¡ W |t _d S |t _w )NÚasciir&   )r×   r{   r‹   ÚTextIOWrapperÚBytesIOrW   rk   r*   )r8   Zorig_stdoutr   r   r   Ú
test_errorÀ  s
   zEncodingTest.test_errorN)rø   rù   rú   Ú__doc__r:   r@   r  r   r   r   r   r  ²  s
    r  c                   @   s¬  e Zd ZdZe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d„ Zedd„ ƒZdd„ Zddg fdddgfdddgffD ]\ZZZeefd d!„Zeeƒ d"e < qFd#d$„ Zd%d&„ Zed'd(„ ƒZd)d*„ Zd+d,„ Zejd-d.„ ƒZd/d0„ Zd1d2„ Zd3d4„ 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„ Z2ejdSdT„ ƒZ3dUdV„ Z4dWdX„ Z5dYS )ZÚCommandLineTestsBasezTest compileall's CLI.c                 C   sÖ   t tjjtjƒD ][}d}t |¡d }|d }z=z| ¡ s#| ¡  d}|j	ddd W n t
yE   d}Y W t t|ƒ¡ |rC| ¡   qfw W t t|ƒ¡ |rT| ¡  qt t|ƒ¡ |rc| ¡  w w d}|| _d S )NFr†   ztest.tryTz# for test_compileallr%   r&   )Úfilterr   r+   Úisdirr×   rw   rx   Úis_dirr5   Ú
write_textrU   r   rq   rÖ   ÚrmdirÚ_sys_path_writable)Úclsr+   Zdirectory_createdr*   Zsys_path_writabler   r   r   Ú
setUpClassÌ  s8   €úÿ€þ
ÿ
zCommandLineTestsBase.setUpClassc                 C   s   | j st d¡‚d S )Nz(not all entries on sys.path are writable)r  rd   re   r?   r   r   r   Ú_skip_if_sys_path_not_writableâ  s   
ÿz3CommandLineTestsBase._skip_if_sys_path_not_writablec                 C   s   g t  ¡ ¢d‘d‘d‘|¢S )Nz-Sú-mrW   )r   Z!optim_args_from_interpreter_flags)r8   Úargsr   r   r   Ú_get_run_argsæ  s   
ÿÿÿþz"CommandLineTestsBase._get_run_argsc                 O   s4   t j|  |¡i |¤ddi¤Ž\}}}|  d|¡ |S )NÚPYTHONIOENCODINGr%   ó    )r   Úassert_python_okr  rh   ©r8   r  Zenv_varsrÚ   rÛ   rÂ   r   r   r   ÚassertRunOKë  s   ÿÿþz CommandLineTestsBase.assertRunOKc                 O   s.   t j|  |¡i |¤ddi¤Ž\}}}|||fS )Nr  r%   )r   r»   r  r  r   r   r   ÚassertRunNotOKò  s   ÿÿþ
z#CommandLineTestsBase.assertRunNotOKc                 C   ó"   t j |¡}|  tj |¡¡ d S r<   )r   r   r   rV   r   r+   r‡   ©r8   rt   r+   r   r   r   ÚassertCompiledø  ó   z#CommandLineTestsBase.assertCompiledc                 C   r  r<   )r   r   r   rs   r   r+   r‡   r  r   r   r   ÚassertNotCompiledü  r   z&CommandLineTestsBase.assertNotCompiledc                 C   sr   t  ¡ | _|  tj| j¡ tj | jd¡| _	t 
| j	¡ tj | j	d¡| _t | j	dd¡| _t | j	dd¡| _d S )Nr³   r†   r´   r   Zbar)r(   r)   r*   Z
addCleanupr   r>   r   r+   r,   Úpkgdirr5   Úpkgdir_cachedirr   r·   ÚinitfnÚbarfnr?   r   r   r   r:      s   
zCommandLineTestsBase.setUpc                 C   sL   |   ¡  t | jdd¡}| j| jd |  |¡ |  | j¡ |  | j¡ d S )NÚbazr   ©Ú
PYTHONPATH)	r  r   r·   r*   r  r  r!  r$  r%  )r8   Úbazfnr   r   r   Útest_no_args_compiles_path
  s   
z/CommandLineTestsBase.test_no_args_compiles_pathc                 C   sª   |   ¡  t | jdd¡}| j| jd tj |¡}t 	|t
 
¡ d fd ¡ t |¡j}| j| jd t |¡j}|  ||¡ | jd| jd t |¡j}|  ||¡ d S )Nr&  r   r'  é<   r   ú-f)r  r   r·   r*   r  r   r   r   r   rS   Útimer   rJ   rh   rj   )r8   r)  ÚpycpathrO   Úmtime2r   r   r   Ú test_no_args_respects_force_flag  s   z5CommandLineTestsBase.test_no_args_respects_force_flagc                 C   sR   |   ¡  t | jdd¡ | j| jd}|  d|¡ | jd| jd}|  d|¡ d S )Nr&  r   r'  s   Listing ú-q)r  r   r·   r*   r  r½   rÙ   ©r8   Znoisyra   r   r   r   Ú test_no_args_respects_quiet_flag%  s   z5CommandLineTestsBase.test_no_args_respects_quiet_flagZnormalÚpycr   z	opt-1.pycú-OZdoubleoptimizez	opt-2.pycz-OOc                    s~   t j|ddd| jg Ž  |  tj | j¡¡ t‡ fdd„dD ƒƒ}|  	tt 
| j¡ƒ|¡ |  ‡ fdd„t 
| j¡D ƒ¡ d S )	Nr  rW   r1  c                 3   s     | ]}|  tjjˆ ¡V  qd S r<   )Úformatr×   ÚimplementationÚ	cache_tag)r   Úbase©Úextr   r   Ú	<genexpr>9  s   € ÿz)CommandLineTestsBase.f.<locals>.<genexpr>)z__init__.{}.{}z	bar.{}.{}c                    s   g | ]	}|  ˆ ¡r|‘qS r   )Úendswith)r   rt   r:  r   r   r   =  s    
ÿz*CommandLineTestsBase.f.<locals>.<listcomp>)r   r  r"  rV   r   r+   r‡   r#  Úsortedrh   Úlistdirrs   )r8   r;  ÚswitchÚexpectedr   r:  r   Úf4  s   ÿÿ$zCommandLineTestsBase.fZtest_pep3147_paths_c                 C   sL   |   dd| j¡ |  tj | j¡¡ tg d¢ƒ}|  tt 	| j¡ƒ|¡ d S )Nz-br1  )ú__init__.pyz__init__.pyczbar.pyzbar.pyc)
r  r"  rs   r   r+   r‡   r#  r>  rh   r?  )r8   rA  r   r   r   Útest_legacy_pathsA  s   z&CommandLineTestsBase.test_legacy_pathsc                 C   s|   |   d| j¡ |  tj | j¡¡ tj | jd¡}|  tj |¡¡ |   d| j¡ |  tj | j¡¡ |  tj |¡¡ d S )Nr1  r†   )	r  r"  rV   r   r+   r‡   r#  r,   rs   )r8   Zcachecachedirr   r   r   Útest_multiple_runsK  s   z'CommandLineTestsBase.test_multiple_runsc                 C   s”   |   d| j¡ tj | j¡}t |t ¡ d fd ¡ t 	|¡j
}|   d| j¡ t 	|¡j
}|  ||¡ |   dd| j¡ t 	|¡j
}|  ||¡ d S )Nr1  r+  r   r,  )r  r"  r   r   r   r%  r   rS   r-  r   rJ   rh   rj   )r8   r.  rO   r/  r   r   r   Ú
test_forceX  s   zCommandLineTestsBase.test_forcec                 C   s’   t j | jd¡}t  |¡ t |dd¡}t |dd¡}|  dd| j¡ |  |¡ |  	t j 
t j |d¡¡¡ |  d| j¡ |  |¡ |  |¡ d S )NÚspamr´   r   Úhamr1  z-lr†   )r   r+   r,   r"  r5   r   r·   r  r!  rs   r‡   r  )r8   Ú
subpackageÚ	subinitfnÚhamfnr   r   r   Útest_recursion_controlh  s   


z+CommandLineTestsBase.test_recursion_controlc           	      C   sV  t j | jd¡}t j |d¡}t j |d¡}|||fD ]}t |¡ qt j |d¡}t |dd¡}t |dd¡}t |dd¡}|  dd| j¡ |  |¡ |  	t j 
t j |d	¡¡¡ |  dd
| j¡ |  |¡ |  |¡ |  |¡ |  dd| j¡ |  |¡ |  |¡ |  |¡ |  |¡ |  dd| j¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )NrG  rH  ZeggsrC  r   Zeggr1  z-r 0r†   z-r 1z-r 2z-r 5)r   r+   r,   r"  r   Úmake_pkgr·   r  r!  rs   r‡   r  )	r8   rI  Zsubpackage2Zsubpackage3ÚpkgrJ  rK  ZspamfnZeggfnr   r   r   Útest_recursion_limitt  s8   
ÿ









z)CommandLineTestsBase.test_recursion_limitc              	   C   st   t j | jd¡}t |¡ t  dt j |d¡¡ t  dt j |d¡¡ |  d| j¡ |  t j | jdddd¡¡ d S )NrG  Ú.ZevilZevil2r1  rC  )	r   r+   r,   r"  r   rM  rõ   r  r  )r8   rN  r   r   r   Útest_symlink_loop–  s   


ÿz&CommandLineTestsBase.test_symlink_loopc                 C   s6   |   | j¡}|   d| j¡}|  d|¡ |  d|¡ d S )Nr1  r  )r  r"  rj   rh   r2  r   r   r   Ú
test_quiet¤  s   zCommandLineTestsBase.test_quietc                 C   sT   t  | jdd¡ |  d| j¡\}}}|  d| j¡\}}}|  d|¡ |  d|¡ d S )NÚcrunchyfrogú
bad(syntaxr1  z-qqr  )r   r·   r"  r  rj   rh   )r8   rÁ   ra   Zsilentr   r   r   Útest_silentª  s
   z CommandLineTestsBase.test_silentc                 C   s.   |   ddd| j¡ |  | j¡ |  | j¡ d S )Nr1  z-xz
ba[^\\/]*$)r  r"  r!  r%  r  r$  r?   r   r   r   Útest_regexp±  s   z CommandLineTestsBase.test_regexpc                 C   sv   t j | jd¡}t  |¡ t |dd¡}t |dd¡}|  d| j|¡ |  	| j
¡ |  	| j¡ |  	|¡ |  	|¡ d S )NZfoo2r´   r   Úbar2r1  )r   r+   r,   r*   r5   r   r·   r  r"  r  r$  r%  )r8   Zpkgdir2Zinit2fnÚbar2fnr   r   r   Útest_multiple_dirs¶  s   

z'CommandLineTestsBase.test_multiple_dirsc                 C   s8   t  | jdd¡ |  ddd| j¡\}}}|  |d¡ d S )NrS  rT  r1  ú-dÚdinsdaleó   File "dinsdale)r   r·   r"  r  ry   ©r8   rÚ   rÛ   rÂ   r   r   r   Útest_d_compile_errorÁ  s   z)CommandLineTestsBase.test_d_compile_errorc                 C   s„   t  | jdd¡}|  ddd| j¡ t  | jdd¡}tj |¡}t |tj	 
| jd¡¡ t |¡ t j|d	d
\}}}|  |d¡ d S )Nr&  zraise Exceptionr1  rZ  r[  Úbingz
import bazzbaz.pycF)Ú
__isolatedr\  )r   r·   r"  r  r   r   r   r   Úrenamer+   r,   Úremover»   ry   )r8   r)  rt   r4  rÚ   rÛ   rÂ   r   r   r   Útest_d_runtime_errorÆ  s   
z)CommandLineTestsBase.test_d_runtime_errorc                 C   sZ   |   dtj | jd¡| j¡\}}}|  |d¡ |  |d¡ |  tj 	t
j | j¡¡¡ d S )Nú-iÚ
nosuchfiles   rror.*nosuchfiles	   Traceback)r  r   r+   r,   r*   r"  ry   ZassertNotRegexrs   r‡   r   r   r   r#  r]  r   r   r   Útest_include_bad_fileÐ  s   
ÿÿz*CommandLineTestsBase.test_include_bad_filec                 C   sø   t  | jdd¡}t  | jdd¡}t  | jdd¡}t  | jdd¡}ttj | jd¡ddd	$}| tj | jd
¡tj	 ¡ | tj | jd¡tj	 ¡ W d   ƒ n1 sTw   Y  |  
dtj | jd¡|¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )NÚf1r   Úf2Úf3Úf4Úl1r$   r%   r&   úf1.pyúf2.pyrd  )r   r·   r"  r/   r   r+   r,   r*   r0   Úlinesepr  r  r!  ©r8   rg  rh  ri  rj  rk  r   r   r   Útest_include_file_with_argØ  s   þ


z/CommandLineTestsBase.test_include_file_with_argc                 C   sÚ   t  | jdd¡}t  | jdd¡}t  | jdd¡}t  | jdd¡}ttj | jd¡ddd	}| tj | jd
¡tj	 ¡ W d   ƒ n1 sFw   Y  |  
dtj | jd¡¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )Nrg  r   rh  ri  rj  rk  r$   r%   r&   rm  rd  )r   r·   r"  r/   r   r+   r,   r*   r0   rn  r  r!  r  ro  r   r   r   Útest_include_file_no_argæ  s   ÿ


z-CommandLineTestsBase.test_include_file_no_argc                 C   s¦   t  | jdd¡}t  | jdd¡}t  | jdd¡}t  | jdd¡}t j|  d¡ddg Ž }|j |tj  	d	¡¡ t  
|¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )
Nrg  r   rh  ri  rj  r   rd  ú-r  )r   r·   r"  Zspawn_pythonr  Ústdinr0   r   rn  ÚencodeZkill_pythonr!  r  )r8   rg  rh  ri  rj  Úpr   r   r   Útest_include_on_stdinó  s   



z*CommandLineTestsBase.test_include_on_stdinc                 C   s\   t  | jdd¡}|  d| j|| j¡\}}}|  |d¡ |  |¡ |  | j¡ |  | j¡ d S )Nr_  zsyntax(errorre  s   rror)	r   r·   r"  r  r$  r%  ry   r!  r  )r8   ZbingfnrÚ   rÛ   rÂ   r   r   r   Ú!test_compiles_as_much_as_possible   s   

ÿ
z6CommandLineTestsBase.test_compiles_as_much_as_possiblec                 C   s   |   d¡}|  |d¡ d S )NZbadfilenames   Can't list 'badfilename')r  ry   )r8   rÛ   r   r   r   Ú!test_invalid_arg_produces_message	  s   
z6CommandLineTestsBase.test_invalid_arg_produces_messagec                 C   sä   t  | jdd¡ tj tj | jd¡¡}|  	d| j¡ t
|dƒ}| ¡ }W d   ƒ n1 s/w   Y  |  t |dd… d¡d	¡ |  	d
| j¡ t
|dƒ}| ¡ }W d   ƒ n1 s]w   Y  |  t |dd… d¡d¡ d S )Nrg  r   rl  z --invalidation-mode=checked-hashrD   é   é   Úlittler¬   z"--invalidation-mode=unchecked-hashr	   )r   r·   r"  r   r   r   r   r+   r,   r  r/   rH   rh   rI   Ú
from_bytes)r8   r4  ÚfprN   r   r   r   Útest_pyc_invalidation_mode  s   ÿ
ÿ
ÿ z/CommandLineTestsBase.test_pyc_invalidation_moder•   c                 C   s–   t  | jdd¡}g }tdƒD ]#}tj | jd |¡¡}t |¡ t  |dd¡}| 	t  |dd¡¡ q|  
| jdd¡ |  |¡ |D ]}|  |¡ qAd S )NrW  r   r˜   zfoo{}r´   z-jÚ0)r   r·   r*   r®   r   r+   r,   r6  r5   r¸   r  r  )r8   rX  ÚfilesÚsuffixr"  rt   r9   r   r   r   Útest_workers  s   

ÿz!CommandLineTestsBase.test_workerszcompileall.compile_dirc                 C   sh   t jdtj| jdgd t ¡  |  |j¡ |  	|j
d d d¡ W d   ƒ d S 1 s-w   Y  d S )Nzsys.argvz-j0r©   r¡   rš   r   )r   rü   r×   Ú
executabler*   rW   ÚmainrV   rœ   rh   r¥   )r8   rk   r   r   r   Útest_workers_available_cores)  s   ÿ"üz1CommandLineTestsBase.test_workers_available_coresc                 C   sÖ   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡}tj 	|¡}t jj| jg|d d… ¢R Ž }d}|  
d|d||¡ t |¡\}}}	t jj|g|dd … ¢R Ž }
|  |
t|	t ¡ d¡ |  |t|	t ¡ d¡ d S )	NrÏ   r‚   rÒ   r   rÝ   z-sz-pr&   )r   r+   r,   r*   rÕ   r   r·   r   r   r   r  r»   r½   rÖ   r×   rØ   rÙ   rà   r   r   r   rá   1  s$   
þþz+CommandLineTestsBase.test_strip_and_prependc              
   C   sÚ   t j | jd¡}t  |¡ t |dd¡}g }dD ]}| tj	j
||d¡ qddgddgddgg d	¢g}|D ]4}| j|gd
d„ |D ƒ¢R Ž  |D ]!}|  t j |t|ƒ ¡¡ z	t  || ¡ W qH tyi   Y qHw q6d S )NZoptimizationsrä   rå   ræ   r   r  Ú1Ú2)r  r†  r‡  c                 s   s    | ]	}d t |ƒ V  qdS )z-oN)rÖ   )r   Únr   r   r   r<  T  s   € zICommandLineTestsBase.test_multiple_optimization_levels.<locals>.<genexpr>)r   r+   r,   r*   rÕ   r   r·   r¸   r   r   r   r  rV   rr   rI   rq   rç   )r8   r+   r   rl   rè   ré   rê   r   r   r   rë   E  s6   
þ
ÿýÿüþz6CommandLineTestsBase.test_multiple_optimization_levelsc           
      C   sø   t j | jddd¡}t j | jddd¡}t j | jddd¡}t  |¡ t  |¡ t  |¡ t |dd¡}t |dd¡}t j |d	¡}t j |d
¡}t  ||¡ t  ||¡ tj	 
|¡}tj	 
|¡}	|  |d|¡ |  t j |¡¡ |  t j |	¡¡ d S )Nr‚   rì   rí   rî   rï   rð   rå   rñ   rò   ró   z-e)r   r+   r,   r*   rÕ   r   r·   rõ   r   r   r   r  rV   rr   rs   rö   r   r   r   r÷   \  s"   


z4CommandLineTestsBase.test_ignore_symlink_destinationc                 C   s   |   | jdd¡ d S )Nú-o 1ú--hardlink-dupes)r  r*   r?   r   r   r   Útest_hardlink_bad_argsu  s   z+CommandLineTestsBase.test_hardlink_bad_argsc              
   C   sî   dD ]r}t  ¡ d}| j|dN t |dd¡}t|ƒ}g d¢}|r&| d¡ | j|g|¢R Ž  |  t	|d |d ƒ|¡ |  t	|d |d	 ƒ|¡ |  t	|d |d	 ƒ|¡ W d   ƒ n1 s`w   Y  W d   ƒ q1 sow   Y  qd S )
N)TF©Údedupr   rå   )r1  z-o 0r‰  z-o 2rŠ  r   r	   r   )
r(   ÚTemporaryDirectoryÚsubTestr   r·   r   r¸   r  rh   r!   )r8   r  r+   r   Úpycsr  r   r   r   Útest_hardlinkz  s    

õ€ÿÿz"CommandLineTestsBase.test_hardlinkN)6rø   rù   rú   r	  Úclassmethodr  r  r  r  r  r  r!  r:   r*  r
   r0  r3  Únamer;  r@  rB  ÚlocalsrD  rE  rF  rL  rO  r   rý   rQ  rR  rU  rV  rY  r^  rc  rf  rp  rq  rv  rw  rx  r~  r   rû   r‚  r   rü   r…  rá   rë   r÷   r‹  r‘  r   r   r   r   r
  É  sh    

	


ý

"

	


r
  c                   @   rþ   )ÚCommandLineTestsWithSourceEpochNr   r   r   r   r   r•    r  r•  c                   @   rþ   )ÚCommandLineTestsNoSourceEpochNr   r   r   r   r   r–  —  r  r–  c                   @   s’   e Zd Zdd„ Zejdd„ ƒZd#dd„Zdd	d
dœdd„Zdd„ Z	d$dd„Z
dd„ Zdd„ Zd$dd„Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )%ÚHardlinkDedupTestsBasec                 C   s
   d | _ d S r<   r   r?   r   r   r   r:   ¢  s   
zHardlinkDedupTestsBase.setUpc                 c   sB    t  ¡ }|| _|V  d | _W d   ƒ d S 1 sw   Y  d S r<   )r(   rŽ  r+   )r8   r+   r   r   r   Útemporary_directory¥  s   €
"ýz*HardlinkDedupTestsBase.temporary_directoryr   c                 C   s   t  | j||¡S r<   )r   r·   r+   )r8   Úcoder“  r   r   r   r·   ¬  rA   z"HardlinkDedupTestsBase.make_scriptTr   F)r  r   r`   c                C   s   t j| jd|||d d S )NT)ra   r   Úhardlink_dupesr`   )rW   rk   r+   )r8   r  r   r`   r   r   r   rk   ¯  s   
ÿz"HardlinkDedupTestsBase.compile_dirc              	   C   sÈ   |   ¡ V |  d¡ |  t¡ tj| jdddd W d   ƒ n1 s$w   Y  |  t¡ tj| jdddgdd W d   ƒ n1 sEw   Y  W d   ƒ d S W d   ƒ d S 1 s]w   Y  d S )NÚpassTr   )ra   r   rš  )r˜  r·   râ   r¢   rW   rk   r+   r?   r   r   r   Útest_bad_args³  s   

ÿÿÿýû"ûz$HardlinkDedupTestsBase.test_bad_argsc                 C   s4   g }|r	|  d¡ |  d¡ |r|  d¡ d |¡S )Nz'module docstring'zx = 1zassert x == 1Ú
)r¸   r,   )r8   Ú	docstringÚ	assertionÚlinesr   r   r   Úcreate_codeÁ  s   



z"HardlinkDedupTestsBase.create_codec                 c   s4    dD ]}dD ]}| j ||d}|||fV  qqd S )N)FT©rž  rŸ  )r¡  )r8   rž  rŸ  r™  r   r   r   Ú
iter_codesÊ  s   €þÿz!HardlinkDedupTestsBase.iter_codesc              
   C   sÔ   |   ¡ D ]c\}}}| j||dO |  ¡ ; |  |¡}t|ƒ}| jdd |  t|d |d ƒ¡ |  t|d |d ƒ¡ |  t|d |d ƒ¡ W d   ƒ n1 sSw   Y  W d   ƒ q1 sbw   Y  qd S )Nr¢  FrŒ  r   r	   r   )r£  r  r˜  r·   r   rk   rs   r!   )r8   r™  rž  rŸ  r   r  r   r   r   Útest_disabledÐ  s   

ú€ÿÿz$HardlinkDedupTestsBase.test_disabledc                 C   sf   t |ƒ}|  t|d |d ƒ| ¡ |  t|d |d ƒ| o!| ¡ |  t|d |d ƒ| ¡ d S )Nr   r	   r   )r   rh   r!   )r8   r   rž  rŸ  r  r   r   r   Úcheck_hardlinksÜ  s   ÿ
ÿÿz&HardlinkDedupTestsBase.check_hardlinksc              
   C   sŽ   |   ¡ D ]@\}}}| j||d, |  ¡  |  |¡}|  ¡  |  |||¡ W d   ƒ n1 s0w   Y  W d   ƒ q1 s?w   Y  qd S )Nr¢  )r£  r  r˜  r·   rk   r¥  )r8   r™  rž  rŸ  r   r   r   r   r‘  å  s   

ý€ÿÿz$HardlinkDedupTestsBase.test_hardlinkc              
   C   s¨   dD ]O}| j |d? |  ¡ + |  |  ¡ ¡}| j|d t||d ƒ}t||d ƒ}|  t||ƒ¡ W d   ƒ n1 s=w   Y  W d   ƒ q1 sLw   Y  qd S )N))r   r	   )r	   r   )r   r   )Úopts©r   r   r	   )r  r˜  r·   r¡  rk   r   rV   r!   )r8   r¦  r   Úpyc1Úpyc2r   r   r   Útest_only_two_levelsî  s   
ù€ÿÿz+HardlinkDedupTestsBase.test_only_two_levelsc                 C   sp   |   ¡ * |  |  ¡ ¡}| jg d¢d t|dƒ}t|dƒ}|  t||ƒ¡ W d   ƒ d S 1 s1w   Y  d S )N)r	   r   r	   r   r§  r   r	   )r˜  r·   r¡  rk   r   rV   r!   )r8   r   r¨  r©  r   r   r   Útest_duplicated_levelsû  s   


"ùz-HardlinkDedupTestsBase.test_duplicated_levelsc                 C   sä   |   ¡ d |  d¡}|  ¡  |  |¡ t|ƒ}t |d ¡j}|  d¡}| jddgdd |  |t |d ¡j¡ |  	t
|d |d ƒ¡ |  |t |d ¡j¡ |  tj|d |d dd¡ W d   ƒ d S 1 skw   Y  d S )	Nrå   r   úprint(0)r   T)r   r`   r	   ©Úshallow)r˜  r·   rk   r¥  r   r   r   r   rh   rV   r!   rj   rs   ÚfilecmpÚcmp©r8   r   r  Úinoder   r   r   Útest_recompilation  s   



 "ìz)HardlinkDedupTestsBase.test_recompilationc                 C   sô   |   ¡ l | j|  ¡ dd}|  ¡  |  |¡ t|ƒ}t |d ¡j}| jddd}t	j
dddd| jd	 |  |t |d ¡j¡ |  |t |d
 ¡j¡ |  t|d |d
 ƒ¡ |  tj|d |d
 dd¡ W d   ƒ d S 1 ssw   Y  d S )NÚmodule)r“  r   r¬  r5  z-czimport moduleF)r`  r(  r   r	   Tr­  )r˜  r·   r¡  rk   r¥  r   r   r   r   r   r  r+   rh   rs   r!   r¯  r°  r±  r   r   r   Útest_import   s   

ÿ "êz"HardlinkDedupTestsBase.test_importNr   )FF)rø   rù   rú   r:   r‰   Úcontextmanagerr˜  r·   rk   rœ  r¡  r£  r¤  r¥  r‘  rª  r«  r³  rµ  r   r   r   r   r—  Ÿ  s     


	
		r—  c                   @   rþ   )Ú!HardlinkDedupTestsWithSourceEpochNr   r   r   r   r   r·  <  r  r·  c                   @   rþ   )ÚHardlinkDedupTestsNoSourceEpochNr   r   r   r   r   r¸  C  r  r¸  Ú__main__)1rW   r‰   r¯  Úimportlib.utilr   r‹   Ú	itertoolsr   rw   rf   r3   rK   r×   r(   Ztest.test_importlib.utilr‚   r-  rd   r   r   Úconcurrent.futuresr   Úconcurrent.futures.processr   rû   ÚNotImplementedErrorr   Ztest.supportr   r   Ztest_py_compiler
   r   r   r   r!   r"   ZTestCaserÿ   r  r  r
  r•  r–  r—  r·  r¸  rø   r„  r   r   r   r   Ú<module>   s˜    ÿ  oýý   Jýý ýý
ÿ