B
    18™\Øž  ã               @   s4  d Z 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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 ee	dƒZej ej e¡dd¡Zej ej e¡¡Ze d¡ZG d	d
„ d
ejƒZG dd„ dejƒZ G dd„ de ƒZ!G dd„ de ƒZ"G dd„ dejƒZ#e$dkr0e %¡  dS )zM
Tests of regrtest.py.

Note: test_regrtest cannot be run twice in parallel.
é    N)Úlibregrtest)Úsupport)ÚutilsZ
getobjectsz..zÃ
    from signal import SIGINT
    try:
        from _testcapi import raise_signal
        raise_signal(SIGINT)
    except ImportError:
        import os
        os.kill(os.getpid(), SIGINT)
    c               @   sZ  e Zd ZdZdd„ Zdd„ Ze ee	dƒd¡dd	„ ƒZ
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Z d6d7„ Z!d8d9„ Z"d:d;„ Z#d<d=„ Z$d>d?„ Z%d@dA„ Z&dBdC„ Z'dDdE„ Z(dFdG„ Z)dHdI„ Z*dJdK„ Z+dLdM„ Z,dNdO„ Z-dPdQ„ Z.dRS )SÚParseArgsTestCasezC
    Test regrtest's argument parsing, function _parse_args().
    c          
   C   sH   t  ¡ &}|  t¡ t |¡ W d Q R X W d Q R X |  || ¡ ¡ d S )N)r   Úcaptured_stderrÚassertRaisesÚ
SystemExitr   Ú_parse_argsÚassertInÚgetvalue)ÚselfÚargsÚmsgÚerr© r   úV/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_regrtest.pyÚ
checkError,   s    zParseArgsTestCase.checkErrorc             C   sp   xjdD ]b}| j |dL t ¡ (}|  t¡ t |g¡ W d Q R X W d Q R X |  d| ¡ ¡ W d Q R X qW d S )N)z-hz--help)ÚoptzRun Python regression tests.)	ÚsubTestr   Úcaptured_stdoutr   r   r   r	   r
   r   )r   r   Úoutr   r   r   Ú	test_help1   s    

 zParseArgsTestCase.test_helpÚdump_traceback_laterz,faulthandler.dump_traceback_later() requiredc             C   s>   t  ddg¡}|  |jd¡ |  dgd¡ |  ddgd¡ d S )Nz	--timeoutz4.2gÍÌÌÌÌÌ@zexpected one argumentÚfoozinvalid float value)r   r	   ÚassertEqualÚtimeoutr   )r   Únsr   r   r   Útest_timeout9   s    zParseArgsTestCase.test_timeoutc             C   s   t  dg¡}|  |j¡ d S )Nz--wait)r   r	   Ú
assertTrueÚwait)r   r   r   r   r   Ú	test_waitA   s    zParseArgsTestCase.test_waitc             C   s.   t  ddg¡}|  |jd¡ |  dgd¡ d S )Nz--worker-argsz[[], {}]zexpected one argument)r   r	   r   Úworker_argsr   )r   r   r   r   r   Útest_worker_argsE   s    z"ParseArgsTestCase.test_worker_argsc          
   C   sT   xNdD ]F}| j |d0 t |dg¡}|  |jd¡ |  |gd¡ W d Q R X qW d S )N)z-Sz--start)r   r   zexpected one argument)r   r   r	   r   Ústartr   )r   r   r   r   r   r   Ú
test_startJ   s
    
zParseArgsTestCase.test_startc             C   sˆ   t  dg¡}|  |jd¡ t  dg¡}|  |jd¡ t  dg¡}|  |jd¡ t  dgd ¡}|  |jd¡ t  g ¡}|  |jd¡ d S )Nz-vé   z-vvvé   z	--verboser   )r   r	   r   Úverbose)r   r   r   r   r   Útest_verboseQ   s    
zParseArgsTestCase.test_verbosec          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-wz
--verbose2)r   )r   r   r	   r   Úverbose2)r   r   r   r   r   r   Útest_verbose2]   s    
zParseArgsTestCase.test_verbose2c          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-Wz
--verbose3)r   )r   r   r	   r   Úverbose3)r   r   r   r   r   r   Útest_verbose3c   s    
zParseArgsTestCase.test_verbose3c          
   C   sP   xJdD ]B}| j |d, t |g¡}|  |j¡ |  |jd¡ W d Q R X qW d S )N)z-qz--quiet)r   r   )r   r   r	   r   Úquietr   r'   )r   r   r   r   r   r   Ú
test_quieti   s
    
zParseArgsTestCase.test_quietc          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-oz	--slowest)r   )r   r   r	   r   Ú
print_slow)r   r   r   r   r   r   Ú	test_slowp   s    
zParseArgsTestCase.test_slowc             C   s4   t  dg¡}|  |j¡ t  dg¡}|  |j¡ d S )Nz--headerz	--verbose)r   r	   r   Úheader)r   r   r   r   r   Útest_headerv   s    zParseArgsTestCase.test_headerc          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-rz--randomize)r   )r   r   r	   r   Ú	randomize)r   r   r   r   r   r   Útest_randomize}   s    
z ParseArgsTestCase.test_randomizec             C   sJ   t  ddg¡}|  |jd¡ |  |j¡ |  dgd¡ |  ddgd¡ d S )Nz
--randseedZ12345i90  zexpected one argumentr   zinvalid int value)r   r	   r   Úrandom_seedr   r3   r   )r   r   r   r   r   Útest_randseedƒ   s
    zParseArgsTestCase.test_randseedc          
   C   sf   x`dD ]X}| j |dB t |dg¡}|  |jd¡ |  |gd¡ |  |ddgd¡ W d Q R X qW d S )N)z-fz
--fromfile)r   r   zexpected one argumentz-szdon't go together)r   r   r	   r   Úfromfiler   )r   r   r   r   r   r   Útest_fromfileŠ   s    
zParseArgsTestCase.test_fromfilec          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-xz	--exclude)r   )r   r   r	   r   Úexclude)r   r   r   r   r   r   Útest_exclude’   s    
zParseArgsTestCase.test_excludec          
   C   sT   xNdD ]F}| j |d0 t |g¡}|  |j¡ |  |ddgd¡ W d Q R X qW d S )N)z-sz--single)r   z-fr   zdon't go together)r   r   r	   r   Úsingler   )r   r   r   r   r   r   Útest_single˜   s
    
zParseArgsTestCase.test_singlec          
   C   sî   xPdD ]H}| j |d2 t |dg¡}|  |jdg¡ |  |gd¡ W d Q R X qW t ddddg¡}|  |jddg¡ |  tjtj	¡ t
tj	dƒ}td	|d
 td|d
 W d Q R X tj tj	¡}t ddd|g¡}|  |jdd	dg¡ d S )N)z-mz--match)r   Úpatternzexpected one argumentz-mZpattern1Zpattern2ÚwZ
matchfile1)ÚfileZ
matchfile2Úmatchz--matchfile)r   r   r	   r   Úmatch_testsr   Ú
addCleanupr   ÚunlinkÚTESTFNÚopenÚprintÚosÚpathÚabspath)r   r   r   ÚfpÚfilenamer   r   r   Ú
test_matchŸ   s"    


zParseArgsTestCase.test_matchc          
   C   sl   xfdD ]^}| j |dH t |dg¡}|  |j¡ t |dg¡}|  |j¡ |  |gd¡ W d Q R X qW d S )N)z-Gz
--failfast)r   z-vz-Wz#-G/--failfast needs either -v or -W)r   r   r	   r   Úfailfastr   )r   r   r   r   r   r   Útest_failfastµ   s    
zParseArgsTestCase.test_failfastc          
   C   sü   xödD ]î}| j |dØ t |dg¡}|  |jddg¡ t |dg¡}|  |jdg¡ ttjƒ}| d¡ t |dg¡}|  |j|¡ |  |gd¡ |  |d	gd
¡ t |dg¡}|  |jttjƒdg ¡ t |dg¡}|  |jdg¡ W d Q R X qW d S )N)z-uz--use)r   zgui,networkÚguiÚnetworkzgui,none,networkzall,-guizexpected one argumentr   zinvalid resourcez
all,tzdataÚtzdataÚextralargefile)	r   r   r	   r   Úuse_resourcesÚlistÚALL_RESOURCESÚremover   )r   r   r   Úexpectedr   r   r   Útest_use¾   s"    


zParseArgsTestCase.test_usec          
   C   sT   xNdD ]F}| j |d0 t |dg¡}|  |jd¡ |  |gd¡ W d Q R X qW d S )N)z-Mz
--memlimit)r   Z4Gzexpected one argument)r   r   r	   r   Úmemlimitr   )r   r   r   r   r   r   Útest_memlimit×   s
    
zParseArgsTestCase.test_memlimitc             C   s:   t  ddg¡}|  |jtj tjd¡¡ |  	dgd¡ d S )Nz	--testdirr   zexpected one argument)
r   r	   r   ÚtestdirrG   rH   Újoinr   ÚSAVEDCWDr   )r   r   r   r   r   Útest_testdirÞ   s    zParseArgsTestCase.test_testdirc          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-Lz
--runleaks)r   )r   r   r	   r   Úrunleaks)r   r   r   r   r   r   Útest_runleaksã   s    
zParseArgsTestCase.test_runleaksc          
   C   sØ   xÒdD ]Ê}| j |d´ t |dg¡}|  |jd¡ t |dg¡}|  |jd¡ t |dg¡}|  |jd¡ t |d	g¡}|  |jd
¡ |  |gd¡ |  |dgd¡ |  |dgd¡ |  |dgd¡ W d Q R X qW d S )N)z-Rz--huntrleaks)r   ú:)é   é   z
reflog.txtz6:)é   rc   z
reflog.txtz:3)rb   r&   z
reflog.txtz6:3:leaks.log)rd   r&   z	leaks.logzexpected one argumentÚ6z&needs 2 or 3 colon-separated argumentszfoo:zinvalid huntrleaks valuez6:foo)r   r   r	   r   Ú
huntrleaksr   )r   r   r   r   r   r   Útest_huntrleaksé   s    

z!ParseArgsTestCase.test_huntrleaksc          
   C   s¬   x¦dD ]ž}| j |dˆ t |dg¡}|  |jd¡ |  |gd¡ |  |dgd¡ |  |ddgd	¡ |  |dd
gd	¡ |  |ddgd	¡ |  |dd
gd	¡ W d Q R X qW d S )N)z-jz--multiprocess)r   Ú2é   zexpected one argumentr   zinvalid int valuez-Tzdon't go togetherz-lÚ0)r   r   r	   r   Úuse_mpr   )r   r   r   r   r   r   Útest_multiprocessú   s    
z#ParseArgsTestCase.test_multiprocessc          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-Tz
--coverage)r   )r   r   r	   r   Útrace)r   r   r   r   r   r   Útest_coverage  s    
zParseArgsTestCase.test_coveragec          
   C   s`   xZdD ]R}| j |d< t |dg¡}|  |jtj tj	d¡¡ |  
|gd¡ W d Q R X qW d S )N)z-Dz
--coverdir)r   r   zexpected one argument)r   r   r	   r   ÚcoverdirrG   rH   r\   r   r]   r   )r   r   r   r   r   r   Útest_coverdir  s    
zParseArgsTestCase.test_coverdirc          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-Nz--nocoverdir)r   )r   r   r	   ÚassertIsNonero   )r   r   r   r   r   r   Útest_nocoverdir  s    
z!ParseArgsTestCase.test_nocoverdirc          
   C   sd   x^dD ]V}| j |d@ t |dg¡}|  |jd¡ |  |gd¡ |  |dgd¡ W d Q R X qW d S )N)z-tz--threshold)r   Z1000iè  zexpected one argumentr   zinvalid int value)r   r   r	   r   Ú	thresholdr   )r   r   r   r   r   r   Útest_threshold  s    
z ParseArgsTestCase.test_thresholdc             C   sp   xjdD ]b}| j |dL t t ¡ ¡}t |g¡}W d Q R X |  |j¡ | 	¡ }|  
d|¡ W d Q R X qW d S )N)z-nz--nowindows)r   z)the --nowindows (-n) option is deprecated)r   Ú
contextlibÚredirect_stderrÚioÚStringIOr   r	   r   Ú	nowindowsr   r
   )r   r   Ústderrr   r   r   r   r   Útest_nowindows"  s    
z ParseArgsTestCase.test_nowindowsc          
   C   sB   x<dD ]4}| j |d t |g¡}|  |j¡ W d Q R X qW d S )N)z-Fz	--forever)r   )r   r   r	   r   Úforever)r   r   r   r   r   r   Útest_forever+  s    
zParseArgsTestCase.test_foreverc             C   s   |   dgd¡ d S )Nz--xxxzusage:)r   )r   r   r   r   Útest_unrecognized_argument1  s    z,ParseArgsTestCase.test_unrecognized_argumentc             C   s*   t  dg¡}|  |j¡ |  |jd¡ d S )Nz--quir   )r   r	   r   r-   r   r'   )r   r   r   r   r   Útest_long_option__partial4  s    z+ParseArgsTestCase.test_long_option__partialc             C   s8   t  ddg¡}|  |j¡ |  |jd¡ |  |j¡ d S )Nz--quietz	--excluder   )r   r	   r   r-   r   r'   r9   )r   r   r   r   r   Útest_two_options9  s    z"ParseArgsTestCase.test_two_optionsc             C   s    t  ddg¡}|  |jd¡ d S )Nz--startÚ )r   r	   r   r#   )r   r   r   r   r   Ú#test_option_with_empty_string_value?  s    z5ParseArgsTestCase.test_option_with_empty_string_valuec             C   s    t  dg¡}|  |jdg¡ d S )Nr   )r   r	   r   r   )r   r   r   r   r   Útest_argC  s    zParseArgsTestCase.test_argc             C   s<   t  ddg¡}|  |j¡ |  |jd¡ |  |jdg¡ d S )Nz--quietr   r   )r   r	   r   r-   r   r'   r   )r   r   r   r   r   Útest_option_and_argG  s    z%ParseArgsTestCase.test_option_and_argc             C   s4   t  dddg¡}|  |jd¡ |  |jddg¡ d S )NZtest_unaryopz-vZ
test_binopr%   )r   r	   r   r'   r   )r   r   r   r   r   Útest_arg_option_argM  s    z%ParseArgsTestCase.test_arg_option_argc             C   s   |   dgd¡ d S )Nz--unknown-optionz(unrecognized arguments: --unknown-option)r   )r   r   r   r   Útest_unknown_optionR  s    z%ParseArgsTestCase.test_unknown_optionN)/Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚunittestÚ
skipUnlessÚhasattrÚfaulthandlerr   r    r"   r$   r(   r*   r,   r.   r0   r2   r4   r6   r8   r:   r<   rL   rN   rX   rZ   r^   r`   rg   rl   rn   rp   rr   rt   r{   r}   r~   r   r€   r‚   rƒ   r„   r…   r†   r   r   r   r   r   '   sR   		r   c            	   @   sf   e Zd ZdZdZdZdd„ Zddd„Zd	d
„ Zdd„ Z	dd„ Z
ddd„Zdd„ Zddd„Zdd„ ZdS )ÚBaseTestCaser%   Ztest_regrtest_ztest_[a-zA-Z0-9_]+c             C   s4   t j t j t¡¡| _t ¡ | _|  	t
j| j¡ d S )N)rG   rH   ÚrealpathÚdirnameÚ__file__r[   ÚtempfileÚmkdtempÚ
tmptestdirrB   r   Úrmtree)r   r   r   r   ÚsetUp\  s    
zBaseTestCase.setUpNc          
   C   sÆ   |sdt j }t  jd7  _|d kr.t d¡}| j| }tj | j|d ¡}|  	t
j|¡ y(t|ddd}| |¡ W d Q R X W n> tk
rÀ } z t ¡ s®|  d||f ¡ ‚ W d d }~X Y nX |S )	Nznoop%sr%   z¾
                    import unittest

                    class Tests(unittest.TestCase):
                        def test_empty_test(self):
                            pass
                z.pyÚxzutf-8)Úencodingzcannot write %s: %s)r   ÚTEST_UNIQUE_IDÚtextwrapÚdedentÚTESTNAME_PREFIXrG   rH   r\   r•   rB   r   rC   rE   ÚwriteÚPermissionErrorÚ	sysconfigÚis_python_buildÚskipTest)r   ÚnameÚcoderH   rJ   Úexcr   r   r   Úcreate_testb  s"    

zBaseTestCase.create_testc             C   s*   t  ||t j¡}|s&|  d||f ¡ |S )Nz%r not found in %r)ÚreÚsearchÚ	MULTILINEÚfail)r   ÚregexÚoutputr@   r   r   r   Úregex_search€  s    zBaseTestCase.regex_searchc             C   s"   t  d| t j¡}|  ||¡ d S )Nú^)r§   Úcompiler©   ÚassertRegex)r   r¬   r«   r   r   r   Ú
check_line†  s    zBaseTestCase.check_linec             C   s,   d| j  }t ||tj¡}tdd„ |D ƒƒS )NzU^[0-9]+:[0-9]+:[0-9]+ (?:load avg: [0-9]+\.[0-9]{2} )?\[ *[0-9]+(?:/ *[0-9]+)*\] (%s)c             s   s   | ]}|  d ¡V  qdS )r%   N)Úgroup)Ú.0r@   r   r   r   ú	<genexpr>Ž  s    z4BaseTestCase.parse_executed_tests.<locals>.<genexpr>)ÚTESTNAME_REGEXr§   Úfinditerr©   rT   )r   r¬   r«   Úparserr   r   r   Úparse_executed_testsŠ  s    z!BaseTestCase.parse_executed_testsr   Fc                sº  t |tƒr|g}t |tƒr |g}t |tƒr0|g}t |tƒr@|g}t |tƒrP|g}t |tƒr`|g}t |tƒrp|g}|  |¡}|	r–|  t|ƒt|ƒ|¡ n|  |||¡ dd„ ‰ ‡ fdd„}|rÒ|d|ƒ}|  ||¡ |rì|d|ƒ}|  ||¡ |r|d|ƒ}|  ||¡ |r$|d|ƒ}|  ||¡ |rp|d	|ƒ}|  ||¡ |  |d
¡ x"|D ]}d| }|  ||¡ qRW |rŒ|d|ƒ}|  ||¡ t|ƒt|ƒ t|ƒ t|ƒ t|ƒ t|ƒ }|rüd|ˆ |ƒf }|sð|sð|dkrðd| }|  ||¡ |
r|  |d¡ g }|r$| d¡ n|r:|r:| d¡ |
rJ| d¡ t||||
|||fƒsn| d¡ n|s~| d¡ d 	|¡}|r¦|  |d| ¡ d| }|  |d| ¡ d S )Nc             S   s   | dkrdS dS )Nr%   Úsr   r   )Úcountr   r   r   Úpluralª  s    z1BaseTestCase.check_executed_tests.<locals>.pluralc                s6   t |ƒ}d t|ƒ¡}| |ˆ |ƒf }d||f }|S )Nú z%s:\n    %s$)Úlenr\   Úsorted)Zline_formatÚtestsrº   Únamesr«   )r»   r   r   Ú
list_regex­  s
    z5BaseTestCase.check_executed_tests.<locals>.list_regexz%s test%s skippedz%s test%s failedz+%s test%s altered the execution environmentz%s test%s omittedz%s re-run test%sz'Re-running failed tests in verbose modez"Re-running test %r in verbose modez%s test%s run no testsz%s test%s OK\.$r%   zAll %sz(Test suite interrupted by signal SIGINT.ÚFAILUREzENV CHANGEDÚINTERRUPTEDzNO TEST RUNÚSUCCESSz, zTests result: %szFAILURE then %s)
Ú
isinstanceÚstrr¸   r   Úsetr±   r½   ÚappendÚanyr\   )r   r¬   r¿   ÚskippedÚfailedÚenv_changedÚomittedÚrerunÚno_test_ranr3   ÚinterruptedÚfail_env_changedÚexecutedrÁ   r«   r£   ÚgoodÚresultr   )r»   r   Úcheck_executed_tests  sˆ    













0



z!BaseTestCase.check_executed_testsc             C   s>   |   d|¡}t| d¡ƒ}|  d|  ko0dkn  |¡ |S )NzUsing random seed ([0-9]+)r%   r   i€–˜ )r­   Úintr²   r   )r   r¬   r@   Úrandseedr   r   r   Úparse_random_seedï  s     zBaseTestCase.parse_random_seedr   c             K   sx   |sd}d|krt j|d< t j|fd|t jdœ|—Ž}|j|krtdt|ƒ|j|jf }|jrj|d|j 7 }|  |¡ |S )Nr   rz   T)Úuniversal_newlinesÚinputÚstdoutz8Command %s failed with exit code %s

stdout:
---
%s
---
z
stderr:
---
%s---
)Ú
subprocessÚPIPEÚrunÚ
returncoderÆ   rÛ   rz   rª   )r   r   rÚ   ÚexitcodeÚkwÚprocr   r   r   r   Úrun_commandõ  s"    



zBaseTestCase.run_commandc             K   s&   t jdddf|•}| j|f|Ž}|jS )Nz-XrŽ   z-I)ÚsysÚ
executablerã   rÛ   )r   r   rá   râ   r   r   r   Ú
run_python  s    zBaseTestCase.run_python)NN)	r   r   r   r   r   r   FFF)Nr   )r‡   rˆ   r‰   rš   r   rµ   r—   r¦   r­   r±   r¸   rÕ   rØ   rã   ræ   r   r   r   r   r   W  s    
    
[
r   c                   sÈ   e Zd ZdZdZ‡ fdd„Zd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e e ¡ d¡e ejdkd¡dd„ ƒƒZe ejdkd¡dd „ ƒZ‡  ZS )!ÚProgramsTestCasezp
    Test various ways to run the Python test suite. Use options close
    to options used on the buildbot.
    rc   c                sr   t ƒ  ¡  ‡ fdd„tˆ jƒD ƒˆ _dddgˆ _dddˆ j gˆ _tt	d	ƒrXˆ j 
d
¡ tjdkrnˆ j d¡ d S )Nc                s   g | ]}ˆ   ¡ ‘qS r   )r¦   )r³   Úindex)r   r   r   ú
<listcomp>#  s    z*ProgramsTestCase.setUp.<locals>.<listcomp>z-Wdz-Ez-bbz-uallz-rwWz--testdir=%sr   )z	--timeoutZ3600z-j4Úwin32z-n)Úsuperr—   ÚrangeÚNTESTr¿   Úpython_argsr•   Úregrtest_argsr   rŽ   Úextendrä   ÚplatformrÈ   )r   )Ú	__class__)r   r   r—     s    


zProgramsTestCase.setUpc             C   s    |   |¡ | j|| jdd d S )NT)r3   )rØ   rÕ   r¿   )r   r¬   r   r   r   Úcheck_output-  s    
zProgramsTestCase.check_outputc             C   s   |   |¡}|  |¡ d S )N)ræ   ró   )r   r   r¬   r   r   r   Ú	run_tests1  s    
zProgramsTestCase.run_testsc             C   s2   t j | jd¡}| j|f| j| j•}|  |¡ d S )Nzregrtest.py)rG   rH   r\   r[   rî   rï   r¿   rô   )r   Úscriptr   r   r   r   Útest_script_regrtest5  s    z%ProgramsTestCase.test_script_regrtestc             C   s    | j d| j| j•}|  |¡ d S )Nú-mÚtest)r÷   rø   )rî   rï   r¿   rô   )r   r   r   r   r   Útest_module_test<  s    z!ProgramsTestCase.test_module_testc             C   s    | j d| j| j•}|  |¡ d S )Nú-mútest.regrtest)rú   rû   )rî   rï   r¿   rô   )r   r   r   r   r   Útest_module_regrtestB  s    z%ProgramsTestCase.test_module_regrtestc             C   s    | j d| j| j•}|  |¡ d S )Nú-mútest.autotest)rý   rþ   )rî   rï   r¿   rô   )r   r   r   r   r   Útest_module_autotestH  s    z%ProgramsTestCase.test_module_autotestc             C   s(   d}| j d|f| j| j•}|  |¡ d S )Nzfrom test import autotestz-c)rî   rï   r¿   rô   )r   r¤   r   r   r   r   Útest_module_from_test_autotestN  s    
z/ProgramsTestCase.test_module_from_test_autotestc             C   s2   t j | jd¡}| j|f| j| j•}|  |¡ d S )Nzautotest.py)rG   rH   r\   r[   rî   rï   r¿   rô   )r   rõ   r   r   r   r   Útest_script_autotestU  s    z%ProgramsTestCase.test_script_autotestz$run_tests.py script is not installedc             C   s0   t j tddd¡}|f| j| j•}|  |¡ d S )NÚToolsÚscriptszrun_tests.py)rG   rH   r\   ÚROOT_DIRrï   r¿   rô   )r   rõ   r   r   r   r   Útest_tools_script_run_tests[  s    z,ProgramsTestCase.test_tools_script_run_testsc             G   s   |   |¡}|  |j¡ d S )N)rã   ró   rÛ   )r   r   râ   r   r   r   Ú	run_batchc  s    
zProgramsTestCase.run_batchz test.bat script is not installedrê   zWindows onlyc             C   s^   t j tddd¡}d| j g}t ¡ d dkr8| d¡ tsF| d¡ | j	|f|| j
žŽ  d S )	Nr  Zbuildbotztest.batz--testdir=%sr   Ú64bitz-x64z+d)rG   rH   r\   r  r•   rñ   ÚarchitecturerÈ   ÚPy_DEBUGr  r¿   )r   rõ   Z	test_argsr   r   r   Útest_tools_buildbot_testg  s    

z)ProgramsTestCase.test_tools_buildbot_testc             C   sv   t j td¡}t j |¡s,|  d|› d¡ dg}t ¡ d dkrL| d¡ t	rZ| d¡ | j
|f|| j| jžŽ  d S )	NzPCbuild\rt.batzFile "z" does not existz-qr   r  z-x64z-d)rG   rH   r\   r  Úisfiler¢   rñ   r  rÈ   r	  r  rï   r¿   )r   rõ   Zrt_argsr   r   r   Útest_pcbuild_rtt  s    

z ProgramsTestCase.test_pcbuild_rt)r‡   rˆ   r‰   rŠ   rí   r—   ró   rô   rö   rù   rü   rÿ   r   r  r‹   rŒ   r    r¡   r  r  rä   rñ   r
  r  Ú__classcell__r   r   )rò   r   rç     s$   

rç   c               @   sð   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
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e ed¡dd„ ƒZdd „ Zd!d"„ Z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d5S )6ÚArgsTestCasez2
    Test arguments of the Python test suite.
    c             O   s"   ddd| j  f|•}| j|f|ŽS )Nz-mrø   z--testdir=%s)r•   ræ   )r   Ztestargsrá   Zcmdargsr   r   r   rô   ‡  s    zArgsTestCase.run_testsc             C   sN   t  d¡}|  d¡}| jd|d}||g}| j|ddiŽ}| j|||d d S )Nz¥
            import unittest

            class FailingTest(unittest.TestCase):
                def test_failing(self):
                    self.fail("bug")
        ÚokZfailing)r¤   rà   ri   )rË   )r›   rœ   r¦   rô   rÕ   )r   r¤   Ztest_okZtest_failingr¿   r¬   r   r   r   Útest_failing_test‹  s    
zArgsTestCase.test_failing_testc             C   s–   i }x*dD ]"}t  d| ¡}|  ||¡||< q
W t| ¡ ƒ}| jd|žŽ }|  ||¡ | jd	|žŽ }| j|||d d | j|Ž }| j|||d d S )
N)ÚaudiorP   a  
                        from test import support; support.requires(%r)
                        import unittest
                        class PassingTest(unittest.TestCase):
                            def test_pass(self):
                                pass
                    ú-uÚallú-uaudiorP   )rÊ   )r  r  )r  )r›   rœ   r¦   r¾   Úvaluesrô   rÕ   )r   r¿   Úresourcer¤   Z
test_namesr¬   r   r   r   Útest_resources›  s    


zArgsTestCase.test_resourcesc       	      C   s˜   t  d¡}|  d|¡}|  d|¡}|  |¡}|  d|¡}t| d¡ƒ}|  dd| |¡}|  |¡}|  ||¡ |  d|¡}t| d¡ƒ}|  ||¡ d S )Nza
            import random
            print("TESTRANDOM: %s" % random.randint(1, 1000))
        Úrandomz-rzTESTRANDOM: ([0-9]+)r%   z--randseed=%s)	r›   rœ   r¦   rô   rØ   r­   rÖ   r²   r   )	r   r¤   rø   r¬   r×   r@   Útest_randomZ	randseed2Ztest_random2r   r   r   r  ¸  s    

zArgsTestCase.test_randomc       	   	      s¤  ‡ fdd„t dƒD ƒ}tj}ˆ  tj|¡ t|dƒV}d }xJt|dƒD ]<\}}d||t|ƒ|f }|rr|d| 7 }t||d |}qFW W d Q R X ˆ  	d	|¡}ˆ  
||¡ t|dƒ8}x0t|dƒD ]"\}}td
|t|ƒ|f |d qÀW W d Q R X ˆ  	d	|¡}ˆ  
||¡ t|dƒ"}x|D ]}t||d qW W d Q R X ˆ  	d	|¡}ˆ  
||¡ t|dƒ&}x|D ]}td| |d qdW W d Q R X ˆ  	d	|¡}ˆ  
||¡ d S )Nc                s   g | ]}ˆ   ¡ ‘qS r   )r¦   )r³   rè   )r   r   r   ré   Ñ  s    z.ArgsTestCase.test_fromfile.<locals>.<listcomp>rb   r>   r%   z00:00:%02i [%s/%s] %sz -- %s took 0 sec)r?   z
--fromfilez
[%s/%s] %szLib/test/%s.py)rì   r   rD   rB   rC   rE   Ú	enumerater½   rF   rô   rÕ   )	r   r¿   rK   rJ   Zpreviousrè   r£   Úliner¬   r   )r   r   r8   Ï  s:    (

 zArgsTestCase.test_fromfilec             C   s6   t }| jd|d}| j|dd}| j|||dd d S )NÚsigint)r¤   é‚   )rà   T)rÍ   rÐ   )ÚTEST_INTERRUPTEDr¦   rô   rÕ   )r   r¤   rø   r¬   r   r   r   Útest_interruptedÿ  s
    
zArgsTestCase.test_interruptedc                sR   ‡ fdd„t dƒD ƒ}ˆ jd|žŽ }ˆ  ||¡ dˆ jt|ƒf }ˆ  ||¡ d S )Nc                s   g | ]}ˆ   ¡ ‘qS r   )r¦   )r³   rè   )r   r   r   ré     s    z-ArgsTestCase.test_slowest.<locals>.<listcomp>r&   ú	--slowestz#10 slowest tests:
(?:- %s: .*
){%s})r   )rì   rô   rÕ   rµ   r½   r±   )r   r¿   r¬   r«   r   )r   r   Útest_slowest  s    zArgsTestCase.test_slowestc             C   sn   t }| jd|d}xVdD ]N}|r,dd|f}nd|f}| j|ddiŽ}| j|||dd	 d
}|  ||¡ qW d S )Nr  )r¤   )FTz	--slowestz-j2rà   r  T)rÍ   rÐ   z10 slowest tests:
)r  r¦   rô   rÕ   r±   )r   r¤   rø   Úmultiprocessingr   r¬   r«   r   r   r   Útest_slow_interrupted  s    

z"ArgsTestCase.test_slow_interruptedc             C   s8   |   d¡}|  d|¡}|  ||g¡ d}|  ||¡ d S )NÚcoveragez
--coveragezLlines +cov% +module +\(path\)\n(?: *[0-9]+ *[0-9]{1,2}% *[^ ]+ +\([^)]+\)+)+)r¦   rô   rÕ   r±   )r   rø   r¬   r«   r   r   r   rn   !  s
    
zArgsTestCase.test_coveragec             C   s*   |   d¡}| jd|dd}|  |d¡ d S )Nr   z--waitÚkey)rÚ   zPress any key to continue)r¦   rô   r±   )r   rø   r¬   r   r   r   r    *  s    
zArgsTestCase.test_waitc             C   sB   t  d¡}| jd|d}| jd|dd}| j||gd |d d S )	NaL  
            import builtins
            import unittest

            class ForeverTester(unittest.TestCase):
                def test_run(self):
                    # Store the state in the builtins module, because the test
                    # module is reload at each run
                    if 'RUN' in builtins.__dict__:
                        builtins.__dict__['RUN'] += 1
                        if builtins.__dict__['RUN'] >= 3:
                            self.fail("fail at the 3rd runs")
                    else:
                        builtins.__dict__['RUN'] = 1
        r|   )r¤   z	--foreverri   )rà   r&   )rË   )r›   rœ   r¦   rô   rÕ   )r   r¤   rø   r¬   r   r   r   r}   0  s
    zArgsTestCase.test_foreverc       
   	   C   s¢   | j d|d}d}|  tj|¡ | jdd|dtjd}| j||g|d d	}|  |t	 
|¡¡ d
||f }|  ||¡ t|ƒ}| ¡ }	|  ||	¡ W d Q R X d S )Nrf   )r¤   z
reflog.txtz--huntrleaksz3:3:ri   )rà   rz   )rË   z&beginning 6 repetitions
123456
......
z%s leaked [1, 1, 1] %s, sum=3
)r¦   rB   r   rC   rô   rÜ   ÚSTDOUTrÕ   r±   r§   Úescaper
   rE   Úread)
r   r¤   Zwhatrø   rK   r¬   r  Úline2rJ   Zreflogr   r   r   Ú
check_leakE  s    


zArgsTestCase.check_leakzneed a debug buildc             C   s   t  d¡}|  |d¡ d S )NzÌ
            import unittest

            GLOBAL_LIST = []

            class RefLeakTest(unittest.TestCase):
                def test_leak(self):
                    GLOBAL_LIST.append(object())
        Ú
references)r›   rœ   r*  )r   r¤   r   r   r   rg   Y  s    zArgsTestCase.test_huntrleaksc             C   s   t  d¡}|  |d¡ d S )Na  
            import os
            import unittest

            class FDLeakTest(unittest.TestCase):
                def test_leak(self):
                    fd = os.open(__file__, os.O_RDONLY)
                    # bug: never close the file descriptor
        zfile descriptors)r›   rœ   r*  )r   r¤   r   r   r   Útest_huntrleaks_fd_leakg  s    z$ArgsTestCase.test_huntrleaks_fd_leakc                s<   ‡ fdd„t dƒD ƒ}ˆ jd|žŽ }ˆ  | ¡  ¡ |¡ d S )Nc                s   g | ]}ˆ   ¡ ‘qS r   )r¦   )r³   Úi)r   r   r   ré   w  s    z0ArgsTestCase.test_list_tests.<locals>.<listcomp>rb   ú--list-tests)r.  )rì   rô   r   ÚrstripÚ
splitlines)r   r¿   r¬   r   )r   r   Útest_list_testsu  s    zArgsTestCase.test_list_testsc             C   sp   t  d¡}| j|d}d| d| g}|  d|¡}|  | ¡ |¡ d| g}|  ddd|¡}|  | ¡ |¡ d S )NzÔ
            import unittest

            class Tests(unittest.TestCase):
                def test_method1(self):
                    pass
                def test_method2(self):
                    pass
        )r¤   z%s.Tests.test_method1z%s.Tests.test_method2z--list-casesz-mÚtest_method1)r›   rœ   r¦   rô   r   r0  )r   r¤   ÚtestnameÚall_methodsr¬   r   r   r   Útest_list_cases|  s    

zArgsTestCase.test_list_casesc             C   sP   d}| j d|d}| j dd}||g}| jd|žddiŽ}| j|||d	d
 d S )Nz,import faulthandler; faulthandler._sigsegv()Zcrash)r£   r¤   r  )r£   ú-j2rà   ri   T)rË   r3   )r6  )r¦   rô   rÕ   )r   r¤   Z
crash_testZok_testr¿   r¬   r   r   r   Útest_crashed–  s    
zArgsTestCase.test_crashedc             C   s$   t jdt jd}dd„ | |¡D ƒS )Nz^(test[^ ]+).*ok$)Úflagsc             S   s   g | ]}|  d ¡‘qS )r%   )r²   )r³   r@   r   r   r   ré   £  s    z.ArgsTestCase.parse_methods.<locals>.<listcomp>)r§   r¯   r©   r¶   )r   r¬   r«   r   r   r   Úparse_methods¡  s    zArgsTestCase.parse_methodsc       
   	   C   sÆ   t  d¡}ddddg}| j|d}|  d|¡}|  |¡}|  ||¡ tj}|  tj	|¡ dd| g}t
|d	ƒ }x|D ]}	t|	|d
 qvW W d Q R X |  dd||¡}|  |¡}ddg}|  ||¡ d S )NaV  
            import unittest

            class Tests(unittest.TestCase):
                def test_method1(self):
                    pass
                def test_method2(self):
                    pass
                def test_method3(self):
                    pass
                def test_method4(self):
                    pass
        r2  Ztest_method2Ztest_method3Ztest_method4)r¤   z-vz%s.Tests.test_method3r>   )r?   z--matchfile)r›   rœ   r¦   rô   r9  r   r   rD   rB   rC   rE   rF   )
r   r¤   r4  r3  r¬   ÚmethodsrK   ÚsubsetrJ   r£   r   r   r   Útest_matchfile¥  s&    



zArgsTestCase.test_matchfilec             C   sZ   t  d¡}| j|d}|  |¡}| j||g|d | jd|dd}| j||g|dd d S )	Nz³
            import unittest

            class Tests(unittest.TestCase):
                def test_env_changed(self):
                    open("env_changed", "w").close()
        )r¤   )rÌ   z--fail-env-changedr&   )rà   T)rÌ   rÑ   )r›   rœ   r¦   rô   rÕ   )r   r¤   r3  r¬   r   r   r   Útest_env_changedÎ  s    
zArgsTestCase.test_env_changedc             C   s>   t  d¡}| j|d}| jd|dd}| j||g||d d S )NzÂ
            import unittest

            class Tests(unittest.TestCase):
                def test_bug(self):
                    # test always fail
                    self.fail("bug")
        )r¤   z-wri   )rà   )rË   rÎ   )r›   rœ   r¦   rô   rÕ   )r   r¤   r3  r¬   r   r   r   Útest_rerun_failá  s    
zArgsTestCase.test_rerun_failc             C   s>   t  d¡}| j|d}| j|dddd}| j||g|d d S )Nz
            import unittest

            class Tests(unittest.TestCase):
                def test_bug(self):
                    pass
        )r¤   z-mÚ
nosuchtestr   )rà   )rÏ   )r›   rœ   r¦   rô   rÕ   )r   r¤   r3  r¬   r   r   r   Útest_no_tests_ranð  s
    zArgsTestCase.test_no_tests_ranc             C   s6   t  d¡}| j|d}| j|dd}|  ||g¡ d S )Nz§
            import unittest

            class Tests(unittest.TestCase):
                def test_skipped(self):
                    self.skipTest("because")
        )r¤   r   )rà   )r›   rœ   r¦   rô   rÕ   )r   r¤   r3  r¬   r   r   r   Útest_no_tests_ran_skipý  s
    z#ArgsTestCase.test_no_tests_ran_skipc             C   sR   t  d¡}| j|d}| j|d}| j||dddd}| j|||g||gd d S )Nz
            import unittest

            class Tests(unittest.TestCase):
                def test_bug(self):
                    pass
        )r¤   z-mr?  r   )rà   )rÏ   )r›   rœ   r¦   rô   rÕ   )r   r¤   r3  Ú	testname2r¬   r   r   r   Ú,test_no_tests_ran_multiple_tests_nonexistent
  s    z9ArgsTestCase.test_no_tests_ran_multiple_tests_nonexistentc          	   C   s^   t  d¡}| j|d}t  d¡}| j|d}| j||dddddd}| j|||g|gd	 d S )
Nz
            import unittest

            class Tests(unittest.TestCase):
                def test_bug(self):
                    pass
        )r¤   z•
            import unittest

            class Tests(unittest.TestCase):
                def test_other_bug(self):
                    pass
        z-mr?  Ztest_other_bugr   )rà   )rÏ   )r›   rœ   r¦   rô   rÕ   )r   r¤   r3  Z
other_coderB  r¬   r   r   r   Ú)test_no_test_ran_some_test_exist_some_not  s    z6ArgsTestCase.test_no_test_ran_some_test_exist_some_notN) r‡   rˆ   r‰   rŠ   rô   r  r  r  r8   r  r!  r#  rn   r    r}   r*  r‹   rŒ   r	  rg   r,  r1  r5  r7  r9  r<  r=  r>  r@  rA  rC  rD  r   r   r   r   r  ‚  s4   0
	)r  c               @   s   e Zd Zdd„ ZdS )Ú	TestUtilsc             C   s¸   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d	¡d
¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )Nr   z0 msg•Ö&è.>z1 msg{®Gáz„?z10 msg      ø?z1 sec 500 msr%   z1 secéx   z2 minéy   z2 min 1 seci0*  z3 houri©*  z3 hour 2 mini1*  z3 hour 1 sec)r   r   Úformat_duration)r   r   r   r   Útest_format_duration2  s(    zTestUtils.test_format_durationN)r‡   rˆ   r‰   rI  r   r   r   r   rE  1  s   rE  Ú__main__)&rŠ   ru   rŽ   rw   Úos.pathrG   rñ   r§   rÜ   rä   r    r“   r›   r‹   rø   r   r   Útest.libregrtestr   r   r	  rH   r\   r‘   r’   r  rI   Únormpathrœ   r  ÚTestCaser   r   rç   r  rE  r‡   Úmainr   r   r   r   Ú<module>   sB   
  2 Ak   2
