U
    ºÛui  ã                   @   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	m
Z
 ddlmZ ddlZddlZddlmZ ddlmZ G d	d
„ d
ejƒZdS )zTests for distutils.spawn.é    N)ÚDistutilsExecError)Úfind_executableÚspawn)Úsupport)Ú
unix_shellé   )Úpy38c                   @   s<   e Zd Zej d¡dd„ ƒZdd„ Zedd„ ƒZ	dd	„ Z
d
S )Ú	TestSpawnzos.name not in ('nt', 'posix')c              	   C   sÞ   |   ¡ }tjdkr6tj |d¡}|  |dt› d¡ ntj |d¡}|  |d¡ t |d¡ t	 
t¡ t|gƒ W 5 Q R X tjdkrªtj |d¡}|  |dt› d¡ ntj |d¡}|  |d	¡ t |d¡ t|gƒ d S )
NÚwin32zfoo.shz#!z
exit 1zfoo.batzexit 1iÿ  z
exit 0zexit 0)ÚmkdtempÚsysÚplatformÚosÚpathÚjoinÚ
write_filer   ÚchmodÚpytestÚraisesr   r   )ÚselfZtmpdirZexe© r   úJ/tmp/pip-unpacked-wheel-9osl9suo/setuptools/_distutils/tests/test_spawn.pyÚ
test_spawn   s     

zTestSpawn.test_spawnc           
      C   s~  |   |d¡}|j}| d¡j}t|ƒ}t |¡}t||d}||ksHt‚tj	dkrjt||d}||ksjt‚| t|ƒ}||ks„t‚W 5 Q R X d| }t||d}|d ks®t‚t
 ¡ |}	d|	d< tjd|dd	X t d
|¡@ t|ƒ}|d ksôt‚| t|ƒ}||kst‚W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X t
 ¡ €}	tj|	d< tjdddd	Z t d
d¡B t|ƒ}|d ks‚t‚| t|ƒ}||ksžt‚W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X t
 ¡ ¦}	|	 dd ¡ tjdtdd4 t d
|¡ t|ƒ}||kst‚W 5 Q R X W 5 Q R X tjd|dd	4 t d
d¡ t|ƒ}||ks\t‚W 5 Q R X W 5 Q R X W 5 Q R X d S )Nz.exeÚ )r   r
   Z
dontexist_ÚPATHzdistutils.spawn.os.confstrT)Zreturn_valueÚcreatezdistutils.spawn.os.defpath)Zside_effectr   )Ú_make_executableÚnameÚwith_suffixÚstrr   ÚPathr   ÚAssertionErrorr   r   Ú	os_helperZEnvironmentVarGuardÚmockÚpatchr   ÚpathsepÚpopÚ
ValueError)
r   Útmp_pathZprogram_pathÚprogramZprogram_noeextÚfilenameZtmp_dirÚrvZdont_exist_programÚenvr   r   r   Útest_find_executable/   s€    


  ÿ
þ6

  ÿ
þ6
  ÿ
þ"  ÿ
þzTestSpawn.test_find_executablec                 C   s.   |   d¡ |¡}|jddd | tj¡ |S )Nr)   r   zutf-8)Úencoding)Újoinpathr   Ú
write_textr   ÚstatÚS_IXUSR)r(   Úextr)   r   r   r   r   w   s    zTestSpawn._make_executablec              	   C   s6   t  t¡}tdgƒ W 5 Q R X dt|jƒks2t‚d S )Nzdoes-not-existzcommand 'does-not-exist' failed)r   r   r   r   r   Úvaluer!   )r   Úctxr   r   r   Útest_spawn_missing_exe€   s    z TestSpawn.test_spawn_missing_exeN)Ú__name__Ú
__module__Ú__qualname__r   ÚmarkZskipifr   r-   Ústaticmethodr   r6   r   r   r   r   r	      s   

H
r	   )Ú__doc__r   r1   r   Zunittest.mockr#   Údistutils.errorsr   Údistutils.spawnr   r   Zdistutils.testsr   r   r   Ztest.supportr   Úcompatr   r"   ZTempdirManagerr	   r   r   r   r   Ú<module>   s   