o
    wi                     @   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-testTEST_TMP)prefixdirsrccache)
r   setUptempfilemkdtempospathisdirtemp_dirsrc_dir	cache_dirself r   [/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/Cython/Build/Tests/TestCyCache.pyr	      s   
zTestCyCache.setUpc                 C   s   t  tj| j|S N)globr   r   joinr   )r   	file_globr   r   r   cache_files   s   zTestCyCache.cache_filesc                 O   s,   t j  d t jj_t jjj|i | d S r   )CythonUtilsclear_function_cachesBuildDependencies	_dep_tree	cythonizer   argskwargsr   r   r   fresh_cythonize   s   

zTestCyCache.fresh_cythonizec                 O   s"   t j  t jjj|i | d S r   )r   r   r   Compiler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 d    n1 s)w   Y  ||| jd ||| jd | dt| 	d	 t|}|
 }W d    n1 sZw   Y  t | t|d}|| W d    n1 syw   Y  ||| jd t|}|
 }W d    n1 sw   Y  t | | ||d
 | dt| 	d	 t|d}|| W d    n1 sw   Y  ||| jd | dt| 	d	 t|}|
 }	W d    n1 sw   Y  | 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unlinkassertNotEquallistdifflibunified_diffsplit)
r   compilation_methodcontent1content2a_pyxa_cfa_contents1a_contents2
a_contentsr   r   r   _test_cycache_switch&   sP   









z TestCyCache._test_cycache_switchc                 C      |  | j d S r   )rH   r%   r   r   r   r   test_cycache_switch_cythonizeP      z)TestCyCache.test_cycache_switch_cythonizec                 C   rI   r   )rH   r)   r   r   r   r   test_cycache_switch_compileS   rK   z'TestCyCache.test_cycache_switch_compilec                 C   s  t j| jd}|d d d }t|d}|d W d    n1 s%w   Y  ||| jd t j| jt | jd }t	|d}|d	 W d    n1 sUw   Y  t 
| ||| jd t|}| }W d    n1 syw   Y  | |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   r4   r5   r   listdirgzipGzipFiler9   r8   r6   )r   r?   rB   rC   rD   a_cachegzipfilerG   r   r   r   _test_cycache_uses_cacheV   s$   


z$TestCyCache._test_cycache_uses_cachec                 C   rI   r   )rU   r%   r   r   r   r   !test_cycache_uses_cache_cythonizek   rK   z-TestCyCache.test_cycache_uses_cache_cythonizec                 C   rI   r   )rU   r)   r   r   r   r   test_cycache_uses_cache_compilen   rK   z+TestCyCache.test_cycache_uses_cache_compilec                 C   s   t j| jd}|d d d }|d d d }t|d}|d W d    n1 s-w   Y  ||| jdd | t j|| t 	| t 	| ||| jdd | t j|| d S )	Nr*   r+   r,   z.htmlr-   rM   default)r   annotate
r   r   r   r   r4   r5   r   
assertTrueexistsr9   )r   r?   rB   rC   a_htmlrD   r   r   r   _test_cycache_annotationq   s   

z$TestCyCache._test_cycache_annotationc                 C   rI   r   )r^   r%   r   r   r   r   !test_cycache_annotation_cythonize   rK   z-TestCyCache.test_cycache_annotation_cythonizec                 C   rI   r   )r^   r)   r   r   r   r   test_cycache_annotation_compile   rK   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 d    n1 s5w   Y  ||| jd |||g}|D ]}| t j|| t 	| qH||| jd |D ]}| t j|| qcd S )	Nr*   r+   r,   z.hz_api.hr-   z)cdef public api int foo(int x): return x
r.   rZ   )	r   r?   rB   rC   a_ha_api_hrD   expectedoutputr   r   r   _test_multi_file_output   s    
z#TestCyCache._test_multi_file_outputc                 C   rI   r   )re   r%   r   r   r   r    test_multi_file_output_cythonize   rK   z,TestCyCache.test_multi_file_output_cythonizec                 C   rI   r   )re   r)   r   r   r   r   test_multi_file_output_compile   rK   z*TestCyCache.test_multi_file_output_compilec                 C   sP  t j| jd}|d td  d }|d td  d }t|d}|d W d    n1 s3w   Y  ||| jdd | d	t| 	d
 t 
| ||| jdd | dt| 	d
 zt 
| W n tyx   t 
| Y nw ||| jddd | dt| 	d
 t 
| ||| jddd | dt| 	d
 d S )Nzoptions.pyxz.pyxr,   z.cppr-   rM   F)r   cplusr/   z
options.c*Tr0   )r   rh   show_version)r   r   r   r   r7   r4   r5   r   r6   r   r9   FileNotFoundError)r   r?   hash_pyxhash_chash_cpprD   r   r   r   _test_options_invalidation   s*   

z&TestCyCache._test_options_invalidationc                 C   rI   r   )rn   r%   r   r   r   r   #test_options_invalidation_cythonize   rK   z/TestCyCache.test_options_invalidation_cythonizec                 C   rI   r   )rn   r)   r   r   r   r   !test_options_invalidation_compile   rK   z-TestCyCache.test_options_invalidation_compileN)__name__
__module____qualname__r	   r   r%   r)   rH   rJ   rL   rU   rV   rW   r^   r_   r`   re   rf   rg   rn   ro   rp   r   r   r   r   r      s(    *r   )r<   r   rQ   r   sysr
   unittestCython.Build.Dependenciesr   Cython.Compiler.MainCython.UtilsCython.TestUtilsr   r   r   r   r   r   <module>   s    