a
    Rîh2’  ã                   @   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	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dd„ Zedkr´e ¡  dS )é    N)Úsupport)Ú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.9.24/usr/lib/python3.9/test/test_cmd_line.pyÚ_kill_python_and_exit_code   s    r   c                   @   sJ  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kd ¡d!d"„ ƒZe
 ejdkd ¡d#d$„ ƒZe
 ejd%kpÚe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„ Z/dOdP„ Z0dQdR„ Z1dSdT„ Z2dUdV„ Z3e
 eƒ dW¡dXdY„ ƒZ4dZd[„ Z5d\d]„ Z6d^d^d_œd`da„Z7dbdc„ Z8dwdedf„Z9dgdh„ Z:didj„ Z;dkdl„ Z<dmdn„ Z=e
 ejdkdo¡dpdq„ ƒZ>drds„ Z?dtdu„ Z@dvS )xÚ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   s   |   d¡ d S )Nú-Sr   r   r   r   r   Útest_site_flag+   s    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 ]2}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_version6   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_xoptionsI   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_xoptionsF   s
    	
zCmdLineTest.test_xoptionsc                    s‚   ‡ fdd„}d}|d|ƒ\}}}ˆ   | ¡ d¡ ˆ   |d¡ |ddd|ƒ\}}}ˆ   | ¡ d	¡ trrˆ  |d
¡ nˆ   |d¡ d S )Nc                     sd   t jg}| | ¡ tj}tj|||d}| ¡ \}}|j ¡  |j	 ¡  |j
}ˆ  |d¡ |||fS )N©ÚstdoutÚstderrr   )r+   r6   Úextendr7   ÚPIPEÚPopenÚcommunicaterB   ÚcloserC   r   r?   )r:   ÚcmdrE   r
   r   r   r   r   r   r   Ú
run_pythonY   s    


z1CmdLineTest.test_showrefcount.<locals>.run_pythonr5   r4   s   {}r   ú-XÚshowrefcounts   {'showrefcount': True}s   ^\[\d+ refs, \d+ blocks\])r?   ÚrstripÚPy_DEBUGÚassertRegex)r   rJ   Úcoder   r   r   r   r   r   Útest_showrefcountX   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_modulet   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ú-irR   rS   rT   rU   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  ¡ }t j t¡ d¡}t |¡( tdddƒ tdddƒ W d   ƒ n1 sR0    Y  d S )NÚtestrR   Ú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 )Nr4   zraise ExceptionÚpassrV   r   r   r   r   Útest_run_code–   s    
zCmdLineTest.test_run_codezneed support.FS_NONASCIIc                 C   s"   dt jtt jƒf }td|ƒ d S )Nzassert(ord(%r) == %s)r4   )r   ÚFS_NONASCIIÚordr   )r   Zcommandr   r   r   Útest_non_asciiŸ   s    ÿzCmdLineTest.test_non_asciiÚ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rdd}n"|j
dkrtd}ntd|j
|f ƒ‚| |¡s td||f ƒ‚d S )Nó   ÿÚCÚLC_ALLÚ0ZPYTHONCOERCECLOCALEs   import locale; print(ascii("s"   "), locale.getpreferredencoding())r4   )rB   rC   Ú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)ra   ÚenvironÚcopyr7   rF   r+   r6   rE   ÚSTDOUTrG   r   ÚAssertionErrorr.   )r   Zundecodablerr   rP   r
   rB   rC   Úpatternr   r   r   Útest_undecodable_codeª   s.    
ÿÿÿ
ý


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 ]X}| j|d8 |D ]"}	||	ƒ}
|  |
j ¡ t|	ƒ¡ qjW d   ƒ qT1 s¢0    Y  qTd S )Nz;import sys, os; s=os.fsencode(sys.argv[1]); print(ascii(s))r4   c                    s    t jdˆ | g}tj|tjddS )Nr4   T©rB   Útext©r+   r6   r7   ÚrunrE   ©ÚargrI   ©rP   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 )Nr4   ro   rp   T)rB   rz   rr   )r+   r6   Údictra   rs   r7   r|   rE   )r~   rI   rr   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 )NrK   Úutf8r4   Try   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+   r6   r-   ÚsubTestr?   rB   rM   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   ro   rp   r4   )rB   rr   r   )r-   r'   r#   ra   rs   rt   r7   rF   r+   r6   rE   rG   r?   r   )	r   rz   rP   ZdecodedÚexpectedrr   r
   rB   rC   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)
        r4   T)rB   rC   rz   Úcheckz#False False False
False False True
)	ÚtextwrapÚdedentr+   r6   r7   r|   rE   r?   rB   )r   rP   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rj|n|}|  |dd	| ¡ qd S )
NrA   z6import os, sys; sys.%s.buffer.write(b'x'); os._exit(0)ú-ur4   rC   ó   xzbinary %s not unbufferedz.import os, sys; sys.%s.write('x'); os._exit(0)ztext %s not unbuffered©r   r?   )r   ÚstreamrP   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“   r4   r”   r   )r   r[   r\   Úflushr   r?   r   r.   )r   rP   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    r4   ©Z
PYTHONPATHr#   )ra   Úpathsepr   r%   r-   )r   Zpath1Zpath2rc   rP   r   r   r   r   r   r   Útest_large_PYTHONPATH9  s    ÿz!CmdLineTest.test_large_PYTHONPATHc                 C   s<   d}t d|dd\}}}t d|dd\}}}|  ||¡ d S )Nrš   r4   Ú r›   F)Z
__isolatedr•   )r   rP   Zrc1Zout1Zerr1Zrc2Zout2Zerr2r   r   r   Ú test_empty_PYTHONPATH_issue16309H  s    z,CmdLineTest.test_empty_PYTHONPATH_issue16309c                 C   sŽ   dD ]„}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PYTHONIOENCODINGrX   )r[   rB   rC   rr   u   a=Ã© b=í²€ c=ð€€ d=ô¿¿r#   r   rY   Úbackslashreplace)ra   rs   rt   r7   rF   r+   r6   rE   ru   r[   r\   r#   r-   r   Úreprr%   )r   Úencodingrr   r
   rz   r   Úescapedr   r   r   Útest_displayhook_unencodableY  s     
ûz(CmdLineTest.test_displayhook_unencodablec              	   C   s²   t  d¡„}tj d¡}| | d¡¡ | ¡  | d¡ t	j
tjd|f|t	jd}| ¡ \}}W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  |  | ¡ |¡ d S )Nzwb+ÚASCII)s   abcs   defr   r4   )r[   rB   )ÚtempfileÚNamedTemporaryFilera   Úlinesepr-   r\   r&   r˜   Úseekr7   rF   r+   r6   rE   rG   r?   rM   )r   rP   r   r[   Úsepr‰   rB   rC   r   r   r   Úcheck_inputk  s    

þHzCmdLineTest.check_inputc                 C   s   |   dd¡ d S )Nz-import sys; print(repr(sys.stdin.readline()))s   'abc\n'©r«   r   r   r   r   Útest_stdin_readlinew  s    þzCmdLineTest.test_stdin_readlinec                 C   s   |   dd¡ d S )Nzprint(repr(input()))s   'abc'r¬   r   r   r   r   Útest_builtin_input~  s    þzCmdLineTest.test_builtin_inputc                 C   sT   d}t d|ƒ\}}}tjdkr8|  d|¡ |  d|¡ n|  d|¡ |  d|¡ d S )Nz’if 1:
            import sys
            print(1)
            print(2)
            print(3, file=sys.stderr)
            print(4, file=sys.stderr)r4   rm   s   1
2
s   3
4
s   1
2
s   3
4
)r   r+   Úplatformr?   ©r   rP   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 )Nr4   ú'r#   ÚignoreÚSyntaxErrorr   )r   rO   r'   r?   r1   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())r4   r   éx   r#   r³   z"Exception ignored in.*
OSError: .*)r   r?   rO   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()r4   r   r•   r°   r   r   r   Útest_closed_stdoutª  s    zCmdLineTest.test_closed_stdoutÚposixztest needs POSIX semanticsZ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 r6t  d¡ d S )Nr[   r   rB   r"   rC   r*   )ra   rH   r   rº   r   r   Úpreexec½  s    

z+CmdLineTest._test_no_stdio.<locals>.preexecr3   r4   )r[   rB   rC   Ú
preexec_fnr   é*   )	Úformatr7   rF   r+   r6   rE   rG   r?   r   )r   r»   rP   r¼   r
   r   r   r   rº   r   Ú_test_no_stdio³  s    ûûzCmdLineTest._test_no_stdioc                 C   s   |   dg¡ d S )Nr[   ©rÀ   r   r   r   r   Útest_no_stdinÎ  s    zCmdLineTest.test_no_stdinc                 C   s   |   dg¡ d S )NrB   rÁ   r   r   r   r   Útest_no_stdoutÑ  s    zCmdLineTest.test_no_stdoutc                 C   s   |   dg¡ d S )NrC   rÁ   r   r   r   r   Útest_no_stderrÔ  s    zCmdLineTest.test_no_stderrc                 C   s   |   g d¢¡ d S )N)r[   rB   rC   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 ]6}d}td|fi |¤Ž\}}}|  |d	¡ | |¡ qFt	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ÚrandomrU   Z
__cleanenvé   zprint(hash("spam"))r4   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 1rq   s   random is 0)r   ra   rs   Úgetr   Úranger   r?   ÚappendÚsortedÚsetZassertGreaterÚlenr¿   r%   )r   Zhashesrr   ÚirP   r   r   r   r   r   r   Útest_hash_randomizationÚ  s6    


ÿÿz#CmdLineTest.test_hash_randomizationc                 C   sb   t j}|  t j|¡ t|dƒ(}td|d td|d W d   ƒ n1 sL0    Y  t|ƒ d S )NÚwz
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 )	Nr3   z-zs   Unknown option: -zr"   r   )Zwithoutz-as   Unknown option: -a)r   r%   r?   r$   Úcountr   r1   r   r   r   Útest_unknown_options
  s    z CmdLineTest.test_unknown_optionsú6Cannot run -I tests when PYTHON env vars are required.c              	   C   s<  |   d¡ |   d¡ tddddd\}}}|  | ¡ d¡ t ¡ ä}tj |d¡}tj |d	¡}t	|d
ƒ}| 
d¡ W d   ƒ n1 sŠ0    Y  t	|d
ƒ$}| 
d¡ | 
d¡ W d   ƒ n1 sÈ0    Y  | jtjtjtj|g|tjd tjtjd|g|d}|  | ¡ d¡ W d   ƒ n1 s.0    Y  d S )Nú-Iz-IEsr4   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Ó   z)raise RuntimeError('isolated mode test')
zimport uuid
zprint('ok')
)ÚcwdrC   )rÞ   s   ok)r   r   r?   Ústripr   Útemp_cwdra   rc   r&   rÖ   r\   ZassertRaisesr7   ÚCalledProcessErrorr8   r+   r6   ÚDEVNULL)r   r   r   r   ZtmpdirZfakeÚmainÚfr   r   r   Útest_isolatedmode  s0    

ü
(
(
ýÿzCmdLineTest.test_isolatedmodec              	   C   s~   dD ]t\}}t ||||d}tt|ƒƒ}d|› d|› d}| j|d" td|fi |¤Ž W d   ƒ q1 sn0    Y  qd S )N))rž   r   )rU   r"   )rz   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_valuer4   )r   ÚintÚboolrˆ   r   )r   Úvaluer   Úenv_varsÚdont_write_bytecoderP   r   r   r   Útest_sys_flags_set7  s     üûúÿ
zCmdLineTest.test_sys_flags_setc           
   
   C   s  t ƒ }dddddd|d fg}|D ]æ\}}}|d u r6dn
d|› d	}d
|› d}d|g}|d u rbi nd|i}	||u r„ddg|d d…< n|d ur¢dd|› g|d d…< | j||dF t ¡  t|i |	¤Ž W d   ƒ n1 sÞ0    Y  W d   ƒ q 1 sü0    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 ú)r4   ZPYTHONPYCACHEPREFIXrK   Úpycache_prefixr   zpycache_prefix=)ÚenvvalÚopt)Úobjectrˆ   r   rà   r   )
r   ZNO_VALUEZcasesró   rô   r   Z
exp_clauserP   r:   rr   r   r   r   Útest_set_pycache_prefixN  s(    ù	
z#CmdLineTest.test_set_pycache_prefixT)Úcheck_exitcodeÚxdevc                G   sŠ   t tjƒ}| dd ¡ | dd ¡ | dd ¡ |rFt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ÚPYTHONMALLOCrK   ÚdevT©rB   rC   Úuniversal_newlinesrr   r   )r   ra   rs   Úpopr+   r6   r7   r|   rE   ru   r?   r   rB   rM   )r   r÷   rø   r:   rr   r‰   r   r   r   Úrun_xdevh  s     
üzCmdLineTest.run_xdevc                 C   s‚  d}| j d|dd}|  |d¡ |   d|¡}|  |d¡ d}trFd}nd	}|   d|¡}|  ||¡ |   d
d|¡}|  |d|› ¡ |   dd|¡}|  |d|› ¡ |   dd|¡}|  |d|› ¡ zdd l}W n tyà   Y n`0 d}t ¡   | j d|dd}W d   ƒ n1 s0    Y  t ¡ r0d}nd}|  ||¡ zdd l}W n ty`   Y n0 d}|   d|¡}|  |d¡ d S )Nú%import sys; print(sys.flags.dev_mode)r4   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   r?   rN   Ú	_testcapiÚImportErrorr   ZSuppressCrashReportÚwith_pymallocÚfaulthandler)r   rP   r   Úexpected_filtersr  Z
alloc_namer  r   r   r   Ú	test_xdev{  sF    
0
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 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  r4   rú   rù   Trý   r   )r+   r6   r   ra   rs   rÿ   r7   r|   rE   ru   r?   r   rB   rM   )r   Zcmdline_optionZenvvarÚuse_pywarningrP   r:   rr   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  )rN   r  r?   )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û   r4   Trý   r   )r   ra   rs   rÿ   r+   r6   r7   r|   rE   ru   r?   rB   rM   r   )r   Úenv_varÚnamerP   rr   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}|rP| d¡ |D ]B\}}| j||d	 |  ||¡ W d   ƒ qT1 sŒ0    Y  qTd S )
Nr  Úpymallocr  ÚmallocÚdebug)r  r  )r  r  ))r  r  )r  r  )r  r  )r   r
  rN   rD   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ú   r4   T)rB   rþ   rr   r  r   rU   r  )r   ra   rs   rÿ   r+   r6   r7   r|   rE   r?   rB   rM   r   )r   rP   rr   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 )Nr4   zprint(0)z\.\.\.\)rB   r6   r   ó   0)r+   r6   ra   rc   Úsplitr7   r|   rE   r?   r   rB   rß   )r   r:   ÚprefixZexer6   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)rB   rC   rz   z'unknown option --unknown-option
usage: r   )
r+   r6   r7   r|   rE   r   rC   r.   ZassertNotEqualr   )r   r:   r‰   Úerr_msgr   r   r   Útest_parsing_error(  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())rK   Úint_max_str_digitsr4   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>@  r   zGCmdLineTest.test_int_max_str_digits.<locals>.res2int.<locals>.<genexpr>)r   rß   r'   Útupler  )Úresr   r   r   r   Úres2int>  s    z4CmdLineTest.test_int_max_str_digits.<locals>.res2intrZ   zint_max_str_digits=0)r   r   zint_max_str_digits=4000)é   r%  zint_max_str_digits=100000)é † r&  rq   zint_max_str_digits=6000)ép  r'  )r   r   r?   r+   Úget_int_max_str_digits)r   rP   r$  r#  r   r   r   Útest_int_max_str_digits2  s6    
ÿ
þz#CmdLineTest.test_int_max_str_digitsN)F)AÚ__name__Ú
__module__Ú__qualname__r   r   r   r!   r)   r0   r2   r`   ÚskipIfr   r@   rQ   rW   r^   rg   ri   Z
skipUnlessr   rj   rl   r+   r¯   rx   rŠ   Z
is_androidrŽ   r’   r—   r™   r   rŸ   r¤   r«   r­   r®   r±   rµ   r·   r¸   ra   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   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 ({}))r3   r4   )r¿   r   )r   Ú	predicaterë   rP   r   r   r   Úrun_ignoring_varsZ  s    
z'IgnoreEnvironmentTest.run_ignoring_varsc                 C   s   d}| j d |¡|d d S )NZshould_be_ignoredz'{}' not in sys.pathr›   )r0  r¿   )r   rc   r   r   r   Útest_ignore_PYTHONPATHb  s    ÿz,IgnoreEnvironmentTest.test_ignore_PYTHONPATHc                 C   s   | j ddd d S )Nz!sys.flags.hash_randomization == 1rq   rÊ   ©r0  r   r   r   r   Útest_ignore_PYTHONHASHSEEDg  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)
        rU   rç   r2  )r   Zexpected_outcomer   r   r   Útest_sys_flags_not_setk  s    ûz,IgnoreEnvironmentTest.test_sys_flags_not_setN)r*  r+  r,  r0  r1  r3  r4  r   r   r   r   r.  V  s   r.  c                   C   s   t  ¡  d S r   )r   Úreap_childrenr   r   r   r   ÚtearDownModulez  s    r6  Ú__main__)ra   r7   r+   r¦   r   r`   r_   r   Ztest.support.script_helperr   r   r   r   r   ÚhasattrrN   r   ZTestCaser   r-  r.  r6  r*  rã   r   r   r   r   Ú<module>   s.   
      @ÿ"