a
    ¼3j'‰  ã                   @   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   úN/www/server/python_manager/versions/3.9.10/lib/python3.9/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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-d.„ Zd/d0„ Z d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%d;d<„ Z&d=d>„ Z'd?d@„ Z(e
 e)j*dAkdB¡e
 ejdCkdD¡dEdF„ ƒƒZ+dGdH„ Z,dIdJ„ Z-dKdL„ Z.dMdN„ Z/dOdP„ Z0dQdR„ Z1dSdT„ Z2e
 eƒ dU¡dVdW„ ƒZ3dXdY„ Z4dZd[„ Z5d\d\d]œd^d_„Z6d`da„ Z7dsdcdd„Z8dedf„ Z9dgdh„ Z:didj„ Z;dkdl„ Z<e
 ejdkdm¡dndo„ ƒZ=dpdq„ Z>drS )tÚ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 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)ÚosÚenvironÚcopyr7   rF   r+   r6   rE   ÚSTDOUTrG   r   ÚAssertionErrorr.   )r   Zundecodableri   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   rf   rg   T)rB   rr   ri   )r+   r6   Údictrj   rk   r7   rt   rE   )rv   rI   ri   rw   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   Trq   rs   ru   rw   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_cmdrx   rz   r|   Z
valid_utf8Zinvalid_utf8Z	test_argsr   rv   Úprocr   rw   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   rf   rg   r4   )rB   ri   r   )r-   r'   r#   rj   rk   rl   r7   rF   r+   r6   rE   rG   r?   r   )	r   rr   rP   ZdecodedÚexpectedri   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   rr   Úcheckz#False False False
False False True
)	ÚtextwrapÚdedentr+   r6   r7   rt   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#   )rj   Úpathsepr   r%   r-   )r   Zpath1Zpath2ÚpathrP   r   r   r   r   r   r   Útest_large_PYTHONPATH.  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_issue16309=  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   ri   u   a=Ã© b=í²€ c=ð€€ d=ô¿¿r#   r   rY   Úbackslashreplace)rj   rk   rl   r7   rF   r+   r6   rE   rm   r[   r\   r#   r-   r   Úreprr%   )r   Úencodingri   r
   rr   r   Úescapedr   r   r   Útest_displayhook_unencodableN  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ÚNamedTemporaryFilerj   Úlinesepr-   r\   r&   r   Úseekr7   rF   r+   r6   rE   rG   r?   rM   )r   rP   r…   r[   Úsepr   rB   rC   r   r   r   Úcheck_input`  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_readlinel  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_inputs  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   rd   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_newliney  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*   )rj   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 1rh   s   random is 0)r   rj   rk   Úgetry   Úranger   r?   ÚappendÚsortedÚsetZassertGreaterÚlenr¸   r%   )r   Zhashesri   Ú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_cwdrj   r•   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"   )rr   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   )ry   ÚintÚboolr€   r   )r   Úvaluer…   Úenv_varsÚdont_write_bytecoderP   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 ]æ\}}}|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:   ri   r   r   r   Útest_set_pycache_prefixC  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_newlinesri   r   )ry   rj   rk   Úpopr+   r6   r7   rt   rE   rm   r?   r   rB   rM   )r   rð   rñ   r:   ri   r   r   r   r   Úrun_xdev]  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_xdevp  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   ry   rj   rk   rø   r7   rt   rE   rm   r?   r   rB   rM   )r   Zcmdline_optionZenvvarÚuse_pywarningrP   r:   ri   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   )ry   rj   rk   rø   r+   r6   r7   rt   rE   rm   r?   rB   rM   r   )r   Úenv_varÚnamerP   ri   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÷   ri   rû   r   rU   rü   )ry   rj   rk   rø   r+   r6   r7   rt   rE   r?   rB   rM   r   )r   rP   ri   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   rj   r•   Úsplitr7   rt   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   rr   z'unknown option --unknown-option
usage: r   )
r+   r6   r7   rt   rE   r   rC   r.   ZassertNotEqualr   )r   r:   r   Úerr_msgr   r   r   Útest_parsing_error  s    ýzCmdLineTest.test_parsing_errorN)F)?Ú__name__Ú
__module__Ú__qualname__r   r   r   r!   r)   r0   r2   ÚunittestÚskipIfr   r@   rQ   rW   r^   r`   Z
skipUnlessr   ra   rc   r+   r¨   rp   r‚   Z
is_androidr†   rŠ   r   r‘   r–   r˜   r   r¤   r¦   r§   rª   r®   r°   r±   rj   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_vars,  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_PYTHONPATH4  s    ÿz,IgnoreEnvironmentTest.test_ignore_PYTHONPATHc                 C   s   | j ddd d S )Nz!sys.flags.hash_randomization == 1rh   rÃ   ©r  r   r   r   r   Útest_ignore_PYTHONHASHSEED9  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à   r!  )r   Zexpected_outcomer   r   r   Útest_sys_flags_not_set=  s    ûz,IgnoreEnvironmentTest.test_sys_flags_not_setN)r  r  r  r  r   r"  r#  r   r   r   r   r  (  s   r  c                   C   s   t  ¡  d S r   )r   Úreap_childrenr   r   r   r   ÚtearDownModuleL  s    r%  Ú__main__)rj   r7   r+   rŸ   rˆ   r  Útestr   Ztest.support.script_helperr   r   r   r   r   ÚhasattrrN   r   ZTestCaser   r  r  r%  r  rÜ   r   r   r   r   Ú<module>   s.   
      ÿ"