a
    äze  ã                   @   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 )Nú-cúimport sys; sys.exit(0)r   zreturn code was not 0)r   Úassert_python_okÚassertEqual)ÚselfÚt© r   ú-/usr/lib/python3.9/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 )Nr   úsys.exit(0)r   zreturn code should not be 0)r   Úassert_python_failureZassertNotEqual)r	   ÚrcÚoutÚerrr   r   r   Útest_assert_python_failure   s    z+TestScriptHelper.test_assert_python_failurec                 C   s`   |   t¡}t dd¡ W d   ƒ n1 s,0    Y  t|jƒ}|  d|¡ | jd|dd d S )Nr   r   zcommand line:zunexpected command line©Úmsg)ÚassertRaisesÚAssertionErrorr   r   ÚstrÚ	exceptionÚassertIn©r	   Zerror_contextZ	error_msgr   r   r   Útest_assert_python_ok_raises   s
    *
z-TestScriptHelper.test_assert_python_ok_raisesc                 C   s`   |   t¡}t dd¡ W d   ƒ n1 s,0    Y  t|jƒ}|  d|¡ | jd|dd d S )Nr   r   zProcess return code is 0
zunexpected command line.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ƒ|_zt ddd¡ W n6 tyf } z|  d|jd ¡ W Y d }~n
d }~0 0 |  d	|j	¡ |  d	|j	¡ |j
d d }|  tj|d ¡ |  d|¡ |  d
|¡ |  d|¡ W d   ƒ n1 sÜ0    Y  d S )NÚ interpreter_requires_environmentF©Zreturn_valueúbail out of unittestTr   ÚNoner   é   ú-Iú-E)r   ÚpatchÚobjectr   ÚRuntimeErrorÚside_effectÚ_assert_pythonr   ÚargsÚ
call_countÚ	call_argsÚsysÚ
executabler   ÚassertNotIn©r	   Z
mock_popenZmock_ire_funcr   Z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ƒ|_zt ddd¡ W n6 tyf } z|  d|jd ¡ W Y d}~n
d}~0 0 |j	d d }|  
d	|¡ |  
d
|¡ W d  ƒ n1 s¢0    Y  dS )z>Ensure that -I is not passed when the environment is required.r   Tr   r    r   r!   r   Nr#   r$   )r   r%   r&   r   r'   r(   r)   r   r*   r,   r/   r0   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%   r1   r2   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 ©NZ$__cached_interp_requires_environment)Ú
assertTrueÚhasattrr   Ú__dict__©r	   r   r   r   ÚsetUpK   s    ÿz!TestScriptHelperEnvironment.setUpc                 C   s   d t jd< d S r7   )r   r:   r;   r   r   r   ÚtearDownQ   s    z$TestScriptHelperEnvironment.tearDownzsubprocess.check_callc                 C   sx   t j tj¡V tj dd ¡ t dd¡|_|  	t
 ¡ ¡ |  	t
 ¡ ¡ |  d|j¡ W d   ƒ n1 sj0    Y  d S )NÚ
PYTHONHOMEÚ r"   )r   r%   ÚdictÚosÚenvironÚpopÚ
subprocessÚCalledProcessErrorr(   r8   r   r   r   r+   ©r	   Úmock_check_callr   r   r   Ú*test_interpreter_requires_environment_trueU   s    zFTestScriptHelperEnvironment.test_interpreter_requires_environment_truec                 C   sd   t j tj¡B tj dd ¡ t ¡  |  t ¡ ¡ |  	d|j
¡ W d   ƒ n1 sV0    Y  d S )Nr>   r"   )r   r%   r@   rA   rB   rC   r   r   ÚassertFalser   r+   rF   r   r   r   Ú+test_interpreter_requires_environment_false^   s
    zGTestScriptHelperEnvironment.test_interpreter_requires_environment_falsec                 C   sž   t j tj¡| tj dd ¡ t ¡  |  t ¡ ¡ |  t ¡ ¡ |  	d|j
¡ |jd d }|  	tj|d ¡ |  d|¡ W d   ƒ n1 s0    Y  d S )Nr>   r"   r   r$   )r   r%   r@   rA   rB   rC   r   r   rI   r   r+   r,   r-   r.   r   )r	   rG   Zcheck_call_commandr   r   r   Ú-test_interpreter_requires_environment_detailsg   s    zITestScriptHelperEnvironment.test_interpreter_requires_environment_detailsc                 C   sf   t j tj¡D dtjd< |  t ¡ ¡ |  t ¡ ¡ |  d|j	¡ W d   ƒ n1 sX0    Y  d S )NZ
MockedHomer>   r   )
r   r%   r@   rA   rB   r8   r   r   r   r+   rF   r   r   r   Ú5test_interpreter_requires_environment_with_pythonhomes   s
    
zQTestScriptHelperEnvironment.test_interpreter_requires_environment_with_pythonhomeN)r3   r4   r5   Ú__doc__r<   r=   r   r%   rH   rJ   rK   rL   r   r   r   r   r6   H   s   


r6   Ú__main__)rM   rD   r-   rA   Ztest.supportr   Zunittestr   ZTestCaser   r6   r3   Úmainr   r   r   r   Ú<module>   s   =4