B
    È S]  ã               @   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	 ej
dkrNdndZe edke¡G dd	„ d	ejejƒƒZd
d„ Zedkr’e	eƒ ƒ dS )z"Tests for distutils._msvccompiler.é    N)ÚDistutilsPlatformError)Úsupport)Úrun_unittestZwin32zThese tests are only for win32c               @   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 )ÚmsvccompilerTestCasec             C   sB   dd l m} dd„ }|j}||_z|  t|jd¡ W d ||_X d S )Nr   c             S   s   dS )N)NN© )Ú	plat_specr   r   ú2lib/python3.7/distutils/tests/test_msvccompiler.pyÚ_find_vcvarsall   s    z>msvccompilerTestCase.test_no_compiler.<locals>._find_vcvarsallzwont find this version)Údistutils._msvccompilerÚ_msvccompilerr	   ZassertRaisesr   Ú_get_vc_env)Úselfr   r	   Úold_find_vcvarsallr   r   r   Útest_no_compiler   s    
z%msvccompilerTestCase.test_no_compilerc                sb   dd l m} |j‰ ‡ fdd„}||_z0| ¡ }| ¡  |  d|j¡ |  d|j¡ W d ˆ |_X d S )Nr   c                s   ˆ | ƒd d fS )Nr   r   )r   )r   r   r   r	   (   s    zCmsvccompilerTestCase.test_compiler_options.<locals>._find_vcvarsallz/MTz/MD)r
   r   r	   ÚMSVCCompilerÚ
initializeÚassertInZcompile_optionsZassertNotIn)r   r   r	   Úcompilerr   )r   r   Útest_compiler_options#   s    z*msvccompilerTestCase.test_compiler_optionsc          
      s|   dd l m} |j‰ ‡ fdd„}||_zJ|  ¡ }| ¡ }| ¡  | |¡ |  tj	 
tj	 |tj	 t¡¡¡¡ W d ˆ |_X d S )Nr   c                s   ˆ | ƒd t fS )Nr   )Ú__file__)r   )r   r   r   r	   :   s    zAmsvccompilerTestCase.test_vcruntime_copy.<locals>._find_vcvarsall)r
   r   r	   Úmkdtempr   r   Ú_copy_vcruntimeÚ
assertTrueÚosÚpathÚisfileÚjoinÚbasenamer   )r   r   r	   Útempdirr   r   )r   r   Útest_vcruntime_copy4   s    
z(msvccompilerTestCase.test_vcruntime_copyc          
   C   sz   dd l m} |  ¡ }| ¡ }| ¡  |j}|  tj 	|¡|p>d¡ | 
|¡ |  tj 	tj |tj |¡¡¡|prd¡ d S )Nr   z<None>)r
   r   r   r   r   Z_vcruntime_redistr   r   r   r   r   ZassertFalser   r   )r   r   r   r   Zdllr   r   r   Útest_vcruntime_skip_copyH   s    
z-msvccompilerTestCase.test_vcruntime_skip_copyc          	   C   s€   dd l m} d}d}tj dd ¡}|tj|< z2| d¡}|  | ¡ |¡ |  ||| ¡  ¡ W d tj |¡ |rz|tjd< X d S )Nr   u   á¹°á¸–á¹¤á¹ªâ”…á¹¼áº¨á¹œu	   â‚ƒâ´â‚…ZDISTUTILS_USE_SDKZx86)	r
   r   r   ÚenvironÚpopr   r   ÚlowerZassertEqual)r   r   Ztest_varZ
test_valueZold_distutils_use_sdkÚenvr   r   r   Útest_get_vc_env_unicodeV   s    

z,msvccompilerTestCase.test_get_vc_env_unicodec             C   sJ   dd l m} | ¡ \}}|r<|  |d¡ |  tj |¡¡ n
t 	d¡‚d S )Nr   é   zVS 2017 is not installed)
r
   r   Z_find_vc2017ÚassertGreaterEqualr   r   r   ÚisdirÚunittestÚSkipTest)r   r   Úversionr   r   r   r   Útest_get_vc2017h   s    z$msvccompilerTestCase.test_get_vc2017c             C   sJ   dd l m} | ¡ \}}|r<|  |d¡ |  tj |¡¡ n
t 	d¡‚d S )Nr   é   zVS 2015 is not installed)
r
   r   Z_find_vc2015r'   r   r   r   r(   r)   r*   )r   r   r+   r   r   r   r   Útest_get_vc2015t   s    z$msvccompilerTestCase.test_get_vc2015N)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r%   r,   r.   r   r   r   r   r      s   r   c               C   s
   t  t¡S )N)r)   Z	makeSuiter   r   r   r   r   Ú
test_suite€   s    r2   Ú__main__)Ú__doc__Úsysr)   r   Zdistutils.errorsr   Zdistutils.testsr   Ztest.supportr   ÚplatformZSKIP_MESSAGEZ
skipUnlessZTempdirManagerZTestCaser   r2   r/   r   r   r   r   Ú<module>   s   
p