o
    GXîh\–  ã                   @   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rke ¡  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   ú</opt/python-3.10.19/usr/lib/python3.10/test/test_cmd_line.pyÚ_kill_python_and_exit_code   s   r   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d„ Z	e
 eƒ d¡dd„ ƒZ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pxejd(¡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*dCdD„ Z+e
 e,j-dEkdF¡e
 ejdGkdH¡dIdJ„ ƒƒZ.dKdL„ Z/dMdN„ Z0dOdP„ Z1dQdR„ Z2dSdT„ Z3dUdV„ Z4dWdX„ Z5e
 eƒ dY¡dZd[„ ƒZ6d\d]„ Z7d^d_„ Z8d`d`daœdbdc„Z9ddde„ Z:dydgdh„Z;didj„ Z<dkdl„ Z=dmdn„ Z>dodp„ Z?e
 ejd!kdq¡drds„ ƒZ@dtdu„ ZAdvdw„ ZBdxS )zÚ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fnord43520xyzZ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   rV   rW   rX   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   sb   t  ¡ }t j t¡ d¡}t |¡ tdddƒ tdddƒ W d   ƒ d S 1 s*w   Y  d S )NÚtestrU   Úunittestztest/test_longexp.pyz./test/test_longexp.py)	ÚosÚgetcwdÚpathÚdirnameÚ__file__Úremovesuffixr   Z
change_cwdr   )r   Z	defaultwdZprojectlibpathr   r   r   Útest_relativedir_bug46421Œ   s   "ýz%CmdLineTest.test_relativedir_bug46421c                 C   s    t dƒ t ddƒ tddƒ d S )Nr7   zraise ExceptionÚpassrY   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   rm   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)rd   ÚenvironÚcopyr:   rI   r.   r9   rH   ÚSTDOUTrJ   r   ÚAssertionErrorr1   )r   Zundecodablerw   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   ƒ n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   rt   ru   T)rE   r   rw   )r.   r9   Údictrd   rx   r:   r   rH   )rƒ   rL   rw   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   Tr~   r€   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   rt   ru   r7   )rE   rw   r   )r0   r*   r&   rd   rx   ry   r:   rI   r.   r9   rH   rJ   rB   r   )	r   r   rS   ZdecodedÚexpectedrw   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   r   Úcheckz#False False False
False False True
)	ÚtextwrapÚdedentr.   r9   r:   r   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_input8  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&   )rd   Úpathsepr   r(   r0   )r   Zpath1Zpath2rf   rS   r   r   r   r   r   r   Útest_large_PYTHONPATHB  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_issue16309Q  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   rw   u   a=Ã© b=í²€ c=ð€€ d=ô¿¿r&   r   r\   Úbackslashreplace)rd   rx   ry   r:   rI   r.   r9   rH   rz   r^   r_   r&   r0   r   Úreprr(   )r   Úencodingrw   r   r   r   Úescapedr   r   r   Útest_displayhook_unencodableb  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ÚNamedTemporaryFilerd   Úlinesepr0   r_   r)   r   Úseekr:   rI   r.   r9   rH   rJ   rB   rP   )r   rS   r’   r^   ÚseprŽ   rE   rF   r   r   r   Úcheck_inputt  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_readline€  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   rr   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-   )rd   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ÚrandomrX   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 1rv   s   random is 0)r   rd   rx   Úgetr†   Úranger   rB   ÚappendÚsortedÚsetZassertGreaterÚlenrÆ   r(   )r   Zhashesrw   Ú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_cwdrd   rf   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   ƒ n1 s7w   Y  qd S )N))r£   r   )rX   r%   )r   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_set@  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   ƒ n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=   rw   r   r   r   Útest_set_pycache_prefixW  s2   ù	
ÿ€ÿ€÷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_newlinesrw   r   )r†   rd   rx   Úpopr.   r9   r:   r   rH   rz   rB   r   rE   rP   )r   r  r  r=   rw   rŽ   r   r   r   Úrun_xdevq  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_xdev„  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†   rd   rx   r
  r:   r   rH   rz   rB   r   rE   rP   )r   Zcmdline_optionZenvvarÚuse_pywarningrS   r=   rw   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†   rd   rx   r
  r.   r9   r:   r   rH   rz   rB   rE   rP   r   )r   Úenv_varÚnamerS   rw   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   ƒ n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	  rw   r  r   rX   r  )r†   rd   rx   r
  r.   r9   r:   r   rH   rB   rE   rP   r   )r   rS   rw   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   rd   rf   Úsplitr:   r   rH   rB   r   rE   ré   )r   r=   ÚprefixZ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   r   z'unknown option --unknown-option
usage: r   )
r.   r9   r:   r   rH   r   rF   r1   ÚassertNotEqualr   )r   r=   rŽ   Úerr_msgr   r   r   Útest_parsing_error2  s   ýzCmdLineTest.test_parsing_errorc                 C   sB  d}t ddd|ƒ t ddd|ƒ t ddd|ƒ t ddd|dd t d|d	d t d|d
d dd„ }td|ƒ}|  ||ƒdt ¡ f¡ 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¡ tddd|dd}|  ||ƒd¡ d S )NzMimport sys; print(sys.flags.int_max_str_digits, sys.get_int_max_str_digits())rN   Úint_max_str_digitsr7   zint_max_str_digits=foozint_max_str_digits=100Z4000)ZPYTHONINTMAXSTRDIGITSrø   Z100c                 S   s&   | j  ¡  d¡}tdd„ | ¡ D ƒƒS )Nr‹   c                 s   s    | ]}t |ƒV  qd S r	   )rò   )Ú.0rÚ   r   r   r   Ú	<genexpr>J  s   € zGCmdLineTest.test_int_max_str_digits.<locals>.res2int.<locals>.<genexpr>)r   ré   r*   Útupler%  )rp   r   r   r   r   Úres2intH  s   z4CmdLineTest.test_int_max_str_digits.<locals>.res2intr]   zint_max_str_digits=0)r   r   zint_max_str_digits=4000)é   r0  zint_max_str_digits=100000)é † r1  rv   zint_max_str_digits=6000)ép  r2  )r   r   rB   r.   Úget_int_max_str_digits)r   rS   r/  rp   r   r   r   Útest_int_max_str_digits<  s6   
ÿ
þz#CmdLineTest.test_int_max_str_digitsN)F)CÚ__name__Ú
__module__Ú__qualname__r   r   r    r#   r,   r3   r5   rc   ÚskipIfr   rC   rT   rZ   ra   rj   rl   Z
skipUnlessr   rm   ro   rq   r.   rµ   r}   r   r   Z
is_androidr“   r—   rœ   rž   r¢   r¤   r©   r°   r³   r´   r·   r»   r½   r¾   rd   r  rÇ   rÊ   rÌ   rÍ   rÎ   rÛ   rã   rå   rï   r÷   r  r  r  r  r  r  r"  r#  r'  r*  r4  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_varsd  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   rf   r   r   r   Útest_ignore_PYTHONPATHl  s   
ÿz,IgnoreEnvironmentTest.test_ignore_PYTHONPATHc                 C   s   | j ddd d S )Nz!sys.flags.hash_randomization == 1rv   rÓ   ©r;  r   r   r   r   Útest_ignore_PYTHONHASHSEEDq  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)
        rX   rñ   r=  )r   Zexpected_outcomer   r   r   Útest_sys_flags_not_setu  s   
ûz,IgnoreEnvironmentTest.test_sys_flags_not_setN)r5  r6  r7  r;  r<  r>  r?  r   r   r   r   r9  `  s
    r9  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:   r   r.   r9   rH   r(  r   rF   r(   )r   rS   rŽ   r   r   r   Úcheck_string„  s   ÿzSyntaxErrorTests.check_stringc                 C   r!   )Ns   (1+2+3©rC  r   r   r   r   Útest_tokenizer_error_with_stdin‹  r$   z0SyntaxErrorTests.test_tokenizer_error_with_stdinc                 C   r!   )Ns   '\u1f'rD  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)r5  r6  r7  rC  rE  rF  r   r   r   r   r@  ƒ  s    r@  c                   C   s   t  ¡  d S r	   )r   Úreap_childrenr   r   r   r   ÚtearDownModule’  s   rH  Ú__main__)rd   r:   r.   r«   r•   rc   rb   r   Ztest.supportr   Ztest.support.script_helperr   r   r   r   r   ÚhasattrrQ   r   ZTestCaser   r8  r9  r@  rH  r5  rí   r   r   r   r   Ú<module>   s6   
      Iÿ!ÿ