B
    18™\  ã               @   st   d Z ddlZddlZddlZddlmZ ddlZddlmZ G dd„ dejƒZ	G dd„ dejƒZ
ed	krpe ¡  dS )
zEUnittests for test.support.script_helper.  Who tests the test helper?é    N)Úscript_helper)Úmockc               @   sP   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze d	¡d
d„ ƒZ	e d	¡dd„ ƒZ
dS )ÚTestScriptHelperc             C   s"   t  dd¡}|  d|d d¡ d S )Nz-czimport sys; sys.exit(0)r   zreturn code was not 0)r   Úassert_python_okÚassertEqual)ÚselfÚt© r	   ú[/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_script_helper.pyÚtest_assert_python_ok   s    z&TestScriptHelper.test_assert_python_okc             C   s$   t  dd¡\}}}|  d|d¡ d S )Nz-czsys.exit(0)r   zreturn code should not be 0)r   Úassert_python_failureÚassertNotEqual)r   ÚrcÚoutÚerrr	   r	   r
   Útest_assert_python_failure   s    z+TestScriptHelper.test_assert_python_failurec          	   C   sL   |   t¡}t dd¡ W d Q R X t|jƒ}|  d|¡ | jd|dd d S )Nz-czsys.exit(0)zcommand line:zunexpected command line)Úmsg)ÚassertRaisesÚAssertionErrorr   r   ÚstrÚ	exceptionÚassertIn)r   Úerror_contextÚ	error_msgr	   r	   r
   Útest_assert_python_ok_raises   s
    
z-TestScriptHelper.test_assert_python_ok_raisesc          	   C   sL   |   t¡}t dd¡ W d Q R X t|jƒ}|  d|¡ | jd|dd d S )Nz-czimport sys; sys.exit(0)zProcess return code is 0
zunexpected command line.)r   )r   r   r   r   r   r   r   )r   r   r   r	   r	   r
   Ú!test_assert_python_failure_raises   s    
z2TestScriptHelper.test_assert_python_failure_raiseszsubprocess.Popenc             C   sÔ   t jjtddd¸}tdƒ|_yt ddd¡ W n4 tk
rd } z|  d|jd ¡ W d d }~X Y nX |  d	|j	¡ |  d	|j	¡ |j
d d }|  tj|d ¡ |  d|¡ |  d
|¡ |  d|¡ W d Q R X d S )NÚ interpreter_requires_environmentF)Úreturn_valuezbail out of unittestTz-cÚNoner   é   z-Iz-E)r   ÚpatchÚobjectr   ÚRuntimeErrorÚside_effectÚ_assert_pythonr   ÚargsÚ
call_countÚ	call_argsÚsysÚ
executabler   ÚassertNotIn)r   Ú
mock_popenÚmock_ire_funcr   Úpopen_commandr	   r	   r
   Ú1test_assert_python_isolated_when_env_not_required&   s    

$zBTestScriptHelper.test_assert_python_isolated_when_env_not_requiredc             C   sš   t jjtddd~}tdƒ|_yt ddd¡ W n4 tk
rd } z|  d|jd ¡ W dd}~X Y nX |j	d d }|  
d	|¡ |  
d
|¡ W dQ R X dS )z>Ensure that -I is not passed when the environment is required.r   T)r   zbail out of unittestz-cr   r   Nz-Iz-E)r   r    r!   r   r"   r#   r$   r   r%   r'   r*   )r   r+   r,   r   r-   r	   r	   r
   Ú4test_assert_python_not_isolated_when_env_is_required8   s    

$zETestScriptHelper.test_assert_python_not_isolated_when_env_is_requiredN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r    r.   r/   r	   r	   r	   r
   r      s   r   c               @   sh   e Zd ZdZdd„ Zdd„ Ze d¡dd„ ƒZe d¡d	d
„ ƒZ	e d¡dd„ ƒZ
e d¡dd„ ƒZdS )ÚTestScriptHelperEnvironmentz5Code coverage for interpreter_requires_environment().c             C   s   |   ttdƒ¡ d tjd< d S )NÚ$__cached_interp_requires_environment)Ú
assertTrueÚhasattrr   Ú__dict__)r   r	   r	   r
   ÚsetUpK   s    z!TestScriptHelperEnvironment.setUpc             C   s   d t jd< d S )Nr4   )r   r7   )r   r	   r	   r
   ÚtearDownQ   s    z$TestScriptHelperEnvironment.tearDownzsubprocess.check_callc          	   C   sd   t j tj¡L tj dd ¡ t dd¡|_|  	t
 ¡ ¡ |  	t
 ¡ ¡ |  d|j¡ W d Q R X d S )NÚ
PYTHONHOMEÚ r   )r   r    ÚdictÚosÚenvironÚpopÚ
subprocessÚCalledProcessErrorr#   r5   r   r   r   r&   )r   Úmock_check_callr	   r	   r
   Ú*test_interpreter_requires_environment_trueU   s    zFTestScriptHelperEnvironment.test_interpreter_requires_environment_truec          	   C   sP   t j tj¡8 tj dd ¡ t ¡  |  t ¡ ¡ |  	d|j
¡ W d Q R X d S )Nr:   r   )r   r    r<   r=   r>   r?   r   r   ÚassertFalser   r&   )r   rB   r	   r	   r
   Ú+test_interpreter_requires_environment_false^   s
    zGTestScriptHelperEnvironment.test_interpreter_requires_environment_falsec          	   C   sŠ   t j tj¡r tj dd ¡ t ¡  |  t ¡ ¡ |  t ¡ ¡ |  	d|j
¡ |jd d }|  	tj|d ¡ |  d|¡ W d Q R X d S )Nr:   r   r   z-E)r   r    r<   r=   r>   r?   r   r   rD   r   r&   r'   r(   r)   r   )r   rB   Zcheck_call_commandr	   r	   r
   Ú-test_interpreter_requires_environment_detailsg   s    zITestScriptHelperEnvironment.test_interpreter_requires_environment_detailsc          	   C   sR   t j tj¡: dtjd< |  t ¡ ¡ |  t ¡ ¡ |  d|j	¡ W d Q R X d S )NZ
MockedHomer:   r   )
r   r    r<   r=   r>   r5   r   r   r   r&   )r   rB   r	   r	   r
   Ú5test_interpreter_requires_environment_with_pythonhomes   s
    
zQTestScriptHelperEnvironment.test_interpreter_requires_environment_with_pythonhomeN)r0   r1   r2   Ú__doc__r8   r9   r   r    rC   rE   rF   rG   r	   r	   r	   r
   r3   H   s   		r3   Ú__main__)rH   r@   r(   r=   Ztest.supportr   Úunittestr   ÚTestCaser   r3   r0   Úmainr	   r	   r	   r
   Ú<module>   s   =4