o
    JAf¿  ã                   @   s”   d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ G dd	„ d	ejejejƒZd
d„ ZedkrHeeƒ ƒ dS dS )z%Tests for distutils.command.build_py.é    N)Úbuild_py)ÚDistribution)ÚDistutilsFileError)Úsupport)Úrun_unittestc                   @   sX   e Zd Zdd„ Zdd„ Ze ejd¡dd„ ƒZ	e ejd¡dd	„ ƒZ
d
d„ Zdd„ ZdS )ÚBuildPyTestCasec           
      C   s  |   ¡ }ttj |d¡dƒ}z| d¡ W | ¡  n| ¡  w ttj |d¡dƒ}z| d¡ W | ¡  n| ¡  w |   ¡ }tdgd|idœƒ}tj |d¡|_t	j
d	|d
|jd< dg|_ddgi|_d|i|_t|ƒ}d|_| ¡  |  |j|j¡ | ¡  |  t| ¡ ƒd¡ tj |d¡}t |¡}tj |d¡}|  d|¡ |  d|¡ tjr·|  tj |¡¡ d S t |¡}	|  dtjj |	¡ d S )Nú__init__.pyÚwz# Pretend this is a package.z
README.txtzInfo about this packageÚpkg)ÚpackagesÚpackage_dirúsetup.pyr   )ÚforceÚ	build_libÚbuildé   é   Ú__pycache__z__init__.%s.pyc)ÚmkdtempÚopenÚosÚpathÚjoinÚwriteÚcloser   Úscript_namer   ZDummyCommandZcommand_objr   Úpackage_datar   r   ÚcompileZensure_finalizedÚassertEqualÚrunÚlenZget_outputsÚlistdirÚassertInÚsysÚdont_write_bytecodeZassertFalseÚexistsÚimplementationÚ	cache_tag)
ÚselfÚsourcesÚfZdestinationÚdistÚcmdZpkgdestÚfilesZpycache_dirZ	pyc_files© r.   ú4/usr/lib/python3.10/distutils/tests/test_build_py.pyÚtest_package_data   sL   ÿþ


ÿz!BuildPyTestCase.test_package_datac                 C   sÄ   |   ¡ }ttj |d¡dƒ ¡  tj |d¡}t |¡ ttj |d¡dƒ ¡  t |¡ tdgddiddgidœƒ}tj |d	¡|_	d
g|_
| ¡  z| ¡  W d S  tya   |  d¡ Y d S w )Nr   r	   ÚdocÚtestfiler
   Ú údoc/*)r   r   r   r   r   z/failed package_data test when package_dir is '')r   r   r   r   r   r   ÚmkdirÚchdirr   r   Úscript_argsÚparse_command_lineÚrun_commandsr   Úfail)r(   r)   Ztestdirr+   r.   r.   r/   Útest_empty_package_dirD   s$   

þÿz&BuildPyTestCase.test_empty_package_dirzbyte-compile disabledc                 C   sœ   | j dgd\}}t |¡ |  dd¡ t|ƒ}d|_d|_| ¡  | ¡  t 	|j¡}|  
t|ƒddg¡ t 	tj |jd¡¡}|  
|dtjj g¡ d S )	NÚ
boiledeggs©Z
py_modulesúboiledeggs.pyúimport antigravityr   Úherer   zboiledeggs.%s.pyc)Úcreate_distr   r6   Ú
write_filer   r   r   Úfinalize_optionsr   r!   r   Úsortedr   r   r#   r&   r'   )r(   Úproject_dirr+   r,   Úfoundr.   r.   r/   Útest_byte_compile[   s   
ÿz!BuildPyTestCase.test_byte_compilec                 C   s¬   | j dgd\}}t |¡ |  dd¡ t|ƒ}d|_d|_d|_| ¡  | 	¡  t 
|j¡}|  t|ƒddg¡ t 
tj |jd¡¡}d	 tjj¡}|  t|ƒ|g¡ d S )
Nr<   r=   r>   r?   r   r   r@   r   zboiledeggs.{}.opt-1.pyc)rA   r   r6   rB   r   r   Úoptimizer   rC   r   r!   r   rD   r   r   Úformatr#   r&   r'   )r(   rE   r+   r,   rF   Úexpectr.   r.   r/   Útest_byte_compile_optimizedl   s   
z+BuildPyTestCase.test_byte_compile_optimizedc                 C   sê   |   ¡ }tj |d¡}t |¡ ttj |d¡dƒ ¡  tj |d¡}t |¡ ttj |d¡dƒ ¡  t tj |d¡¡ t |¡ tdgddgidœƒ}tj |d	¡|_	d
g|_
| ¡  z| ¡  W dS  tyt   |  d¡ Y dS w )zR
        A directory in package_data should not be added to the filelist.
        r
   r   r	   r1   r2   Zotherdirr4   )r   r   r   r   z0failed package_data when data dir includes a dirN)r   r   r   r   r5   r   r   r6   r   r   r7   r8   r9   r   r:   )r(   r)   Zpkg_dirZdocdirr+   r.   r.   r/   Útest_dir_in_package_data~   s(   


ÿÿz(BuildPyTestCase.test_dir_in_package_datac                 C   sr   |   ¡ d }t|ƒ}d|_d|_tj}dt_z
| g ¡ W |t_n|t_w |  d| jd d | jd d  ¡ d S )Nr   Tzbyte-compiling is disabledr   é   )	rA   r   r   rH   r#   r$   Zbyte_compiler"   Zlogs)r(   r+   r,   Zold_dont_write_bytecoder.   r.   r/   Útest_dont_write_bytecode   s   ÿz(BuildPyTestCase.test_dont_write_bytecodeN)Ú__name__Ú
__module__Ú__qualname__r0   r;   ÚunittestZskipIfr#   r$   rG   rK   rL   rN   r.   r.   r.   r/   r      s    1

r   c                   C   s
   t  t¡S )N)rR   Z	makeSuiter   r.   r.   r.   r/   Ú
test_suite¯   s   
rS   Ú__main__)Ú__doc__r   r#   rR   Zdistutils.command.build_pyr   Zdistutils.corer   Zdistutils.errorsr   Zdistutils.testsr   Ztest.supportr   ZTempdirManagerZLoggingSilencerZTestCaser   rS   rO   r.   r.   r.   r/   Ú<module>   s$    þ !ÿ