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 )z8Returns True if two files have the same inode (hardlink))Ú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 ©N©r/   Úrmtreer&   ©r4   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,   r3   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)r4   r5   Ú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 )	zOCheck that compileall recreates bytecode when the new metadata is
        used.ÚSOURCE_DATE_EPOCHzSOURCE_DATE_EPOCH is setr>   NÚwbFT©ÚforceÚquiet)r   ÚenvironÚgetÚunittestÚSkipTestÚ
py_compileÚcompiler)   ÚassertEqualrJ   r+   r*   rB   Úlenr,   ÚassertNotEqualrT   Úcompile_dirr&   rS   )r4   Úmetadatar5   Ú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<   )r4   Ú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)r4   Ú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   r5   r#   Ú__pycache__)
r   r'   r(   r&   r1   r+   rT   rU   ro   Úexists)r4   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 r7   )	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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 )NT)r   r   )r   r
   ©r]   Úoptimizer   )rT   rg   r&   r   r   r   r)   rS   r   r'   rn   r-   r2   )r4   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   )r4   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©r4   Ú	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   )r4   Ú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‘   )r4   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(   r1   r/   r0   r)   r   r   r   rT   rg   ro   rn   rS   )r4   Ú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 )z@Recursive compile_dir ddir must contain package paths; bpo39769.r~   ÚfooÚ__init__r
   Úmodzdef fn(): 1/0
fn()
Tr   r   )r]   ry   r   Nú")r&   r   r'   r(   r1   r   Úmake_scriptÚappendrT   rg   rS   Ú
startswithr   r   r   re   ÚsepÚassert_python_failurer~   r   Zget_code_from_pycrd   Úco_filenameÚassertInÚfsdecode)r4   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 )ú=Recursive compile_dir ddir= contains package paths; bpo39769.ú
<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 )r»   r¼   Tr½   r¾   r:   r   r   r   Útest_ddir_multiple_workers%  s    z.CompileallTestsBase.test_ddir_multiple_workersc                 C   s   | j dddS )ú?Recursive compile_dir ddir='' contains package paths; bpo39769.r
   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 )rÁ   r
   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)
r4   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Ï   )
r4   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Ë   ©r4   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   )r4   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)r4   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   ©
r4   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__r6   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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   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,   r3   r   r   r   r6   °  s
    

zEncodingTest.setUpc                 C   s   t  | j¡ d S r7   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&   )r4   Zorig_stdoutr   r   r   Ú
test_errorº  s
    zEncodingTest.test_errorN)rï   rð   rñ   Ú__doc__r6   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 < qŒd#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¤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_dirr1   r+   r,   rN   r   rm   rÍ   ÚrmdirÚ_sys_path_writable)Úclsr'   Zdirectory_createdr&   r5   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)r4   Ú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   ©r4   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 r7   )r   r   r   rS   r   r'   rƒ   ©r4   rp   r'   r   r   r   ÚassertCompiledó  s    z#CommandLineTestsBase.assertCompiledc                 C   s"   t j |¡}|  tj |¡¡ d S r7   )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(   Úpkgdirr1   Úpkgdir_cachedirr   r­   ÚinitfnÚbarfnr:   r   r   r   r6   û  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  )r4   Ú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   )r4   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Ð   ©r4   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 r7   )Ú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   )r4   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   r0  )r4   r2  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   )r4   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   )r4   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  r1   r   r­   r  r  ro   rƒ   r  )r4   Ú
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 )Nr8  r9  Zeggsr4  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  )	r4   r:  Zsubpackage2Zsubpackage3Úpkgr;  r<  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 )Nr8  Ú.ZevilZevil2r"  r4  )	r   r'   r(   r  r   r>  rì   r  r  )r4   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   )r4   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&   r1   r   r­   r  r  r  r  r  )r4   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 )NrD  rE  r"  ú-dÚdinsdaleó   File "dinsdale)r   r­   r  r  ru   ©r4   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"  rK  rL  Úbingz
import bazzbaz.pycF)Ú
__isolatedrM  )r   r­   r  r  r   r   r   r   Úrenamer'   r(   Úremover±   ru   )r4   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  rN  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.pyrU  )r   r­   r  r+   r   r'   r(   r&   r,   Úlinesepr  r  r  ©r4   rX  rY  rZ  r[  r\  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 )
NrX  r
   rY  rZ  r[  r\  r#   r^  rU  )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 )
NrX  r
   rY  rZ  r[  r   rU  ú-rú   )r   r­   r  Zspawn_pythonr
  Ústdinr,   r   r_  ÚencodeZkill_pythonr  r  )r4   rX  rY  rZ  r[  Ú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 )NrP  zsyntax(errorrV  s   rror)	r   r­   r  r  r  r  ru   r  r  )r4   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   )r4   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 )NrX  r
   r]  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)r4   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 )NrH  r
   rŽ   zfoo{}rª   z-jÚ0)r   r­   r&   r£   r   r'   r(   r'  r1   r®   r  r  )r4   rI  ÚfilesÚsuffixr  rp   r5   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š   )r4   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   rp  Ú1Ú2)rp  rw  rx  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Þ   )r4   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 0rz  z-o 2r{  r   r   r   )
r$   ÚTemporaryDirectoryÚsubTestr   r­   r   r®   r  rd   r    )r4   r~  r'   r   Úpycsr	  r   r   r   Útest_hardlinku  s    

z"CommandLineTestsBase.test_hardlinkN)6rï   rð   rñ   rþ   Úclassmethodr  r  r
  r  r  r  r  r6   r  r   r!  r$  Únamer,  r1  r3  Úlocalsr5  r6  r7  r=  r@  r   ró   rB  rC  rF  rG  rJ  rO  rT  rW  ra  rb  rg  rh  ri  ro  r   Ú_have_multiprocessingrs  r   rò   rv  rØ   râ   rî   r|  r‚  r   r   r   r   rÿ   Ã  sf   

	


ý

"

	


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 r7   r{   r:   r   r   r   r6     s    zHardlinkDedupTestsBase.setUpc                 c   s>   t  ¡ "}|| _|V  d | _W d   ƒ n1 s00    Y  d S r7   )r$   r  r'   )r4   r'   r   r   r   Útemporary_directory   s    
z*HardlinkDedupTestsBase.temporary_directoryr   c                 C   s   t  | j||¡S r7   )r   r­   r'   )r4   Ú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'   )r4   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(   )r4   Ú	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“  )r4   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”  Fr}  r   r   r   )r•  r€  rŠ  r­   r   rg   ro   r    )r4   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    )r4   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—  )r4   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    )r4   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    )r4   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©r4   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)rQ  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ñ   r6   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   r/   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ï   ru  r   r   r   r   Ú<module>   sŒ   
  nýý   Kýý ýý
