a
    ¼3jd¸  ã                   @   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 zd dlmZ dZW n eyº   dZY n0 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 -¡  dS )'é    N)ÚmockÚ
skipUnless)ÚProcessPoolExecutorTF)Úsupport)Ú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   úP/www/server/python_manager/versions/3.9.10/lib/python3.9/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>(   ó    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 ©N)ÚosÚstatÚst_ino)Z	filename1Ú	filename2Zinode1Zinode2r   r   r   Úis_hardlink+   s    r!   c                   @   sh  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 d#¡d$d%„ ƒZd&d'„ Ze d#¡d(d)„ ƒZe d#¡e d*¡d+d,„ ƒƒZejd#d-d.e d*¡d/d0„ ƒƒZd1d2„ Zd3d4œd5d6„Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Z d?d@„ Z!dAdB„ Z"dCdD„ Z#dEdF„ Z$dGdH„ Z%e&j'dIdJ„ ƒZ(d-S )KÚCompileallTestsBasec                 C   sØ   t  ¡ | _tj | jd¡| _tj 	| j¡| _
t| jdƒ}| d¡ W d   ƒ n1 sX0    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Úwz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   ÚsetUp4   s    
(zCompileallTestsBase.setUpc                 C   s   t  | j¡ d S r   ©r0   Úrmtreer'   ©r5   r   r   r   ÚtearDownB   s    zCompileallTestsBase.tearDownc                 C   sL   t j | jd¡| _t| jdƒ}| d¡ W d   ƒ n1 s>0    Y  d S )Nz_test_bad.pyr$   zx (
)r   r(   r)   r'   Úbad_source_pathr,   r-   r4   r   r   r   Úadd_bad_source_fileE   s    z'CompileallTestsBase.add_bad_source_filec                 C   sh   t | jdƒ}| d¡}W d   ƒ n1 s,0    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)r5   r6   ÚdataÚmtimeZcomparer   r   r   Útimestamp_metadataJ   s    (ÿz&CompileallTestsBase.timestamp_metadatac              	   C   sx   zt  | jd¡ W n  ttfy2   |  d¡ Y n0 t t 	¡ ¡" |  
t | j¡¡ W d   ƒ n1 sj0    Y  d S )N)rA   rA   z0filesystem doesn't support timestamps near 2**32©r   Úutimer*   ÚOverflowErrorÚOSErrorZskipTestÚ
contextlibÚredirect_stdoutÚioÚStringIOÚ
assertTrueÚ
compileallÚcompile_filer:   r   r   r   Ú test_year_2038_mtime_compilationR   s    z4CompileallTestsBase.test_year_2038_mtime_compilationc              	   C   sx   zt  | jd¡ W n  ttfy2   |  d¡ Y n0 t t 	¡ ¡" |  
t | j¡¡ W d   ƒ n1 sj0    Y  d S )N)ì         rW   z+filesystem doesn't support large timestampsrK   r:   r   r   r   Útest_larger_than_32_bit_times\   s    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 sf0    Y  t
| jdƒ$}| |¡ | |¡ W d   ƒ n1 s¦0    Y  | j|  	¡ Ž  tj| jddd | j|  	¡ Ž  d S )NÚSOURCE_DATE_EPOCHzSOURCE_DATE_EPOCH is setr>   ÚwbFT©ÚforceÚquiet)r   ÚenvironÚgetÚunittestÚSkipTestÚ
py_compileÚcompiler*   ÚassertEqualrJ   r,   r+   rB   Úlenr-   ÚassertNotEqualrT   Úcompile_dirr'   rS   )r5   Úmetadatar6   Úbcr   r   r   Úrecreation_checkf   s    
2
(z$CompileallTestsBase.recreation_checkc                 C   s   |   t dtjjdd¡¡ d S )Nr@   r   r   )rj   rE   rF   r   r   rG   r:   r   r   r   Ú
test_mtimev   s    ÿzCompileallTestsBase.test_mtimec                 C   s   |   d¡ d S )Ns       )rj   r:   r   r   r   Útest_magic_number{   s    z%CompileallTestsBase.test_magic_numberc                 C   s  | j | jfD ] }zt |¡ W q   Y q0 q|  tj| jddd¡ |  tj 	| j ¡oftj 	| j¡ ¡ t | j ¡ |  tj
| jddd¡ |  tj 	| j ¡o¬tj 	| j¡¡ t | j ¡ t | j¡ |  ¡  |  tj| jddd¡ |  tj
| jddd¡ d S )NFTr[   r   )r+   r/   r   ÚunlinkrS   rT   rU   r*   r(   Úisfilerg   r'   r=   ÚassertFalser<   )r5   Ú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 sJ0    Y  |  | ¡ d¡ |  tj | j¡¡ d S )Nz&Compiling ([^WindowsPath|PosixPath].*))ro   r   r(   rn   r+   r   Úcaptured_stdoutrS   rT   rU   ÚpathlibÚPathr*   ÚassertRegexÚgetvalue)r5   Ústdoutr   r   r   Útest_compile_file_pathlike˜   s
    
6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   )Úddirr]   )ro   r   r(   rn   r+   rS   rT   rU   rs   rt   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<0    Y  t jjj| jgd. |  ¡  |  	tjdddd¡ W d   ƒ n1 sŽ0    Y  d S )N©r(   r   ©r]   FT)Úskip_curdirr\   r]   )
ÚtestÚtest_importlibr   Zimport_stater'   rS   rT   Úcompile_pathr=   ro   r:   r   r   r   Útest_compile_path§   s    0
ÿz%CompileallTestsBase.test_compile_pathc                 C   s|   t j | jd¡}t j |d¡}t  |¡ t|dƒ W d   ƒ n1 sH0    Y  t |¡ |  t j 	t j |d¡¡¡ d S )NrH   r6   r$   Ú__pycache__)
r   r(   r)   r'   r2   r,   rT   rU   ro   Úexists)r5   Zdata_dirZ	data_filer   r   r   Útest_no_pycache_in_non_package°   s    

z2CompileallTestsBase.test_no_pycache_in_non_packagec                 C   sL   |   ¡  t t ¡ ¡" |  t | j¡¡ W d   ƒ n1 s>0    Y  d S r   )	r=   rO   rP   rQ   rR   ro   rT   rU   r<   r:   r   r   r   Ú#test_compile_file_encoding_fallback½   s    z7CompileallTestsBase.test_compile_file_encoding_fallbackc                 C   s’   drdn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 )NF)r   r   )r   r
   T©r]   Úoptimizer   )rT   rg   r'   r   r   r   r*   rS   r   r(   rn   r.   r3   )r5   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 sD0    Y  | ¡  ¡ d }|  |d¡ |  tj | j¡¡ d S )Nr   z$Listing ([^WindowsPath|PosixPath].*))ro   r   r(   rn   r+   r   rr   rT   rg   rs   rt   r'   rv   Ú
splitlinesru   rS   )r5   rw   Úliner   r   r   Útest_compile_dir_pathlikeÓ   s    
0z-CompileallTestsBase.test_compile_dir_pathlikez&concurrent.futures.ProcessPoolExecutorc                 C   s"   t j| jddd |  |j¡ d S ©NTé   ©r]   Úworkers©rT   rg   r'   rS   Úcalled©r5   Ú	pool_mockr   r   r   Útest_compile_pool_calledÛ   s    z,CompileallTestsBase.test_compile_pool_calledc                 C   s@   |   td¡  tj| jdd W d   ƒ n1 s20    Y  d S )Nz%workers must be greater or equal to 0éÿÿÿÿ)r   )ZassertRaisesRegexÚ
ValueErrorrT   rg   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)rT   rg   r'   rd   Ú	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|   )rT   rg   r'   ro   r’   rS   )r5   Úcompile_file_mockr”   r   r   r   Útest_compile_one_workerê   s    z+CompileallTestsBase.test_compile_one_workerN©Únewc                 C   s"   t j| jddd |  |j¡ d S r   r‘   )r5   rœ   r   r   r   Ú$test_compile_missing_multiprocessingñ   s    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)r]   Ú	maxlevels)r'   Úranger   r(   r)   r2   r0   r1   r*   r   r   r   rT   rg   ro   rn   rS   )r5   Ú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||rjdnd	d
 |  
|¡ |D ]}|  
| | j ¡|¡ tj |¡}|t| j tj ƒd … }	t |¡\}
}
}tj ||	¡}tjj |¡}|  |j|¡ |  d|› dt |¡¡ q€d S )Nr~   ÚfooÚ__init__r
   Úmodzdef fn(): 1/0
fn()
Tr   r   )r]   ry   r   ú")r'   r   r(   r)   r2   r   Úmake_scriptÚappendrT   rg   rS   Ú
startswithr   r   r   re   ÚsepÚassert_python_failurer~   r   Zget_code_from_pycrd   Úco_filenameÚassertInÚfsdecode)r5   ry   r¨   Úfullpathr(   ZmodsZsubdirr«   ZmodcodeÚmodpathÚ_ÚerrÚexpected_inZmod_code_objr   r   r   Ú_test_ddir_only  s0    
ÿ
þ
z#CompileallTestsBase._test_ddir_onlyc                 C   s   | j dddS )Nú
<a prefix>F©ry   r¨   ©rº   r:   r   r   r   Útest_ddir_only_one_worker!  s    z-CompileallTestsBase.test_ddir_only_one_workerc                 C   s   | j dddS )Nr»   Tr¼   r½   r:   r   r   r   Útest_ddir_multiple_workers%  s    z.CompileallTestsBase.test_ddir_multiple_workersc                 C   s   | j dddS )Nr
   Fr¼   r½   r:   r   r   r   Útest_ddir_empty_only_one_worker)  s    z3CompileallTestsBase.test_ddir_empty_only_one_workerc                 C   s   | j dddS )Nr
   Tr¼   r½   r:   r   r   r   Ú test_ddir_empty_multiple_workers-  s    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)r]   Ústripdir©Úencoding©r   r(   r)   r'   Úmakedirsr   r­   r   r   r   rT   rg   r±   r³   ÚstrÚsysÚgetdefaultencodingÚassertNotIn)
r5   rµ   r(   r   ri   rÆ   ÚrcÚoutr¸   r¹   r   r   r   Útest_strip_only1  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)r]   Ú
prependdirrÇ   )r   r(   r)   r'   rÊ   r   r­   r   r   r   rT   rg   r±   r³   rË   rÌ   rÍ   )
r5   rµ   r(   r   ri   rÓ   rÏ   rÐ   r¸   r¹   r   r   r   Útest_prepend_onlyD  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)r]   rÆ   rÓ   rÇ   rÉ   ©r5   rµ   r(   r   ri   rÆ   rÓ   rÏ   rÐ   r¸   r¹   r   r   r   Útest_strip_and_prependS  s(    
ÿþþz*CompileallTestsBase.test_strip_and_prependc                 C   sx   g d¢}t jj| jg|¢R Ž }t  |¡ t |dd¡ |  t¡$ t	j
|ddddd W d   ƒ n1 sj0    Y  d S )N)r~   rÃ   rÄ   r(   ry   r~   rÅ   Tz/barrÒ   )r]   ry   rÆ   rÓ   )r   r(   r)   r'   rÊ   r   r­   ÚassertRaisesr—   rT   rg   )r5   rµ   r(   r   r   r   Útest_strip_prepend_and_ddirh  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 ]Z}tj|d	|d
 |D ]@}|  	t
j || ¡¡ zt
 || ¡ W ql tyª   Y ql0 qlqTd S )NÚtest_optimizationúa = 0©r
   r   r   r¡   r   r   r   r   r   Tr†   )r   r­   r'   r®   r   r   r   rT   rU   rS   r   r(   rn   rm   Ú	Exception)r5   r   ri   Ú	opt_levelÚtest_combinationsÚopt_combinationr   r   r   Ú!test_multiple_optimization_levelsq  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)r]   Úlimit_sl_dest)r   r(   r)   r'   rÊ   r   r­   Úsymlinkr   r   r   rT   rg   rS   rn   ro   ©
r5   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__r7   r;   r=   rJ   rV   rX   rj   rk   rl   rq   rx   rz   r   r„   r…   r‰   rŒ   r   Ú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"   2   sR   

	

	r"   c                   @   s   e Zd ZdS )ÚCompileallTestsWithSourceEpochN©rí   rî   rï   r   r   r   r   rò   ž  s   rò   )Ú	metaclassZsource_date_epochc                   @   s   e Zd ZdS )Ú!CompileallTestsWithoutSourceEpochNró   r   r   r   r   rõ   ¥  s   rõ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚEncodingTestc                 C   sd   t  ¡ | _tj | jd¡| _t| jddd$}| d¡ | d¡ W d   ƒ n1 sV0    Y  d S )Nr#   r$   úutf-8rÇ   z# -*- coding: utf-8 -*-
u   print u"â‚¬"
)	r%   r&   r'   r   r(   r)   r*   r,   r-   r4   r   r   r   r7   °  s
    

zEncodingTest.setUpc                 C   s   t  | j¡ d S r   r8   r:   r   r   r   r;   ·  s    zEncodingTest.tearDownc                 C   s>   z0t j}tjt ¡ ddt _t | j¡ W |t _n|t _0 d S )NÚasciirÇ   )rÌ   rw   rQ   ÚTextIOWrapperÚBytesIOrT   rg   r'   )r5   Zorig_stdoutr   r   r   Ú
test_errorº  s
    zEncodingTest.test_errorN)rí   rî   rï   r7   r;   rû   r   r   r   r   rö   ¬  s   rö   c                   @   s¨  e 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 < qˆd"d#„ Zd$d%„ Zed&d'„ ƒZd(d)„ Zd*d+„ Zejd,d-„ ƒZd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Z d6d7„ Z!d8d9„ Z"d:d;„ Z#d<d=„ Z$d>d?„ Z%d@dA„ Z&dBdC„ Z'dDdE„ Z(dFdG„ Z)e*e+dHƒdIdJ„ ƒZ,e- .dK¡dLdM„ ƒZ/dNdO„ Z0dPdQ„ Z1ejdRdS„ ƒZ2dTdU„ Z3dVdW„ Z4dXS )YÚCommandLineTestsBasec                 C   s   t tjjtjƒD ]à}d}t |¡d }|d }z¤zL| ¡ sF| ¡  d}| 	d¡}| 
d¡ W d   ƒ n1 sp0    Y  W n8 ty´   d}Y W t t|ƒ¡ |r¬| ¡   qöY n0 W t t|ƒ¡ |rð| ¡  qt t|ƒ¡ |rî| ¡  0 qd}|| _d S )NFr‚   ztest.tryTr$   z# for test_compileall)Úfilterr   r(   ÚisdirrÌ   rs   rt   Úis_dirr2   r,   r-   rN   r   rm   rË   ÚrmdirÚ_sys_path_writable)Úclsr(   Zdirectory_createdr'   r6   Zsys_path_writabler   r   r   Ú
setUpClassÆ  s2    ,ü
þzCommandLineTestsBase.setUpClassc                 C   s   | j st d¡‚d S )Nz(not all entries on sys.path are writable)r  r`   ra   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ú-mrT   )r   Z!optim_args_from_interpreter_flags)r5   Ú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   )r   Úassert_python_okr  rd   ©r5   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   s"   t j |¡}|  tj |¡¡ d S r   )r   r   r   rS   r   r(   rƒ   ©r5   rp   r(   r   r   r   ÚassertCompiledó  s    z#CommandLineTestsBase.assertCompiledc                 C   s"   t j |¡}|  tj |¡¡ d S r   )r   r   r   ro   r   r(   rƒ   r  r   r   r   ÚassertNotCompiled÷  s    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   r9   r   r(   r)   Úpkgdirr2   Úpkgdir_cachedirr   r­   ÚinitfnÚbarfnr:   r   r   r   r7   û  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  )r5   Ú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   rL   Útimer   rD   rd   rf   )r5   r  ÚpycpathrI   Ú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Î   ©r5   Znoisyr]   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  rT   r  c                 3   s   | ]}|  tjjˆ ¡V  qd S r   )ÚformatrÌ   ÚimplementationÚ	cache_tag)r   Úbase©Úextr   r   Ú	<genexpr>4  s   ÿz)CommandLineTestsBase.f.<locals>.<genexpr>)z__init__.{}.{}z	bar.{}.{}c                    s   g | ]}|  ˆ ¡r|‘qS r   )Úendswith)r   rp   r(  r   r   r   8  s   
ÿz*CommandLineTestsBase.f.<locals>.<listcomp>)r   r	  r  rS   r   r(   rƒ   r  Úsortedrd   Úlistdirro   )r5   r)  ÚswitchÚexpectedr   r(  r   Úf/  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-br  )ú__init__.pyz__init__.pyczbar.pyzbar.pyc)
r  r  ro   r   r(   rƒ   r  r,  rd   r-  )r5   r/  r   r   r   Útest_legacy_paths<  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 )Nr  r‚   )	r  r  rS   r   r(   rƒ   r  r)   ro   )r5   Zcachecachedirr   r   r   Útest_multiple_runsF  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 )Nr  r  r   r  )r  r  r   r   r   r  r   rL   r  r   rD   rd   rf   )r5   r  rI   r  r   r   r   Ú
test_forceS  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
   Úhamr  z-lr‚   )r   r(   r)   r  r2   r   r­   r  r  ro   rƒ   r  )r5   Ú
subpackageÚ	subinitfnÚhamfnr   r   r   Útest_recursion_controlc  s    


z+CommandLineTestsBase.test_recursion_controlc           	      C   sV  t j | jd¡}t j |d¡}t j |d¡}|||fD ]}t |¡ q6t 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 )Nr5  r6  Zeggsr1  r
   Zeggr  z-r 0r‚   z-r 1z-r 2z-r 5)r   r(   r)   r  r   Úmake_pkgr­   r  r  ro   rƒ   r  )	r5   r7  Zsubpackage2Zsubpackage3Úpkgr8  r9  ZspamfnZeggfnr   r   r   Útest_recursion_limito  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 )Nr5  Ú.ZevilZevil2r  r1  )	r   r(   r)   r  r   r;  rê   r  r  )r5   r<  r   r   r   Útest_symlink_loop‘  s    

ÿz&CommandLineTestsBase.test_symlink_loopc                 C   s6   |   | j¡}|   d| j¡}|  d|¡ |  d|¡ d S )Nr  r   )r  r  rf   rd   r   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(syntaxr  z-qqr   )r   r­   r  r  rf   rd   )r5   r·   r]   Zsilentr   r   r   Útest_silent¥  s
    z CommandLineTestsBase.test_silentc                 C   s.   |   ddd| j¡ |  | j¡ |  | j¡ d S )Nr  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
   Úbar2r  )r   r(   r)   r'   r2   r   r­   r  r  r  r  r  )r5   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 )NrA  rB  r  ú-dÚdinsdaleó   File "dinsdale)r   r­   r  r  ru   ©r5   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 Exceptionr  rH  rI  Úbingz
import bazzbaz.pycF)Ú
__isolatedrJ  )r   r­   r  r  r   r   r   r   Úrenamer(   r)   Úremover±   ru   )r5   r  rp   r"  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  ru   ZassertNotRegexro   rƒ   r   r   r   r  rK  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ƒH}| tj | jd¡tj	 ¡ | tj | jd	¡tj	 ¡ W d   ƒ n1 s¤0    Y  |  
d
tj | jd¡|¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )NÚf1r
   Úf2Úf3Úf4Úl1r$   úf1.pyúf2.pyrR  )r   r­   r  r,   r   r(   r)   r'   r-   Úlinesepr  r  r  ©r5   rU  rV  rW  rX  rY  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ƒ,}| tj | jd¡tj	 ¡ W d   ƒ n1 sˆ0    Y  |  
d	tj | jd¡¡ |  |¡ |  |¡ |  |¡ |  |¡ d S )
NrU  r
   rV  rW  rX  rY  r$   r[  rR  )r   r­   r  r,   r   r(   r)   r'   r-   r\  r  r  r  r]  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 )
NrU  r
   rV  rW  rX  r   rR  ú-rø   )r   r­   r  Zspawn_pythonr  Ústdinr-   r   r\  ÚencodeZkill_pythonr  r  )r5   rU  rV  rW  rX  Ú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 )NrM  zsyntax(errorrS  s   rror)	r   r­   r  r  r  r  ru   r  r  )r5   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  ru   )r5   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^0    Y  |  t |dd… d¡d	¡ |  	d
| j¡ t
|dƒ}| ¡ }W d   ƒ n1 sº0    Y  |  t |dd… d¡d¡ d S )NrU  r
   rZ  z --invalidation-mode=checked-hashr>   é   é   Úlittler¡   z"--invalidation-mode=unchecked-hashr   )r   r­   r  r   r   r   r   r(   r)   r  r,   rB   rd   rC   Ú
from_bytes)r5   r"  ÚfprH   r   r   r   Útest_pyc_invalidation_mode  s    ÿ&&z/CommandLineTestsBase.test_pyc_invalidation_modezrequires multiprocessingc                 C   s–   t  | jdd¡}g }tdƒD ]F}tj | jd |¡¡}t |¡ t  |dd¡}| 	t  |dd¡¡ q|  
| jdd¡ |  |¡ |D ]}|  |¡ q‚d S )NrE  r
   rŽ   zfoo{}rª   z-jÚ0)r   r­   r'   r£   r   r(   r)   r$  r2   r®   r  r  )r5   rF  ÚfilesÚsuffixr  rp   r6   r   r   r   Útest_workers  s    

z!CommandLineTestsBase.test_workerszcompileall.compile_dirc                 C   sf   t jdtj| jdgd: t ¡  |  |j¡ |  	|j
d d d¡ W d   ƒ n1 sX0    Y  d S )Nzsys.argvz-j0rž   r–   r   r   )r   rð   rÌ   Ú
executabler'   rT   ÚmainrS   r’   rd   rš   )r5   rg   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Ö   ,  s$    
þþz+CommandLineTestsBase.test_strip_and_prependc              
   C   sÜ   t j | jd¡}t  |¡ t |dd¡}g }dD ]}| tj	j
||d¡ q0ddgddgddgg d	¢g}|D ]j}| j|gd
d„ |D ƒ¢R Ž  |D ]D}|  t j |t|ƒ ¡¡ zt  || ¡ W q tyÒ   Y q0 qqld S )NZoptimizationsrÙ   rÚ   rÛ   r   rm  Ú1Ú2)rm  rt  ru  c                 s   s   | ]}d t |ƒ V  qdS )z-oN)rË   )r   Únr   r   r   r*  O  r   zICommandLineTestsBase.test_multiple_optimization_levels.<locals>.<genexpr>)r   r(   r)   r'   rÊ   r   r­   r®   r   r   r   r  rS   rn   rC   rm   rÜ   )r5   r(   r   ri   rÝ   rÞ   rß   r   r   r   rà   @  s0    
þÿ
ý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  rS   rn   ro   rë   r   r   r   rì   W  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_argsp  s    z+CommandLineTestsBase.test_hardlink_bad_argsc              
   C   sî   dD ]ä}t  ¡ È}| j|dœ t |dd¡}t|ƒ}g d¢}|rL| d¡ | j|g|¢R Ž  |  t	|d |d ƒ|¡ |  t	|d |d	 ƒ|¡ |  t	|d |d	 ƒ|¡ W d   ƒ n1 sÀ0    Y  W d   ƒ q1 sÞ0    Y  qd S )
N)TF©Údedupr   rÚ   )r  z-o 0rw  z-o 2rx  r   r   r   )
r%   ÚTemporaryDirectoryÚsubTestr   r­   r   r®   r  rd   r!   )r5   r{  r(   r   Úpycsr  r   r   r   Útest_hardlinku  s    

z"CommandLineTestsBase.test_hardlinkN)5rí   rî   rï   Úclassmethodr  r  r  r  r  r  r  r7   r  r   r  r!  Únamer)  r.  r0  Úlocalsr2  r3  r4  r:  r=  r   rñ   r?  r@  rC  rD  rG  rL  rQ  rT  r^  r_  rd  re  rf  rl  r   Ú_have_multiprocessingrp  r   rð   rs  rÖ   rà   rì   ry  r  r   r   r   r   rü   Ã  sd   

	


ý

"

	


rü   c                   @   s   e Zd ZdS )ÚCommandLineTestsWithSourceEpochNró   r   r   r   r   r„  ‹  s   r„  c                   @   s   e Zd ZdS )ÚCommandLineTestsNoSourceEpochNró   r   r   r   r   r…  ’  s   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   r7     s    zHardlinkDedupTestsBase.setUpc                 c   s>   t  ¡ "}|| _|V  d | _W d   ƒ n1 s00    Y  d S r   )r%   r|  r(   )r5   r(   r   r   r   Útemporary_directory   s    
z*HardlinkDedupTestsBase.temporary_directoryr   c                 C   s   t  | j||¡S r   )r   r­   r(   )r5   Úcoder  r   r   r   r­   §  s    z"HardlinkDedupTestsBase.make_scriptTr   F)r{  r‡   r\   c                C   s   t j| jd|||d d S )NT)r]   r‡   Úhardlink_dupesr\   )rT   rg   r(   )r5   r{  r‡   r\   r   r   r   rg   ª  s    ÿz"HardlinkDedupTestsBase.compile_dirc              	   C   s¶   |   ¡ š |  d¡ |  t¡$ tj| jdddd W d   ƒ n1 sH0    Y  |  t¡( tj| jdddgdd W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  d S )NÚpassTr   )r]   r‡   r‰  )r‡  r­   r×   r—   rT   rg   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)   )r5   Ú	docstringÚ	assertionÚlinesr   r   r   Úcreate_code¼  s    


z"HardlinkDedupTestsBase.create_codec                 c   s2   dD ](}dD ]}| j ||d}|||fV  qqd S )N)FT©r  rŽ  )r  )r5   r  rŽ  rˆ  r   r   r   Ú
iter_codesÅ  s    z!HardlinkDedupTestsBase.iter_codesc              
   C   sÔ   |   ¡ D ]Æ\}}}| j||dž |  ¡ v |  |¡}t|ƒ}| jdd |  t|d |d ƒ¡ |  t|d |d ƒ¡ |  t|d |d ƒ¡ W d   ƒ n1 s¦0    Y  W d   ƒ q1 sÄ0    Y  qd S )Nr‘  Frz  r   r   r   )r’  r}  r‡  r­   r   rg   ro   r!   )r5   rˆ  r  rŽ  r   r~  r   r   r   Útest_disabledË  s    

z$HardlinkDedupTestsBase.test_disabledc                 C   sf   t |ƒ}|  t|d |d ƒ| ¡ |  t|d |d ƒ| oB| ¡ |  t|d |d ƒ| ¡ d S )Nr   r   r   )r   rd   r!   )r5   r   r  rŽ  r~  r   r   r   Úcheck_hardlinks×  s    ÿ
ÿÿz&HardlinkDedupTestsBase.check_hardlinksc              
   C   sŽ   |   ¡ D ]€\}}}| j||dX |  ¡ 0 |  |¡}|  ¡  |  |||¡ W d   ƒ n1 s`0    Y  W d   ƒ q1 s~0    Y  qd S )Nr‘  )r’  r}  r‡  r­   rg   r”  )r5   rˆ  r  rŽ  r   r   r   r   r  à  s    

z$HardlinkDedupTestsBase.test_hardlinkc              
   C   s¨   dD ]ž}| j |d~ |  ¡ V |  |  ¡ ¡}| j|d t||d ƒ}t||d ƒ}|  t||ƒ¡ W d   ƒ n1 sz0    Y  W d   ƒ q1 s˜0    Y  qd S )N))r   r   )r   r   )r   r   )Úopts©r‡   r   r   )r}  r‡  r­   r  rg   r   rS   r!   )r5   r•  r   Úpyc1Úpyc2r   r   r   Útest_only_two_levelsé  s    
z+HardlinkDedupTestsBase.test_only_two_levelsc                 C   sn   |   ¡ R |  |  ¡ ¡}| jg d¢d t|dƒ}t|dƒ}|  t||ƒ¡ W d   ƒ n1 s`0    Y  d S )N)r   r   r   r   r–  r   r   )r‡  r­   r  rg   r   rS   r!   )r5   r   r—  r˜  r   r   r   Útest_duplicated_levelsö  s    


z-HardlinkDedupTestsBase.test_duplicated_levelsc                 C   sâ   |   ¡ Æ |  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   ƒ n1 sÔ0    Y  d S )	NrÚ   r   úprint(0)r   T)r‡   r\   r   ©Úshallow)r‡  r­   rg   r”  r   r   r   r   rd   rS   r!   rf   ro   ÚfilecmpÚcmp©r5   r   r~  Úinoder   r   r   Útest_recompilation  s    



z)HardlinkDedupTestsBase.test_recompilationc                 C   sò   |   ¡ Ö | 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   ƒ n1 sä0    Y  d S )NÚmodule)r  r   r›  r#  z-czimport moduleF)rN  r  r   r   Trœ  )r‡  r­   r  rg   r”  r   r   r   r   r   r	  r(   rd   ro   r!   rž  rŸ  r   r   r   r   Útest_import  s    

ÿz"HardlinkDedupTestsBase.test_importN)r   )FF)FF)rí   rî   rï   r7   rO   Úcontextmanagerr‡  r­   rg   r‹  r  r’  r“  r”  r  r™  rš  r¢  r¤  r   r   r   r   r†  š  s   


	
		r†  c                   @   s   e Zd ZdS )Ú!HardlinkDedupTestsWithSourceEpochNró   r   r   r   r   r¦  7  s   r¦  c                   @   s   e Zd ZdS )ÚHardlinkDedupTestsNoSourceEpochNró   r   r   r   r   r§  >  s   r§  Ú__main__).rT   rO   rž  Úimportlib.utilr   rQ   Ú	itertoolsr   rs   rb   r0   rE   rÌ   r%   Ztest.test_importlib.utilr~   r  r`   r   r   Úconcurrent.futuresr   rƒ  ÚImportErrorr   Ztest.supportr   Ztest_py_compiler   r	   r   r   r!   r"   ZTestCaserò   rõ   rö   rü   r„  r…  r†  r¦  r§  rí   rr  r   r   r   r   Ú<module>   sŒ   
  nýý   Kýý ýý
