a
    jUb                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZ d dlmZ G dd dZG d	d
 d
ZG dd dZdd Zdd ZG dd dZdS )    N)TemporaryFile)exec_command)get_pythonexe)tempdirassert_assert_warns)StringIOc                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
redirect_stdoutz9Context manager to redirect stdout for exec_command test.Nc                 C   s   |pt j| _d S N)sysstdout_stdout)selfr    r   Flib/python3.9/site-packages/numpy/distutils/tests/test_exec_command.py__init__   s    zredirect_stdout.__init__c                 C   s   t j| _| jt _d S r
   )r   r   
old_stdoutr   r   r   r   r   	__enter__   s    zredirect_stdout.__enter__c                 C   s    | j   | jt_| j   d S r
   )r   flushr   r   r   closer   exc_type	exc_value	tracebackr   r   r   __exit__   s    
zredirect_stdout.__exit__)N__name__
__module____qualname____doc__r   r   r   r   r   r   r   r	      s   
r	   c                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
redirect_stderrz9Context manager to redirect stderr for exec_command test.Nc                 C   s   |pt j| _d S r
   )r   stderr_stderr)r   r"   r   r   r   r      s    zredirect_stderr.__init__c                 C   s   t j| _| jt _d S r
   )r   r"   
old_stderrr#   r   r   r   r   r   !   s    zredirect_stderr.__enter__c                 C   s    | j   | jt_| j   d S r
   )r#   r   r$   r   r"   r   r   r   r   r   r   %   s    
zredirect_stderr.__exit__)Nr   r   r   r   r   r!      s   
r!   c                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )emulate_nonposixz.Context manager to emulate os.name != 'posix' 	non-posixc                 C   s
   || _ d S r
   )	_new_name)r   Zosnamer   r   r   r   -   s    zemulate_nonposix.__init__c                 C   s   t j| _| jt _d S r
   )osname	_old_namer'   r   r   r   r   r   0   s    zemulate_nonposix.__enter__c                 C   s   | j t_d S r
   )r*   r(   r)   r   r   r   r   r   4   s    zemulate_nonposix.__exit__N)r&   r   r   r   r   r   r%   +   s   
r%   c                   C   sF  t t l tt B tt td W d    n1 s@0    Y  W d    n1 s^0    Y  W d    n1 s|0    Y  tjdkrBt	  t t l tt B tt td W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s80    Y  d S )Ncd '.'posix)
r	   r   r!   r   r   DeprecationWarningr   r(   r)   r%   r   r   r   r   test_exec_command_stdout8   s    
d
r.   c                   C   sJ  t tddl tt B tt td W d    n1 sD0    Y  W d    n1 sb0    Y  W d    n1 s0    Y  tjdkrFt	  t t l tt B tt td W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s<0    Y  d S )Nzw+)moder+   r,   )
r	   r   r!   r   r   r-   r   r(   r)   r%   r   r   r   r   test_exec_command_stderrP   s    
d
r0   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestExecCommandc                 C   s   t  | _d S r
   )r   pyexer   r   r   r   setupa   s    zTestExecCommand.setupc                 K   sV   t  d\}}t|dk t|dk t  d| j \}}t|dk t|dk d S )Nzcmd /C echo path=%path%r    z3"%s" -c "import sys;sys.stderr.write(sys.platform)"Zwin32)r   r   r2   r   kwssor   r   r   check_ntd   s    zTestExecCommand.check_ntc                 K   s  t j di |\}}t|dk t|dk t j di |\}}t|dk t|dk t j dddi|\}}t|dk t|dk t j di |\}}t|dk t|dk d	tjvrd
tjd	< t j di |\}}t|dk t|d
k t j dd	di|\}}t|dk t|dk t j di |\}}t|dk t|d
k tjd	= t j di |\}}t|dk t|dk t j di |\}}t|dk t|dk t j di |\}}t|dk t|dk t j d| j fi |\}}t|dk t|dk d S )N
echo Hellor   Hello	echo $AAAr4   echo "$AAA"ZAAAZTereZBBBZHiecho "$BBB"ZHeythis_is_not_a_commandecho path=$PATHz1"%s" -c "import sys,os;sys.stderr.write(os.name)"r,   )r:   )r<   )r=   )r=   )r>   )r>   )r>   )r>   )r?   )r@   )r   r   r(   environr2   r5   r   r   r   check_posixn   sT    

zTestExecCommand.check_posixc                 G   s   t j d| j fi |\}}t|dk t|dk t j d| j fi |\}}t|dk t|dk t j d| j fi |\}}t|dk t|dk t j d| j fi |\}}t|dk t|d	k d S )
Nz"%s" -c "raise 'Ignore me.'"r   r4   zV"%s" -c "import sys;sys.stderr.write('0');sys.stderr.write('1');sys.stderr.write('2')"Z012z!"%s" -c "import sys;sys.exit(15)"   z"%s" -c "print('Heipa'")ZHeipa)r   r2   r   r5   r   r   r   check_basic   s<    



zTestExecCommand.check_basicc              	   K   s   t  }d}tj||}t|d}|d W d    n1 sD0    Y  tjd| j|f fi |\}}t|dk t|dk tjd| j|f fd|i|\}}t|dk t|dk W d    n1 s0    Y  d S )	Nfilewr;   z("%s" -c "f = open('%s', 'r'); f.close()"r   r4   z9"%s" -c "f = open('%s', 'r'); print(f.read()); f.close()"Z
execute_in)	r   r(   pathjoinopenwriter   r2   r   )r   r6   ZtmpdirfnZtmpfilefr7   r8   r   r   r   check_execute_in   s2    (

z TestExecCommand.check_execute_inc              
   C   s   t t  tt  ttn tjdkrF| jdd | jdd n"tjdkrh| jdd | jdd | j	dd | j	dd W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr,   r   )Zuse_tee   nt)
r	   r   r!   r   r-   r(   r)   rB   r9   rM   r   r   r   r   
test_basic   s    


zTestExecCommand.test_basicN)	r   r   r   r3   r9   rB   rD   rM   rP   r   r   r   r   r1   `   s   
4r1   )r(   r   Ztempfiler   Znumpy.distutilsr   Znumpy.distutils.exec_commandr   Znumpy.testingr   r   r   ior   r	   r!   r%   r.   r0   r1   r   r   r   r   <module>   s   