B
    18™\_x  ã               @   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_environmentÚgettotalrefcountc             C   s   t | ƒ}|  ¡ }||fS )N)r   Úwait)ÚpÚdataÚ
returncode© r   úV/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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p¸ejd"¡d#d$„ ƒZ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&e
 e'j(d=kd>¡d?d@„ ƒZ)dAdB„ Z*dCdD„ Z+dEdF„ Z,dGdH„ Z-dIdJ„ Z.dKdL„ Z/dMdN„ Z0e
 eƒ dO¡dPdQ„ ƒZ1dRdS„ Z2dTdTdUœdVdW„Z3dXdY„ Z4did[d\„Z5d]d^„ Z6d_d`„ Z7dadb„ Z8dcdd„ Z9e
 ejdkde¡dfdg„ ƒZ:dhS )jÚ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 )Nz-S)r   )r   r   r   r   Útest_site_flag+   s    zCmdLineTest.test_site_flagc             C   s   t dƒ\}}}|  d|¡ d S )Nz-hs   usage)r   ÚassertIn)r   r   r   r   r   r   r   Ú
test_usage.   s    zCmdLineTest.test_usagec             C   sX   dt jd d…   d¡}x:dD ]2}t|ƒ\}}}|  | |¡¡ |  | |¡¡ qW d S )NzPython %d.%dé   Úascii)z-Vz	--versionz-VV)ÚsysÚversion_infoÚencoder   ÚassertFalseÚ
startswithr   )r   ÚversionZswitchr   r   r   r   r   r   Útest_version2   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_verbose9   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 )Nz-E)z-cz import sys; print(sys._xoptions)r   )r#   Ú
executableÚ
subprocessÚcheck_outputÚevalÚ
splitlines)Úargsr   Úoptsr   r   r   Úget_xoptionsE   s
    
z/CmdLineTest.test_xoptions.<locals>.get_xoptionsz-Xaz	-Xb=c,d=eTzc,d=e)ÚaÚb)ÚassertEqual)r   r2   r1   r   r   r   Útest_xoptionsB   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#   r+   Úextendr,   ÚPIPEÚPopenÚcommunicater7   Úcloser8   r   r5   )r0   Úcmdr:   r
   r   r   r   )r   r   r   Ú
run_pythonU   s    


z1CmdLineTest.test_showrefcount.<locals>.run_pythonz import sys; print(sys._xoptions)z-cs   {}r   z-XÚshowrefcounts   {'showrefcount': True}s   ^\[\d+ refs, \d+ blocks\])r5   ÚrstripÚPy_DEBUGÚassertRegex)r   r?   Úcoder   r   r   r   )r   r   Útest_showrefcountT   s    zCmdLineTest.test_showrefcountc             C   s0   t dƒ t ddƒ t dddƒ tddddƒ d S )Nz-mZfnord43520xyzZrunpyÚtimeitz-nÚ1)r   r   )r   r   r   r   Útest_run_modulep   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 )Nz-iz-mrF   z-nrG   s   Timer
s   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 )Nz-czraise ExceptionÚpass)r   r   )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)z-c)r   ÚFS_NONASCIIÚordr   )r   Ú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())z-c)r7   r8   Úenvé   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,   r;   r#   r+   r:   ÚSTDOUTr<   r   ÚAssertionErrorr'   )r   ZundecodablerY   rD   r
   r7   r8   Úpatternr   r   r   Útest_undecodable_code›   s"    




z!CmdLineTest.test_undecodable_codeÚdarwinz%test specific to Mac OS X and Androidc                s.   ‡ fdd„}d  d¡}||ƒ d}||ƒ d S )Nc                sv   |   dd¡}t|ƒ d¡d }tj ¡ }d|d< tjtj	dd| ftj
|d	}| ¡ \}}ˆ  ||¡ ˆ  |jd
¡ d S )Nzutf-8Úsurrogateescaper"   r   rV   rW   z-cz%import sys; print(ascii(sys.argv[1])))r7   rY   r   )Údecoder"   r%   r[   r\   r]   r,   r;   r#   r+   r:   r<   r5   r   )ÚtextÚdecodedÚexpectedrY   r
   r7   r8   )r   r   r   r-   Á   s    
z7CmdLineTest.test_osx_android_utf8.<locals>.check_outputu   e:Ã©, euro:â‚¬, non-bmp:ô¿¿zutf-8s   ÿÃ©Ãÿí €)r%   )r   r-   re   r   )r   r   Útest_osx_android_utf8¾   s
    
z!CmdLineTest.test_osx_android_utf8c             C   sŠ   x„dD ]|}d| }t dd|ƒ\}}}|dkr0|n|}|  |dd| ¡ d| }t dd|ƒ\}}}|dkrl|n|}|  |dd	| ¡ qW d S )
N)r7   r8   z6import os, sys; sys.%s.buffer.write(b'x'); os._exit(0)z-uz-cr8   ó   xzbinary %s not unbufferedz.import os, sys; sys.%s.write('x'); os._exit(0)ztext %s not unbuffered)r   r5   )r   ÚstreamrD   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))z-uz-cri   r   )r   rJ   rK   Úflushr   r5   r   r'   )r   rD   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ô  FGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJFGHIJz¨if 1:
            import sys
            path = ":".join(sys.path)
            path = path.encode("ascii", "backslashreplace")
            sys.stdout.buffer.write(path)z-Sz-c)Ú
PYTHONPATHr"   )r[   Úpathsepr   r   r%   )r   Zpath1Zpath2ÚpathrD   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 )Nz¨if 1:
            import sys
            path = ":".join(sys.path)
            path = path.encode("ascii", "backslashreplace")
            sys.stdout.buffer.write(path)z-cÚ )rn   F)Z
__isolated)r   r5   )r   rD   Zrc1Zout1Zerr1Zrc2Zout2Zerr2r   r   r   Ú test_empty_PYTHONPATH_issue16309  s    
z,CmdLineTest.test_empty_PYTHONPATH_issue16309c             C   s’   xŒ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W d S )
N)r"   zlatin-1zutf-8ZPYTHONIOENCODINGz-i)rJ   r7   r8   rY   u   a=Ã© b=í²€ c=ð€€ d=ô¿¿r"   r   s   exit()
Úbackslashreplace)r[   r\   r]   r,   r;   r#   r+   r:   r^   rJ   rK   r"   r%   r   Úreprr   )r   ÚencodingrY   r
   re   r   Úescapedr   r   r   Útest_displayhook_unencodable  s    

z(CmdLineTest.test_displayhook_unencodablec          
   C   sŠ   t  d¡f}tj d¡}| | d¡¡ | ¡  | d¡ t	j
tjd|f|t	jd}| ¡ \}}W d Q R X W d Q R X |  | ¡ |¡ d S )Nzwb+ÚASCII)s   abcs   defr   z-c)rJ   r7   )ÚtempfileÚNamedTemporaryFiler[   Úlinesepr%   rK   Újoinrl   Úseekr,   r;   r#   r+   r:   r<   r5   rA   )r   rD   rg   rJ   ÚsepÚprocr7   r8   r   r   r   Úcheck_input+  s    

 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_readline7  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)z-crT   s   1
2
s   3
4s   1
2
s   3
4)r   r#   Úplatformr5   )r   rD   r   r   r   r   r   r   Útest_output_newlineD  s    
zCmdLineTest.test_output_newlinec             C   s4   t ddƒ\}}}|  | dd¡d¡ |  d|¡ d S )Nz-cú'r"   ÚignoreÚSyntaxErrorr   )r   rC   rd   r5   )r   r   r   r   r   r   r   Útest_unmached_quoteU  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())z-cr   éx   r"   r‡   z"Exception ignored in.*
OSError: .*)r   r5   rC   rd   )r   rD   r   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()z-cr   )r   r5   )r   rD   r   r   r   r   r   r   Útest_closed_stdoutj  s    zCmdLineTest.test_closed_stdoutÚposixztest needs POSIX semanticsc                sl   dj ˆ d}‡ fdd„}tjtjdd|gtjtjtj|d}| ¡ \}}|  t 	|¡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ˆ krt  d¡ dˆ kr$t  d¡ dˆ kr6t  d¡ d S )NrJ   r   r7   rZ   r8   r!   )r[   r=   r   )rŽ   r   r   Úpreexec{  s    

z+CmdLineTest._test_no_stdio.<locals>.preexecz-Ez-c)rJ   r7   r8   Ú
preexec_fnr   é*   )Úformatr,   r;   r#   r+   r:   r<   r5   r   Ústrip_python_stderrr   )r   rŽ   rD   r   r
   r   r   r   )rŽ   r   Ú_test_no_stdios  s    zCmdLineTest._test_no_stdioc             C   s   |   dg¡ d S )NrJ   )r”   )r   r   r   r   Útest_no_stdinŒ  s    zCmdLineTest.test_no_stdinc             C   s   |   dg¡ d S )Nr7   )r”   )r   r   r   r   Útest_no_stdout  s    zCmdLineTest.test_no_stdoutc             C   s   |   dg¡ d S )Nr8   )r”   )r   r   r   r   Útest_no_stderr’  s    zCmdLineTest.test_no_stderrc             C   s   |   dddg¡ d S )NrJ   r7   r8   )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 }x>tdƒD ]2}d}td|f|Ž\}}}|  |d	¡ | |¡ qHW 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ÚrandomrG   Z
__cleanenvé   zprint(hash("spam"))z-cr   rZ   z83 runs produced an identical random hash  for "spam": {})Úmsgz<import sys; print("random is", sys.flags.hash_randomization)rr   )r™   s   random is 1rX   s   random is 0)r   r[   r\   ÚgetÚdictÚranger   r5   ÚappendÚsortedÚsetÚassertGreaterÚlenr’   r   )r   ZhashesrY   ÚirD   r   r   r   r   r   r   Útest_hash_randomization˜  s2    



z#CmdLineTest.test_hash_randomizationc          	   C   sN   t j}|  t j|¡ t|dƒ}td|d td|d W d Q R X t|ƒ d S )NÚwz
import sys)Úfilezdel sys.modules['__main__'])r   ÚTESTFNÚ
addCleanupÚunlinkÚopenÚprintr   )r   ÚfilenameÚ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 )	Nz-Ez-zs   Unknown option: -zrZ   r   )Zwithoutz-as   Unknown option: -a)r   r   r5   r/   Úcountr   )r   r   r   r   r   r   r   Útest_unknown_optionsÈ  s    z CmdLineTest.test_unknown_optionsz6Cannot 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 Q R X t	|d
ƒ}| 
d¡ | 
d¡ W d Q R X | jtjtjtj|g|tjd tjtjd|g|d}|  | ¡ d¡ W d Q R X d S )Nz-Iz-IEsz-czSfrom sys import flags as f; print(f.no_user_site, f.ignore_environment, f.isolated)rr   )Zdummyvars   1 1 1zuuid.pyzmain.pyr§   z)raise RuntimeError('isolated mode test')
zimport uuid
zprint('ok')
)Úcwdr8   )r³   s   ok)r   r   r5   Ústripr   Útemp_cwdr[   rp   r}   r¬   rK   ÚassertRaisesr,   ÚCalledProcessErrorr-   r#   r+   ÚDEVNULL)r   r   r   r   ZtmpdirZfakeÚmainÚfr   r   r   Útest_isolatedmodeÚ  s*    





zCmdLineTest.test_isolatedmodec          
   C   sX   xRdD ]J\}}t ||||d}d|› d}| j|d td|f|Ž W d Q R X qW d S )N))rr   r   )rG   rZ   )re   rZ   )Ú2r!   )ÚPYTHONDEBUGÚPYTHONOPTIMIZEÚPYTHONDONTWRITEBYTECODEÚPYTHONVERBOSEzØimport sys; sys.stderr.write(str(sys.flags)); sys.exit(not (
                    sys.flags.debug == sys.flags.optimize ==
                    sys.flags.dont_write_bytecode == sys.flags.verbose ==
                    z
                )))Zenvar_valuez-c)rž   ÚsubTestr   )r   Úvaluerg   Úenv_varsrD   r   r   r   Útest_sys_flags_setõ  s    zCmdLineTest.test_sys_flags_setT)Úcheck_exitcodeÚxdevc            G   s†   t tjƒ}| dd ¡ | dd ¡ | dd ¡ |rDtjddf|˜}ntjf|˜}tj|tjtj	d|d}|r||  
|jd|¡ |j ¡ S )	NÚPYTHONWARNINGSÚPYTHONDEVMODEÚPYTHONMALLOCz-XÚdevT)r7   r8   Úuniversal_newlinesrY   r   )rž   r[   r\   Úpopr#   r+   r,   Úrunr:   r^   r5   r   r7   rA   )r   rÅ   rÆ   r0   rY   r€   r   r   r   Úrun_xdev
  s    
zCmdLineTest.run_xdevc          	   C   sp  d}| j d|dd}|  |d¡ |   d|¡}|  |d¡ d}trFd}nd	}|   d|¡}|  ||¡ |   d
d|¡}|  |d|› ¡ |   dd|¡}|  |d|› ¡ |   dd|¡}|  |d|› ¡ ydd l}W n tk
râ   Y nJX d}t ¡  | j d|dd}W d Q R X t ¡ rd}nd}|  ||¡ ydd l}W n tk
rN   Y nX d}|   d|¡}|  |d¡ d S )Nz%import sys; print(sys.flags.dev_mode)z-cF)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 z-bbzerror::BytesWarning z-Werrorzerror::Warning r   z<import _testcapi; print(_testcapi.pymem_getallocatorsname()))rÅ   Úpymalloc_debugÚmalloc_debugz5import faulthandler; print(faulthandler.is_enabled()))	rÎ   r5   rB   Ú	_testcapiÚImportErrorr   ÚSuppressCrashReportÚwith_pymallocÚfaulthandler)r   rD   r   Úexpected_filtersrÓ   Z
alloc_namer×   r   r   r   Ú	test_xdev  sF    

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-Wz-bbz-crÈ   rÇ   T)r7   r8   rË   rY   r   )r#   r+   rž   r[   r\   rÌ   r,   rÍ   r:   r^   r5   r   r7   rA   )r   Zcmdline_optionÚenvvarÚuse_pywarningrD   r0   rY   r€   r   r   r   Úcheck_warnings_filtersX  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Û   )rB   rÜ   r5   )r   rØ   r   r   r   r   Útest_warnings_filter_precedencel  s    z+CmdLineTest.test_warnings_filter_precedencec             C   s€   d}t tjƒ}| dd ¡ |d k	r,||d< n| dd ¡ tjd|f}tj|tjtj	d|d}|  
|j ¡ |¡ |  
|jd¡ d S )Nz<import _testcapi; print(_testcapi.pymem_getallocatorsname())rÈ   rÉ   z-cT)r7   r8   rË   rY   r   )rž   r[   r\   rÌ   r#   r+   r,   rÍ   r:   r^   r5   r7   rA   r   )r   Úenv_varÚnamerD   rY   r0   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¡ x6|D ].\}}| j||d	 |  ||¡ W d Q R X qVW d S )
NrÑ   ÚpymallocrÒ   ÚmallocÚdebug)râ   râ   )rÒ   rÒ   ))rá   rá   )rÑ   rÑ   )rÞ   rß   )r   rÖ   rB   r9   rÁ   rà   )r   rá   Údefault_nameZdefault_name_debugÚ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 )
Nz%import sys; print(sys.flags.dev_mode)rÈ   z-cT)r7   rË   rY   rÏ   r   rG   rÐ   )rž   r[   r\   rÌ   r#   r+   r,   rÍ   r:   r5   r7   rA   r   )r   rD   rY   r0   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 )Nz-czprint(0)z\.\.\.\)r7   r+   r   ó   0)r#   r+   r[   rp   Úsplitr,   rÍ   r:   r5   r   r7   r´   )r   r0   ÚprefixZexer+   r€   r   r   r   Útest_argv0_normalization¾  s    
z$CmdLineTest.test_argv0_normalizationN)F);Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r    r)   r*   ÚunittestÚskipIfr   r6   rE   rH   rM   rO   Ú
skipUnlessr   rP   rS   r#   r„   ra   Ú
is_androidrh   rk   rm   rq   rs   rx   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ë   r   r   r   r   r      sd   		" 
	%;
r   z6Cannot run -I tests when PYTHON env vars are required.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|ŽS )Nz@import sys; sys.stderr.write(str(sys.flags)); sys.exit(not ({}))z-Ez-c)r’   r   )r   Ú	predicaterÃ   rD   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.path)rn   )rõ   r’   )r   rp   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 == 1rX   )r™   )rõ   )r   r   r   r   Útest_ignore_PYTHONHASHSEEDÛ  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)
        rG   )r½   r¾   r¿   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  tt¡ t  ¡  d S )N)r   Úrun_unittestr   ró   Úreap_childrenr   r   r   r   Ú	test_mainî  s    rû   Ú__main__)r[   r,   r#   Ú	sysconfigrz   rï   Útestr   Ztest.support.script_helperr   r   r   r   r   ÚhasattrrB   r   ÚTestCaser   rð   ró   rû   rì   r   r   r   r   Ú<module>   s*   
     3
"