B
    ž†\7  ã               @   sX   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	 G dd„ de	ƒZ
dS )é    N)Ú
CythonTestc               @   sD   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S )ÚTestCyCachec             C   sR   t  | ¡ tjdtj d¡r dnd d| _tjd| jd| _tjd| jd| _	d S )Nzcycache-testZTEST_TMP)ÚprefixÚdirÚsrcÚcache)
r   ÚsetUpÚtempfileZmkdtempÚosÚpathÚisdirZtemp_dirÚsrc_dirÚ	cache_dir)Úself© r   ú=lib/python3.7/site-packages/Cython/Build/Tests/TestCyCache.pyr      s    
zTestCyCache.setUpc             C   s   t   tj | j|¡¡S )N)Úglobr
   r   Újoinr   )r   Z	file_globr   r   r   Úcache_files   s    zTestCyCache.cache_filesc             O   s(   t j ¡  d t jj_t jjj||Ž d S )N)ÚCythonZUtilsZclear_function_cachesZBuildZDependenciesZ	_dep_treeZ	cythonize)r   ÚargsÚkwargsr   r   r   Úfresh_cythonize   s    

zTestCyCache.fresh_cythonizec             C   sZ  d}d}t j | jd¡}|d d… d }t|dƒ |¡ | j|| jd | j|| jd |  dt	|  
d	¡ƒ¡ t|ƒ ¡ }t  |¡ t|dƒ |¡ | j|| jd t|ƒ ¡ }t  |¡ |  ||d
¡ |  dt	|  
d	¡ƒ¡ t|dƒ |¡ | j|| jd |  dt	|  
d	¡ƒ¡ t|ƒ ¡ }| j||d tt | d¡| d¡¡ƒd d… ¡d d S )Nz
value = 1
z
value = 2
za.pyxéüÿÿÿz.cÚw)r   é   za.c*zC file not changed!é   Ú
é
   )Úmsg)r
   r   r   r   ÚopenÚwriter   r   ÚassertEqualÚlenr   ÚreadÚunlinkZassertNotEqualÚlistÚdifflibZunified_diffÚsplit)r   Zcontent1Zcontent2Úa_pyxÚa_cZa_contents1Za_contents2Ú
a_contentsr   r   r   Útest_cycache_switch   s0    


zTestCyCache.test_cycache_switchc             C   s¸   t j | jd¡}|d d… d }t|dƒ d¡ | j|| jd t j | jt  | j¡d ¡}t	 
|d¡ d	 d
¡¡ t  |¡ | j|| jd t|ƒ ¡ }|  |d	d|d d…  ¡ d S )Nza.pyxr   z.cr   Úpass)r   r   Úwbz
fake stuffÚasciizUnexpected contents: %s...éd   )r
   r   r   r   r    r!   r   r   ÚlistdirÚgzipZGzipFileÚencoder%   r$   r"   )r   r)   r*   Za_cacher+   r   r   r   Útest_cycache_uses_cache<   s    
z#TestCyCache.test_cycache_uses_cachec             C   sÌ   t j | jd¡}|d d… d }|d d… d }|d d… d }t|dƒ d¡ | j|| jd |||g}x*|D ]"}|  t j 	|¡|¡ t  
|¡ qpW | j|| jd x |D ]}|  t j 	|¡|¡ q¬W d S )	Nza.pyxr   z.cz.hz_api.hr   z)cdef public api int foo(int x): return x
)r   )r
   r   r   r   r    r!   r   r   Z
assertTrueÚexistsr%   )r   r)   r*   Za_hZa_api_hZexpectedÚoutputr   r   r   Útest_multi_file_outputI   s    


z"TestCyCache.test_multi_file_outputc             C   sü   t j | jd¡}|d tdƒ … d }t|dƒ d¡ | j|| jdd |  	dt|  
d	¡ƒ¡ t  |¡ | j|| jd
d |  	dt|  
d	¡ƒ¡ t  |¡ | j|| jddd |  	dt|  
d	¡ƒ¡ t  |¡ | j|| jdd
d |  	dt|  
d	¡ƒ¡ d S )Nzoptions.pyxz.pyxz.cr   r-   F)r   Úcplusr   z
options.c*Tr   )r   r8   Zshow_version)r
   r   r   r   r#   r    r!   r   r   r"   r   r%   )r   Zhash_pyxZhash_cr   r   r   Útest_options_invalidationX   s    


z%TestCyCache.test_options_invalidationN)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r,   r4   r7   r9   r   r   r   r   r      s   r   )r'   r   r2   r
   r	   ZCython.Build.Dependenciesr   ZCython.UtilsZCython.TestUtilsr   r   r   r   r   r   Ú<module>   s   