o
    °ó®g“  ã                   @   sØ   d dl Z d dlZd dl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mZmZmZ eedƒZdd„ ZG dd	„ d	ejƒZe eƒ d
¡G dd„ dejƒƒZG dd„ dejƒZdd„ Zedkrjeƒ  dS dS )é    N)Úsupport)Ú	os_helper)Úspawn_pythonÚkill_pythonÚassert_python_okÚassert_python_failureÚ interpreter_requires_environmentZgettotalrefcountc                 C   s   t | ƒ}|  ¡ }||fS ©N)r   Úwait)ÚpÚdataÚ
returncode© r   úH/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_cmd_line.pyÚ_kill_python_and_exit_code   s   r   c                   @   sP  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
 eƒ d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Ze
 ejd¡dd„ ƒZe
 ejd¡dd„ ƒZe
 ejdkd ¡d!d"„ ƒZe
 ejdkd ¡d#d$„ ƒZe
 ejd%kptejd&¡d'd(„ ƒZd)d*„ Zd+d,„ Zd-d.„ Z d/d0„ Z!d1d2„ Z"d3d4„ Z#d5d6„ Z$d7d8„ Z%d9d:„ Z&d;d<„ Z'd=d>„ Z(d?d@„ Z)dAdB„ Z*e
 e+j,dCkdD¡e
 ejdEkdF¡dGdH„ ƒƒZ-dIdJ„ Z.dKdL„ Z/dMdN„ Z0dOdP„ Z1dQdR„ Z2dSdT„ Z3dUdV„ Z4e
 eƒ dW¡dXdY„ ƒZ5dZd[„ Z6d\d]„ Z7d^d^d_œd`da„Z8dbdc„ Z9dudedf„Z:dgdh„ Z;didj„ Z<dkdl„ Z=dmdn„ Z>e
 ejdkdo¡dpdq„ ƒZ?drds„ Z@dtS )vÚCmdLineTestc                 C   s   t dƒ t dƒ d S )NÚ.z< .)r   ©Úselfr   r   r   Útest_directories   s   zCmdLineTest.test_directoriesc                 C   sB   t |Ž \}}}|  |dkp| d¡¡ |  d|¡ |  d|¡ d S )Nó    ó   
s	   Traceback)r   Ú
assertTrueÚendswithÚassertNotIn)r   Zcmd_lineÚrcÚoutÚerrr   r   r   Úverify_valid_flag"   s   zCmdLineTest.verify_valid_flagc                 C   s   |   d¡ |   d¡ d S )Nz-Oz-OO©r   r   r   r   r   Útest_optimize(   s   
zCmdLineTest.test_optimizec                 C   ó   |   d¡ d S )Nú-Sr   r   r   r   r   Útest_site_flag,   ó   zCmdLineTest.test_site_flagc                 C   sB   t dƒ\}}}| ¡ }|  d|d ¡ d |dd … ¡ d¡ d S )Nz-hs   usager   r   é   Úascii)r   Ú
splitlinesÚassertInÚjoinÚdecode)r   r   r   r   Úlinesr   r   r   Ú
test_usage/   s   zCmdLineTest.test_usagec                 C   sT   dt jd d…   d¡}dD ]}t|ƒ\}}}|  | |¡¡ |  | |¡¡ qd S )NzPython %d.%dé   r&   )z-Vz	--versionz-VV)ÚsysÚversion_infoÚencoder   ZassertFalseÚ
startswithr   )r   ÚversionZswitchr   r   r   r   r   r   Útest_version7   s   ýzCmdLineTest.test_versionc                 C   s8   t dƒ\}}}|  d|¡ t dƒ\}}}|  d|¡ d S )Nz-vs   stack overflowz-vv)r   r   ©r   r   r   r   r   r   r   Útest_verbose>   s   zCmdLineTest.test_verbosez6Cannot run -E tests when PYTHON env vars are required.c                 C   s:   dd„ }|ƒ }|   |i ¡ |ddƒ}|   |dddœ¡ d S )Nc                  W   s4   t jdf|  } | d7 } t | ¡}t| ¡ d ƒ}|S )Nú-E)ú-cú import sys; print(sys._xoptions)r   )r.   Ú
executableÚ
subprocessÚcheck_outputÚevalr'   )Úargsr   Úoptsr   r   r   Úget_xoptionsJ   s
   
z/CmdLineTest.test_xoptions.<locals>.get_xoptionsz-Xaz	-Xb=c,d=eTzc,d=e)ÚaÚb)ÚassertEqual)r   r?   r>   r   r   r   Útest_xoptionsG   s
   	
zCmdLineTest.test_xoptionsc                    s„   ‡ fdd„}d}|d|ƒ\}}}ˆ   | ¡ d¡ ˆ   |d¡ |ddd|ƒ\}}}ˆ   | ¡ d	¡ tr:ˆ  |d
¡ d S ˆ   |d¡ d S )Nc                     sd   t jg}| | ¡ tj}tj|||d}| ¡ \}}|j ¡  |j	 ¡  |j
}ˆ  |d¡ |||fS )N©ÚstdoutÚstderrr   )r.   r9   Úextendr:   ÚPIPEÚPopenÚcommunicaterE   ÚcloserF   r   rB   )r=   ÚcmdrH   r   r   r   r   r   r   r   Ú
run_pythonZ   s   



z1CmdLineTest.test_showrefcount.<locals>.run_pythonr8   r7   s   {}r   ú-XÚshowrefcounts   {'showrefcount': True}s   ^\[\d+ refs, \d+ blocks\])rB   ÚrstripÚPy_DEBUGÚassertRegex)r   rM   Úcoder   r   r   r   r   r   Útest_showrefcountY   s   zCmdLineTest.test_showrefcountc                 C   s0   t dƒ t ddƒ t dddƒ tddddƒ d S )Nú-mZfnord43520xyzÚrunpyÚtimeitú-nÚ1©r   r   r   r   r   r   Útest_run_moduleu   s   
zCmdLineTest.test_run_modulec                 C   s\   t dddddƒ}|j d¡ |j d¡ t|ƒ}|  | d¡d	k¡ |  | d
¡d	k¡ d S )Nú-irU   rW   rX   rY   s   Timer
ó   exit()
s   1 loopéÿÿÿÿs   __main__.Timer)r   ÚstdinÚwriter   r   Úfind)r   r   r   r   r   r   Útest_run_module_bug1764407   s   z&CmdLineTest.test_run_module_bug1764407c                 C   s    t dƒ t ddƒ tddƒ d S )Nr7   zraise ExceptionÚpassrZ   r   r   r   r   Útest_run_codeŒ   s   
zCmdLineTest.test_run_codezneed os_helper.FS_NONASCIIc                 C   s"   dt jtt jƒf }td|ƒ d S )Nzassert(ord(%r) == %s)r7   )r   ÚFS_NONASCIIÚordr   )r   Zcommandr   r   r   Útest_non_ascii•   s   ÿzCmdLineTest.test_non_asciic                 C   s<   t j}d|› d}td|ƒ}|  |j ¡ t|ƒ d¡¡ d S )Nz# coding: latin1
print(ascii('z'))r7   r&   )r   re   r   rB   r   rP   r&   r0   )r   ZchrL   Úresr   r   r   Útest_codingœ   s   
 zCmdLineTest.test_codingÚwin32z Windows has a native unicode APIc                 C   s¤   d}t j ¡ }d|d< d|d< d| d }tjtjd|gtjtj|d	}| 	¡ \}}|j
d
kr2d}n|j
dkr:d}n	td|j
|f ƒ‚| |¡sPtd||f ƒ‚d S )Nó   ÿÚCÚLC_ALLÚ0ZPYTHONCOERCECLOCALEs   import locale; print(ascii("s"   "), locale.getpreferredencoding())r7   )rE   rF   Úenvr%   s3   Unable to decode the command from the command line:r   s   '\xff' z Unknown exit code: %s, output=%az%a doesn't start with %a)ÚosÚenvironÚcopyr:   rI   r.   r9   rH   ÚSTDOUTrJ   r   ÚAssertionErrorr1   )r   Zundecodablero   rS   r   rE   rF   Úpatternr   r   r   Útest_undecodable_code¨   s0   
ÿÿÿ
ý


ÿz!CmdLineTest.test_undecodable_codec              	      s²   d‰ t jdˆ g}‡ fdd„}‡ fdd„}‡ fdd„}d	 d
¡}d}||g}|||fD ],}| j|d |D ]}	||	ƒ}
|  |
j ¡ t|	ƒ¡ q5W d   ƒ q*1 sQw   Y  q*d S )Nz;import sys, os; s=os.fsencode(sys.argv[1]); print(ascii(s))r7   c                    s    t jdˆ | g}tj|tjddS )Nr7   T©rE   Útext©r.   r9   r:   ÚrunrH   ©ÚargrL   ©rS   r   r   Úrun_default×   s   z6CmdLineTest.test_invalid_utf8_arg.<locals>.run_defaultc                    s4   t jdˆ | g}ttjƒ}d|d< tj|tjd|dS )Nr7   rl   rm   T)rE   rx   ro   )r.   r9   Údictrp   rq   r:   rz   rH   )r|   rL   ro   r}   r   r   Úrun_c_localeÛ   s   

ÿz7CmdLineTest.test_invalid_utf8_arg.<locals>.run_c_localec                    s$   t jdddˆ | g}tj|tjddS )NrN   Úutf8r7   Trw   ry   r{   r}   r   r   Úrun_utf8_modeâ   s   z8CmdLineTest.test_invalid_utf8_arg.<locals>.run_utf8_modeõ   e:Ã©, euro:â‚¬, non-bmp:ô¿¿úutf-8s   ÿÃÿÃ©í €ý¿¿»ºº)Úrun_cmd)r.   r9   r0   ÚsubTestrB   rE   rP   r&   )r   Zbase_cmdr~   r€   r‚   Z
valid_utf8Zinvalid_utf8Z	test_argsr…   r|   Úprocr   r}   r   Útest_invalid_utf8_argË   s"   	
ÿþÿÿz!CmdLineTest.test_invalid_utf8_argÚdarwinz%test specific to Mac OS X and Androidc           	      C   s„   d  d¡}d}| dd¡}t|ƒ  d¡d }tj ¡ }d|d< tjtj	d	||ftj
|d
}| ¡ \}}|  ||¡ |  |jd¡ d S )Nrƒ   r„   z%import sys; print(ascii(sys.argv[1]))Úsurrogateescaper&   r   rl   rm   r7   )rE   ro   r   )r0   r*   r&   rp   rq   rr   r:   rI   r.   r9   rH   rJ   rB   r   )	r   rx   rS   ZdecodedÚexpectedro   r   rE   rF   r   r   r   Útest_osx_android_utf8ø   s   

ýz!CmdLineTest.test_osx_android_utf8c                 C   s@   t  d¡}tjd|g}tj|tjtjddd}|  |jd¡ d S )Nzè
            import sys
            out = sys.stdout
            print(out.isatty(), out.write_through, out.line_buffering)
            err = sys.stderr
            print(err.isatty(), err.write_through, err.line_buffering)
        r7   T)rE   rF   rx   Úcheckz#False False False
False False True
)	ÚtextwrapÚdedentr.   r9   r:   rz   rH   rB   rE   )r   rS   r=   r‡   r   r   r   Ú%test_non_interactive_output_buffering  s   

ÿÿz1CmdLineTest.test_non_interactive_output_bufferingc                 C   s†   dD ]>}d| }t dd|ƒ\}}}|dkr|n|}|  |dd| ¡ d| }t dd|ƒ\}}}|dkr5|n|}|  |dd	| ¡ qd S )
NrD   z6import os, sys; sys.%s.buffer.write(b'x'); os._exit(0)ú-ur7   rF   ó   xzbinary %s not unbufferedz.import os, sys; sys.%s.write('x'); os._exit(0)ztext %s not unbuffered©r   rB   )r   ÚstreamrS   r   r   r   r   r   r   r   Útest_unbuffered_output  s   ÿÿôz"CmdLineTest.test_unbuffered_outputc                 C   sT   d}t dd|ƒ}|j d¡ |j ¡  t|ƒ\}}|  |d¡ |  | d¡|¡ d S )Nz/import sys; sys.stdout.write(sys.stdin.read(1))r‘   r7   r’   r   )r   r_   r`   Úflushr   rB   r   r1   )r   rS   r   r   r   r   r   r   Útest_unbuffered_input-  s   
z!CmdLineTest.test_unbuffered_inputc                 C   sX   d}d}|t j | }d}tdd||d\}}}|  | d¡|¡ |  | d¡|¡ d S )NAô  ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEAô  FGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJú¨if 1:
            import sys
            path = ":".join(sys.path)
            path = path.encode("ascii", "backslashreplace")
            sys.stdout.buffer.write(path)r"   r7   ©Z
PYTHONPATHr&   )rp   Úpathsepr   r(   r0   )r   Zpath1Zpath2ÚpathrS   r   r   r   r   r   r   Útest_large_PYTHONPATH7  s   ÿz!CmdLineTest.test_large_PYTHONPATHc                 C   s<   d}t d|dd\}}}t d|dd\}}}|  ||¡ d S )Nr˜   r7   Ú r™   F)Z
__isolatedr“   )r   rS   Zrc1Zout1Zerr1Zrc2Zout2Zerr2r   r   r   Ú test_empty_PYTHONPATH_issue16309F  s   z,CmdLineTest.test_empty_PYTHONPATH_issue16309c                 C   sŽ   dD ]B}t j ¡ }||d< tjtjdgtjtjtj|d}d}|j	 
t|ƒ d¡d ¡ |j	 
d¡ t|ƒ}t|ƒ |d	¡}|  ||¡ qd S )
N)r&   zlatin-1r„   ZPYTHONIOENCODINGr\   )r_   rE   rF   ro   u   a=Ã© b=í²€ c=ð€€ d=ô¿¿r&   r   r]   Úbackslashreplace)rp   rq   rr   r:   rI   r.   r9   rH   rs   r_   r`   r&   r0   r   Úreprr(   )r   Úencodingro   r   rx   r   Úescapedr   r   r   Útest_displayhook_unencodableW  s"   
ûñz(CmdLineTest.test_displayhook_unencodablec              	   C   s²   t  d¡B}tj d¡}| | d¡¡ | ¡  | d¡ t	j
tjd|f|t	jd}| ¡ \}}W d   ƒ n1 s;w   Y  W d   ƒ n1 sJw   Y  |  | ¡ |¡ d S )Nzwb+ÚASCII)s   abcs   defr   r7   )r_   rE   )ÚtempfileÚNamedTemporaryFilerp   Úlinesepr0   r`   r)   r–   Úseekr:   rI   r.   r9   rH   rJ   rB   rP   )r   rS   r‹   r_   Úsepr‡   rE   rF   r   r   r   Úcheck_inputi  s   

þý€û	zCmdLineTest.check_inputc                 C   ó   |   dd¡ d S )Nz-import sys; print(repr(sys.stdin.readline()))s   'abc\n'©rª   r   r   r   r   Útest_stdin_readlineu  s   þzCmdLineTest.test_stdin_readlinec                 C   r«   )Nzprint(repr(input()))s   'abc'r¬   r   r   r   r   Útest_builtin_input|  s   þzCmdLineTest.test_builtin_inputc                 C   sV   d}t d|ƒ\}}}tjdkr|  d|¡ |  d|¡ d S |  d|¡ |  d|¡ d S )Nz’if 1:
            import sys
            print(1)
            print(2)
            print(3, file=sys.stderr)
            print(4, file=sys.stderr)r7   rj   s   1
2
s   3
4
s   1
2
s   3
4
)r   r.   ÚplatformrB   ©r   rS   r   r   r   r   r   r   Útest_output_newline‚  s   
zCmdLineTest.test_output_newlinec                 C   s4   t ddƒ\}}}|  | dd¡d¡ |  d|¡ d S )Nr7   ú'r&   ÚignoreÚSyntaxErrorr   )r   rR   r*   rB   r4   r   r   r   Útest_unmached_quote“  s   zCmdLineTest.test_unmached_quotec                 C   sD   d}t d|ƒ\}}}|  d|¡ |  d|¡ |  | dd¡d¡ d S )Nzµif 1:
            import os, sys, test.support
            test.support.SuppressCrashReport().__enter__()
            sys.stdout.write('x')
            os.close(sys.stdout.fileno())r7   r   éx   r&   r³   z"Exception ignored in.*
OSError: .*)r   rB   rR   r*   r°   r   r   r   Útest_stdout_flush_at_shutdownš  s   ÿz)CmdLineTest.test_stdout_flush_at_shutdownc                 C   s$   d}t d|ƒ\}}}|  d|¡ d S )Nzimport sys; sys.stdout.close()r7   r   r“   r°   r   r   r   Útest_closed_stdout¨  s   zCmdLineTest.test_closed_stdoutÚposixztest needs POSIX semanticsÚvxworksz.test needs preexec support in subprocess.Popenc                    sf   dj ˆ d}‡ fdd„}tjtjdd|gtjtjtj|d}| ¡ \}}|  |d¡ |  |jd	¡ d S )
Nz»if 1:
            import os, sys
            for i, s in enumerate({streams}):
                if getattr(sys, s) is not None:
                    os._exit(i + 1)
            os._exit(42)©Ústreamsc                      s>   dˆ v r	t  d¡ dˆ v rt  d¡ dˆ v rt  d¡ d S d S )Nr_   r   rE   r%   rF   r-   )rp   rK   r   r»   r   r   Úpreexec»  s   

ÿz+CmdLineTest._test_no_stdio.<locals>.preexecr6   r7   )r_   rE   rF   Ú
preexec_fnr   é*   )	Úformatr:   rI   r.   r9   rH   rJ   rB   r   )r   r¼   rS   r½   r   r   r   r   r»   r   Ú_test_no_stdio±  s   ûûzCmdLineTest._test_no_stdioc                 C   ó   |   dg¡ d S )Nr_   ©rÁ   r   r   r   r   Útest_no_stdinÌ  ó   zCmdLineTest.test_no_stdinc                 C   rÂ   )NrE   rÃ   r   r   r   r   Útest_no_stdoutÏ  rÅ   zCmdLineTest.test_no_stdoutc                 C   rÂ   )NrF   rÃ   r   r   r   r   Útest_no_stderrÒ  rÅ   zCmdLineTest.test_no_stderrc                 C   s   |   g d¢¡ d S )N)r_   rE   rF   rÃ   r   r   r   r   Útest_no_std_streamsÕ  s   zCmdLineTest.test_no_std_streamsc                 C   s.  |   d¡ g }tj dd¡dkrttjƒ}|d= d|d< ni }tdƒD ]}d}td|fi |¤Ž\}}}|  |d	¡ | |¡ q#t	t
|ƒƒ}| jt|ƒd
d |¡d d}td|dd\}}}|  d|¡ td|dd\}}}|  d|¡ td|dd\}}}|  d|¡ tdd|dd\}}}|  d|¡ d S )Nz-RÚPYTHONHASHSEEDÚrandomrY   Z
__cleanenvé   zprint(hash("spam"))r7   r   r%   z83 runs produced an identical random hash  for "spam": {})Úmsgz<import sys; print("random is", sys.flags.hash_randomization)r   ©rÉ   s   random is 1rn   s   random is 0)r   rp   rq   Úgetr   Úranger   rB   ÚappendÚsortedÚsetZassertGreaterÚlenrÀ   r(   )r   Zhashesro   ÚirS   r   r   r   r   r   r   Útest_hash_randomizationØ  s4   


þz#CmdLineTest.test_hash_randomizationc                 C   sf   t j}|  t j|¡ t|ddd}td|d td|d W d   ƒ n1 s(w   Y  t|ƒ d S )NÚwr„   ©r¡   z
import sys)Úfilezdel sys.modules['__main__'])r   ZTESTFNZ
addCleanupÚunlinkÚopenÚprintr   )r   ÚfilenameZscriptr   r   r   Útest_del___main__ý  s   þzCmdLineTest.test_del___main__c                 C   sÐ   t ddƒ\}}}|  d|¡ |  | ¡  d¡d¡ |  d|¡ t ddd\}}}|  d|¡ |  | ¡  d¡d¡ |  d|¡ t dddd\}}}|  d|¡ |  d|¡ |  | ¡  d¡d¡ |  d|¡ d S )	Nr6   z-zs   Unknown option: -zr%   r   )Zwithoutz-as   Unknown option: -a)r   r(   rB   r'   Úcountr   r4   r   r   r   Útest_unknown_options  s   z CmdLineTest.test_unknown_optionsú6Cannot run -I tests when PYTHON env vars are required.c              	   C   sD  |   d¡ |   d¡ tddddd\}}}|  | ¡ d¡ t ¡ w}tj |d¡}tj |d	¡}t	|d
dd}| 
d¡ W d   ƒ n1 sGw   Y  t	|d
dd}| 
d¡ | 
d¡ W d   ƒ n1 shw   Y  | jtjtjtj|g|tjd tjtjd|g|d}|  | ¡ d¡ W d   ƒ d S 1 s›w   Y  d S )Nú-Iz-IEsr7   zSfrom sys import flags as f; print(f.no_user_site, f.ignore_environment, f.isolated)r   )Zdummyvars   1 1 1zuuid.pyzmain.pyrÖ   r„   r×   z)raise RuntimeError('isolated mode test')
zimport uuid
zprint('ok')
)ÚcwdrF   )râ   s   ok)r   r   rB   Ústripr   Útemp_cwdrp   r›   r)   rÚ   r`   ZassertRaisesr:   ÚCalledProcessErrorr;   r.   r9   ÚDEVNULL)r   r   r   r   ZtmpdirZfakeÚmainÚfr   r   r   Útest_isolatedmode  s6   

ü
ÿ
þ
ýÿ"òzCmdLineTest.test_isolatedmodec              	   C   s~   dD ]:\}}t ||||d}tt|ƒƒ}d|› d|› d}| j|d td|fi |¤Ž W d   ƒ q1 s7w   Y  qd S )N))r   r   )rY   r%   )rx   r%   )Ú2r-   ©ZPYTHONDEBUGZPYTHONOPTIMIZEZPYTHONDONTWRITEBYTECODEZPYTHONVERBOSEz·import sys; sys.stderr.write(str(sys.flags)); sys.exit(not (
                    sys.flags.debug == sys.flags.optimize ==
                    sys.flags.verbose ==
                    z:
                    and sys.flags.dont_write_bytecode == z
                )))Zenvar_valuer7   )r   ÚintÚboolr†   r   )r   Úvaluer‹   Úenv_varsÚdont_write_bytecoderS   r   r   r   Útest_sys_flags_set5  s$   üûúÿ
ÿîzCmdLineTest.test_sys_flags_setc           
   
   C   s  t ƒ }dddddd|d fg}|D ]s\}}}|d u rdnd|› d	}d
|› d}d|g}|d u r1i nd|i}	||u rBddg|d d…< n|d urQdd|› g|d d…< | j||d# t ¡  t|i |	¤Ž W d   ƒ n1 sow   Y  W d   ƒ q1 s~w   Y  qd S )N)NNN)ÚfooNrò   )NÚbarró   )rò   ró   ró   )rò   r   Nrò   zis Nonez== "ú"z,import sys; sys.exit(not sys.pycache_prefix ú)r7   ZPYTHONPYCACHEPREFIXrN   Úpycache_prefixr   zpycache_prefix=)ÚenvvalÚopt)Úobjectr†   r   rä   r   )
r   ZNO_VALUEÚcasesr÷   rø   r‹   Z
exp_clauserS   r=   ro   r   r   r   Útest_set_pycache_prefixL  s0   ù	
ÿ€ÿ÷z#CmdLineTest.test_set_pycache_prefixT)Úcheck_exitcodeÚxdevc                G   sŠ   t tjƒ}| dd ¡ | dd ¡ | dd ¡ |r#tjddg|¢R }ntjg|¢R }tj|tjtj	d|d}|r@|  
|jd|¡ |j ¡ S )	NÚPYTHONWARNINGSÚPYTHONDEVMODEÚPYTHONMALLOCrN   ÚdevT©rE   rF   Úuniversal_newlinesro   r   )r   rp   rq   Úpopr.   r9   r:   rz   rH   rs   rB   r   rE   rP   )r   rü   rý   r=   ro   r‡   r   r   r   Úrun_xdevf  s    
ü
zCmdLineTest.run_xdevc                 C   s~  d}| j d|dd}|  |d¡ |   d|¡}|  |d¡ d}tr#d}nd	}|   d|¡}|  ||¡ |   d
d|¡}|  |d|› ¡ |   dd|¡}|  |d|› ¡ |   dd|¡}|  |d|› ¡ zdd l}W n	 typ   Y n.w d}t ¡  | j d|dd}W d   ƒ n1 sŠw   Y  t ¡ r–d}nd}|  ||¡ zdd l}W n
 ty®   Y d S w d}|   d|¡}|  |d¡ d S )Nú%import sys; print(sys.flags.dev_mode)r7   F)rý   ÚFalseÚTruez\import warnings; print(' '.join('%s::%s' % (f[0], f[2].__name__) for f in warnings.filters))zdefault::Warningz—default::Warning default::DeprecationWarning ignore::DeprecationWarning ignore::PendingDeprecationWarning ignore::ImportWarning ignore::ResourceWarningz-bzdefault::BytesWarning ú-bbzerror::BytesWarning z-Werrorzerror::Warning r   ú<import _testcapi; print(_testcapi.pymem_getallocatorsname()))rü   Úpymalloc_debugÚmalloc_debugz5import faulthandler; print(faulthandler.is_enabled()))	r  rB   rQ   Ú	_testcapiÚImportErrorr   ZSuppressCrashReportÚwith_pymallocÚfaulthandler)r   rS   r   Úexpected_filtersr  Z
alloc_namer  r   r   r   Ú	test_xdevy  sL   ÿ
ÿÿzCmdLineTest.test_xdevFc                 C   sx   |rd}nd}|d7 }t jd|dd|f}ttjƒ}| dd ¡ ||d< tj|tjtj	d	|d
}|  
|jd|¡ |j ¡ S )Nz‹import sys; from test.support.import_helper import import_fresh_module; warnings = import_fresh_module('warnings', blocked=['_warnings']); zimport sys, warnings; zKprint(' '.join('%s::%s' % (f[0], f[2].__name__) for f in warnings.filters))z-Wr	  r7   rÿ   rþ   Tr  r   )r.   r9   r   rp   rq   r  r:   rz   rH   rs   rB   r   rE   rP   )r   Zcmdline_optionZenvvarÚuse_pywarningrS   r=   ro   r‡   r   r   r   Úcheck_warnings_filters´  s    
ü
z"CmdLineTest.check_warnings_filtersc                 C   sH   d}t s|d7 }|  dd¡}|  ||¡ | jdddd}|  ||¡ d S )Nz9error::BytesWarning once::UserWarning always::UserWarningz‡ default::DeprecationWarning ignore::DeprecationWarning ignore::PendingDeprecationWarning ignore::ImportWarning ignore::ResourceWarningzonce::UserWarningzalways::UserWarningT)r  )rQ   r  rB   )r   r  r   r   r   r   Útest_warnings_filter_precedenceÉ  s   ÿþz+CmdLineTest.test_warnings_filter_precedencec                 C   s€   d}t tjƒ}| dd ¡ |d ur||d< n| dd ¡ tjd|f}tj|tjtj	d|d}|  
|j ¡ |¡ |  
|jd¡ d S )Nr
  rÿ   r   r7   Tr  r   )r   rp   rq   r  r.   r9   r:   rz   rH   rs   rB   rE   rP   r   )r   Úenv_varÚnamerS   ro   r=   r‡   r   r   r   Úcheck_pythonmallocÞ  s   

üzCmdLineTest.check_pythonmallocc              	   C   sœ   t  ¡ }|rtr
dnd}d}ntrdnd}d}d |fd|fddg}|r(| d¡ |D ]!\}}| j||d	 |  ||¡ W d   ƒ q*1 sFw   Y  q*d S )
Nr  Úpymallocr  ÚmallocÚdebug)r  r  )r  r  ))r  r  )r  r  )r  r  )r   r  rQ   rG   r†   r  )r   r  Zdefault_nameZdefault_name_debugZtestsr  r  r   r   r   Útest_pythonmallocï  s$   ü
ÿÿzCmdLineTest.test_pythonmallocc                 C   sž   d}t tjƒ}| dd ¡ tjd|f}tj|tjd|d}|  	|j
 ¡ d¡ |  	|jd|¡ d|d< tj|tjd|d}|  	|j
 ¡ d	¡ |  	|jd|¡ d S )
Nr  rÿ   r7   T)rE   r  ro   r  r   rY   r  )r   rp   rq   r  r.   r9   r:   rz   rH   rB   rE   rP   r   )r   rS   ro   r=   r‡   r   r   r   Útest_pythondevmode_env	  s   

ÿ
ÿz"CmdLineTest.test_pythondevmode_envz!bpo-32457 only applies on Windowsc                 C   sb   t jddf}tj t j¡\}}|d | }tj|tj|d}|  |j	d|¡ |  |j
 ¡ d¡ d S )Nr7   zprint(0)z\.\.\.\)rE   r9   r   ó   0)r.   r9   rp   r›   Úsplitr:   rz   rH   rB   r   rE   rã   )r   r=   ÚprefixÚexer9   r‡   r   r   r   Útest_argv0_normalization  s   
ÿz$CmdLineTest.test_argv0_normalizationc                 C   sN   t jddg}tj|tjtjdd}d}|  |j |¡|j¡ |  |j	d¡ d S )Nrá   z--unknown-optionT)rE   rF   rx   z'unknown option --unknown-option
usage: r   )
r.   r9   r:   rz   rH   r   rF   r1   ÚassertNotEqualr   )r   r=   r‡   Úerr_msgr   r   r   Útest_parsing_error'  s   ýzCmdLineTest.test_parsing_errorN)F)AÚ__name__Ú
__module__Ú__qualname__r   r   r    r#   r,   r3   r5   ÚunittestÚskipIfr   rC   rT   r[   rb   rd   Z
skipUnlessr   re   rg   ri   r.   r¯   rv   rˆ   r   Z
is_androidrŒ   r   r•   r—   rœ   rž   r£   rª   r­   r®   r±   rµ   r·   r¸   rp   r  rÁ   rÄ   rÆ   rÇ   rÈ   rÕ   rÝ   rß   ré   rñ   rû   r  r  r  r  r  r  r  r"  r%  r   r   r   r   r      s–    	ÿ
	

ÿ
!ÿ
+ÿ

	ÿ%ÿ

;ÿ

r   rà   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚIgnoreEnvironmentTestc                 K   s   d  |¡}tdd|fi |¤ŽS )Nz@import sys; sys.stderr.write(str(sys.flags)); sys.exit(not ({}))r6   r7   )rÀ   r   )r   Ú	predicaterï   rS   r   r   r   Úrun_ignoring_vars6  s   
z'IgnoreEnvironmentTest.run_ignoring_varsc                 C   s   d}| j d |¡|d d S )NZshould_be_ignoredz'{}' not in sys.pathr™   )r-  rÀ   )r   r›   r   r   r   Útest_ignore_PYTHONPATH>  s   
ÿz,IgnoreEnvironmentTest.test_ignore_PYTHONPATHc                 C   s   | j ddd d S )Nz!sys.flags.hash_randomization == 1rn   rÍ   ©r-  r   r   r   r   Útest_ignore_PYTHONHASHSEEDC  s   
ÿz0IgnoreEnvironmentTest.test_ignore_PYTHONHASHSEEDc                 C   s   d}| j |ddddd d S )Nz…
            (sys.flags.debug == sys.flags.optimize ==
             sys.flags.dont_write_bytecode == sys.flags.verbose == 0)
        rY   rë   r/  )r   Zexpected_outcomer   r   r   Útest_sys_flags_not_setG  s   
ûz,IgnoreEnvironmentTest.test_sys_flags_not_setN)r&  r'  r(  r-  r.  r0  r1  r   r   r   r   r+  2  s
    r+  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚSyntaxErrorTestsc                 C   sJ   t jtjdg|t jt jd}|  |jd¡ |  |jd ¡ |  d|j¡ d S )Nú-)ÚinputrE   rF   r   s   
SyntaxError)	r:   rz   r.   r9   rH   r#  r   rF   r(   )r   rS   r‡   r   r   r   Úcheck_stringV  s   ÿzSyntaxErrorTests.check_stringc                 C   r!   )Ns   (1+2+3©r5  r   r   r   r   Útest_tokenizer_error_with_stdin]  r$   z0SyntaxErrorTests.test_tokenizer_error_with_stdinc                 C   r!   )Ns   '\u1f'r6  r   r   r   r   Ú*test_decoding_error_at_the_end_of_the_line`  r$   z;SyntaxErrorTests.test_decoding_error_at_the_end_of_the_lineN)r&  r'  r(  r5  r7  r8  r   r   r   r   r2  U  s    r2  c                   C   s   t  ttt¡ t  ¡  d S r	   )r   Zrun_unittestr   r+  r2  Úreap_childrenr   r   r   r   Ú	test_mainc  s   r:  Ú__main__)rp   r:   r.   r¥   rŽ   r)  Útestr   Ztest.supportr   Ztest.support.script_helperr   r   r   r   r   ÚhasattrrQ   r   ZTestCaser   r*  r+  r2  r:  r&  r   r   r   r   Ú<module>   s6   
      ÿ!
ÿ