U
    {±Ëhš  ã                   @   sp   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 G dd„ deƒZdS )é    N)Ú
CythonTestc                   @   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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ÚtempfileÚmkdtempÚosÚpathÚisdirÚtemp_dirÚsrc_dirÚ	cache_dir©Úself© r   úB/tmp/pip-unpacked-wheel-fhl22ezh/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 r   )ÚCythonÚUtilsÚclear_function_cachesZBuildZDependenciesZ	_dep_treeZ	cythonize©r   ÚargsÚkwargsr   r   r   Úfresh_cythonize   s    

zTestCyCache.fresh_cythonizec                 O   s   t j ¡  t jjj||Ž d S r   )r   r   r   ZCompilerZMainÚcompiler   r   r   r   Úfresh_compile!   s    
zTestCyCache.fresh_compilec           
      C   s²  d}d}t j | jd¡}|d d… d }t|dƒ}| |¡ W 5 Q R X ||| jd ||| jd |  dt|  	d	¡ƒ¡ t|ƒ}| 
¡ }W 5 Q R X t  |¡ t|dƒ}| |¡ W 5 Q R X ||| jd t|ƒ}| 
¡ }W 5 Q R X t  |¡ |  ||d
¡ |  dt|  	d	¡ƒ¡ t|dƒ}| |¡ W 5 Q R X ||| jd |  dt|  	d	¡ƒ¡ t|ƒ}| 
¡ }	W 5 Q R X | j|	|d tt |	 d¡| d¡¡ƒd d… ¡d d S )Nz
value = 1
z
value = 2
úa.pyxéüÿÿÿú.cÚw©r   é   za.c*zC file not changed!é   Ú
é
   )Úmsg)r   r   r   r   ÚopenÚwriter   ÚassertEqualÚlenr   ÚreadÚunlinkZassertNotEqualÚlistÚdifflibZunified_diffÚsplit)
r   Úcompilation_methodZcontent1Zcontent2Úa_pyxÚa_cÚfZa_contents1Za_contents2Ú
a_contentsr   r   r   Ú_test_cycache_switch&   sH    




 
 ÿÿþz TestCyCache._test_cycache_switchc                 C   s   |   | j¡ d S r   )r:   r   r   r   r   r   Útest_cycache_switch_cythonizeP   s    z)TestCyCache.test_cycache_switch_cythonizec                 C   s   |   | j¡ d S r   )r:   r!   r   r   r   r   Útest_cycache_switch_compileS   s    z'TestCyCache.test_cycache_switch_compilec              	   C   sÞ   t j | jd¡}|d d… d }t|dƒ}| d¡ W 5 Q R X ||| jd t j | jt  | j¡d ¡}t 	|d¡}| d	¡ W 5 Q R X t  
|¡ ||| jd t|ƒ}| ¡ }W 5 Q R X |  |d
d|d d…  ¡ d S )Nr"   r#   r$   r%   Úpassr&   r   Úwbs
   fake stuffz
fake stuffzUnexpected contents: %s...éd   )r   r   r   r   r,   r-   r   ÚlistdirÚgzipÚGzipFiler1   r0   r.   )r   r5   r6   r7   r8   Za_cacheZgzipfiler9   r   r   r   Ú_test_cycache_uses_cacheV   s    

ÿz$TestCyCache._test_cycache_uses_cachec                 C   s   |   | j¡ d S r   )rC   r   r   r   r   r   Ú!test_cycache_uses_cache_cythonizek   s    z-TestCyCache.test_cycache_uses_cache_cythonizec                 C   s   |   | j¡ d S r   )rC   r!   r   r   r   r   Útest_cycache_uses_cache_compilen   s    z+TestCyCache.test_cycache_uses_cache_compilec              	   C   s°   t j | jd¡}|d d… d }|d d… d }t|dƒ}| d¡ W 5 Q R X ||| jdd |  t j |¡|¡ t  	|¡ t  	|¡ ||| jdd |  t j |¡|¡ d S )	Nr"   r#   r$   z.htmlr%   r=   Údefault)r   Zannotate©
r   r   r   r   r,   r-   r   Ú
assertTrueÚexistsr1   )r   r5   r6   r7   Za_htmlr8   r   r   r   Ú_test_cycache_annotationq   s    

z$TestCyCache._test_cycache_annotationc                 C   s   |   | j¡ d S r   )rJ   r   r   r   r   r   Ú!test_cycache_annotation_cythonize   s    z-TestCyCache.test_cycache_annotation_cythonizec                 C   s   |   | j¡ d S r   )rJ   r!   r   r   r   r   Útest_cycache_annotation_compile‚   s    z+TestCyCache.test_cycache_annotation_compilec           	   	   C   sÐ   t j | jd¡}|d d… d }|d d… d }|d d… d }t|dƒ}| d¡ W 5 Q R X ||| jd |||g}|D ]"}|  t j |¡|¡ t  	|¡ q|||| jd |D ]}|  t j |¡|¡ q²d S )	Nr"   r#   r$   z.hz_api.hr%   z)cdef public api int foo(int x): return x
r&   rG   )	r   r5   r6   r7   Za_hZa_api_hr8   ÚexpectedÚoutputr   r   r   Ú_test_multi_file_output…   s    
z#TestCyCache._test_multi_file_outputc                 C   s   |   | j¡ d S r   )rO   r   r   r   r   r   Ú test_multi_file_output_cythonize™   s    z,TestCyCache.test_multi_file_output_cythonizec                 C   s   |   | j¡ d S r   )rO   r!   r   r   r   r   Útest_multi_file_output_compileœ   s    z*TestCyCache.test_multi_file_output_compilec              	   C   s>  t j | jd¡}|d tdƒ … d }|d tdƒ … d }t|dƒ}| d¡ W 5 Q R X ||| jdd |  d	t|  	d
¡ƒ¡ t  
|¡ ||| jdd |  dt|  	d
¡ƒ¡ zt  
|¡ W n tk
rÞ   t  
|¡ Y nX ||| jddd |  dt|  	d
¡ƒ¡ t  
|¡ ||| jddd |  dt|  	d
¡ƒ¡ d S )Nzoptions.pyxz.pyxr$   z.cppr%   r=   F)r   Úcplusr'   z
options.c*Tr(   )r   rR   Zshow_version)r   r   r   r   r/   r,   r-   r   r.   r   r1   ÚFileNotFoundError)r   r5   Zhash_pyxZhash_cZhash_cppr8   r   r   r   Ú_test_options_invalidationŸ   s&    

z&TestCyCache._test_options_invalidationc                 C   s   |   | j¡ d S r   )rT   r   r   r   r   r   Ú#test_options_invalidation_cythonize¾   s    z/TestCyCache.test_options_invalidation_cythonizec                 C   s   |   | j¡ d S r   )rT   r!   r   r   r   r   Ú!test_options_invalidation_compileÁ   s    z-TestCyCache.test_options_invalidation_compileN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r!   r:   r;   r<   rC   rD   rE   rJ   rK   rL   rO   rP   rQ   rT   rU   rV   r   r   r   r   r      s&   *r   )r3   r   rA   r   Úsysr	   ZunittestZCython.Build.Dependenciesr   ZCython.Compiler.MainZCython.UtilsZCython.TestUtilsr   r   r   r   r   r   Ú<module>   s   