B
    Ã S]  ã               @   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	   ú(lib/python3.7/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_failureZassertNotEqual)r   Z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 )Nr2   )r   r5   )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Ú
subprocessZCalledProcessErrorr!   r3   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 )Nr8   r   )r   r   r:   r;   r<   r=   r   r   ÚassertFalser   r$   )r   r?   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 )Nr8   r   r   z-E)r   r   r:   r;   r<   r=   r   r   rA   r   r$   r%   r&   r'   r   )r   r?   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
MockedHomer8   r   )
r   r   r:   r;   r<   r3   r   r   r   r$   )r   r?   r	   r	   r
   Ú5test_interpreter_requires_environment_with_pythonhomes   s
    
zQTestScriptHelperEnvironment.test_interpreter_requires_environment_with_pythonhomeN)r.   r/   r0   Ú__doc__r6   r7   r   r   r@   rB   rC   rD   r	   r	   r	   r
   r1   H   s   		r1   Ú__main__)rE   r>   r&   r;   Ztest.supportr   Zunittestr   ZTestCaser   r1   r.   Úmainr	   r	   r	   r
   Ú<module>   s   =4