B
    2*™\"£  ã               @   s0  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r,e $¡  dS )é    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               @   sV  e 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d/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Z d7d8„ Z!d9d:„ Z"d;d<„ Z#d=d>„ Z$d?d@„ Z%dAdB„ Z&dCdD„ Z'dEdF„ Z(dGdH„ Z)dIdJ„ Z*dKdL„ Z+dMdN„ Z,dOdP„ Z-dQS )RÚParseArgsTestCasec          
   C   sH   t  ¡ &}|  t¡ t |¡ W d Q R X W d Q R X |  || ¡ ¡ d S )N)r   Zcaptured_stderrÚassertRaisesÚ
SystemExitr   Ú_parse_argsÚassertInÚgetvalue)ÚselfÚargsÚmsgÚerr© r   ú=C:\ALexclude\prg\programme\Python37\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   Z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   ÚassertEqualZ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   Z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   Z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   Z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   Z
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   Zrandom_seedr   r,   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   Z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   Z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   Z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   Z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,networkZguiÚnetworkzgui,none,networkzall,-guizexpected one argumentr   zinvalid resourcez
all,tzdataZtzdataZextralargefile)	r   r   r   r   Zuse_resourcesÚlistZALL_RESOURCESÚremover   )r   r   r   Z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   Z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   Útestdirr<   r=   Ú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   Z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:)é   rO   z
reflog.txtz:3)rN   r"   z
reflog.txtz6:3:leaks.log)rP   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   Z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   Z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   Úcoverdirr<   r=   rI   r   rJ   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   ZassertIsNonerY   )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   Z	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   Z	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#   r0   )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__r   r   ÚunittestÚ
skipUnlessÚhasattrÚfaulthandlerr   r   r   r    r$   r%   r&   r(   r)   r+   r-   r.   r/   r1   r2   rA   rB   rF   rG   rK   rL   rS   rW   rX   rZ   r[   r\   rb   rd   re   rf   rg   ri   rj   rk   rl   rm   r   r   r   r   r   '   sP   		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)r<   r=   ÚrealpathÚdirnameÚ__file__rH   ÚtempfileZmkdtempÚ
tmptestdirr7   r   Z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)ru   ÚTEST_UNIQUE_IDÚtextwrapÚdedentÚTESTNAME_PREFIXr<   r=   rI   rz   r7   r   r8   r:   ÚwriteÚPermissionErrorÚ	sysconfigÚis_python_buildÚskipTest)r   ÚnameÚcoder=   r?   Ú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Úoutputr6   r   r   r   Úregex_search€  s    zBaseTestCase.regex_searchc             C   s"   t  d| t j¡}|  ||¡ d S )Nú^)r‹   Úcompiler   Z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)Ú.0r6   r   r   r   ú	<genexpr>Ž  s    z4BaseTestCase.parse_executed_tests.<locals>.<genexpr>)ÚTESTNAME_REGEXr‹   Úfinditerr   rD   )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!   Úsrh   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$)ÚlenrI   Ú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 CHANGEDZINTERRUPTEDzNO TEST RUNÚSUCCESSz, zTests result: %szFAILURE then %s)
Ú
isinstanceÚstrr›   r   Úsetr”   r    ÚappendÚanyrI   )r   r   r¢   ÚskippedÚfailedÚenv_changedÚomittedÚrerunÚno_test_ranr,   ÚinterruptedÚfail_env_changedZexecutedr¤   r   r‡   Z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   r6   Ú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 )Nrh   ra   T)Zuniversal_newlinesÚinputÚstdoutz8Command %s failed with exit code %s

stdout:
---
%s
---
z
stderr:
---
%s---
)Ú
subprocessÚPIPEÚrunÚ
returncoder¨   rº   ra   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-Xrt   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   )rn   ro   rp   r~   r   r˜   r{   rŠ   r‘   r”   r›   rµ   r¸   rÂ   rÅ   r   r   r   r   ru   W  s    
    
[
ru   c                   sÄ   e 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 ) ÚProgramsTestCaserO   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_argsrz   Úregrtest_argsrs   rt   ÚextendrÃ   Úplatformrª   )r   )Ú	__class__)r   r   r{     s    


zProgramsTestCase.setUpc             C   s    |   |¡ | j|| jdd d S )NT)r,   )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)r<   r=   rI   rH   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)r<   r=   rI   rH   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ÚToolsZscriptszrun_tests.py)r<   r=   rI   Ú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)r<   r=   rI   râ   rz   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)r<   r=   rI   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)rn   ro   rp   rÌ   r{   rÒ   rÓ   rÕ   rØ   rÛ   rÞ   rß   rà   rq   rr   r„   r…   rã   rä   rÃ   rÐ   rè   rê   Ú__classcell__r   r   )rÑ   r   rÆ     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	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.d/„ Zd0d1„ Zd2d3„ Zd4S )5ÚArgsTestCasec             O   s"   ddd| j  f|•}| j|f|ŽS )Nz-mr×   z--testdir=%s)rz   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¿   rU   )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)ZaudiorC   a  
                        from test import support; support.requires(%r)
                        import unittest
                        class PassingTest(unittest.TestCase):
                            def test_pass(self):
                                pass
                    ú-uÚallú-uaudiorC   )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))
        Zrandomz-rzTESTRANDOM: ([0-9]+)r!   z--randseed=%s)	r   r€   rŠ   rÓ   r¸   r‘   r¶   r•   r   )	r   rˆ   r×   r   r·   r6   Ú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>rN   r4   r!   z00:00:%02i [%s/%s] %sz -- %s took 0 sec)r5   z
--fromfilez
[%s/%s] %szLib/test/%s.py)rË   r   r9   r7   r8   r:   Ú	enumerater    r;   rÓ   rµ   )	r   r¢   r@   r?   ZpreviousrÇ   r‡   Úliner   r   )r   r   r/   Ï  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×   Zmultiprocessingr   r   r   r   r   r   Útest_slow_interrupted  s    

z"ArgsTestCase.test_slow_interruptedc             C   s8   |   d¡}|  d|¡}|  ||g¡ d}|  ||¡ d S )NZcoveragez
--coveragezLlines +cov% +module +\(path\)\n(?: *[0-9]+ *[0-9]{1,2}% *[^ ]+ +\([^)]+\)+)+)rŠ   rÓ   rµ   r”   )r   r×   r   r   r   r   r   rX   !  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
        rc   )rˆ   z	--foreverrU   )r¿   r"   )r­   )r   r€   rŠ   rÓ   rµ   )r   rˆ   r×   r   r   r   r   rd   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 )NrR   )rˆ   z
reflog.txtz--huntrleaksz3:3:rU   )r¿   ra   )r­   z&beginning 6 repetitions
123456
......
z%s leaked [1, 1, 1] %s, sum=3
)rŠ   r7   r   r8   rÓ   r»   ZSTDOUTrµ   r”   r‹   Úescaper	   r:   Úread)
r   rˆ   Zwhatr×   r@   r   r÷   Zline2r?   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())
        Z
references)r   r€   r  )r   rˆ   r   r   r   rS   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>rN   ú--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   r  )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¿   rU   T)r­   r,   )r  )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–   r6   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
        r	  Ztest_method2Ztest_method3Ztest_method4)rˆ   z-vz%s.Tests.test_method3r4   )r5   z--matchfile)r   r€   rŠ   rÓ   r  r   r   r9   r7   r8   r:   r;   )
r   rˆ   r  r
  r   Úmethodsr@   Zsubsetr?   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ˆ   r
  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-wrU   )r¿   )r­   r°   )r   r€   rŠ   rÓ   rµ   )r   rˆ   r
  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ˆ   r
  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ˆ   r
  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ˆ   r
  Ú	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ˆ   r
  Z
other_coder  r   r   r   r   Ú)test_no_test_ran_some_test_exist_some_not  s    z6ArgsTestCase.test_no_test_ran_some_test_exist_some_notN)rn   ro   rp   rÓ   rî   rô   rõ   r/   rû   rý   rþ   rX   r   rd   r  rq   rr   rç   rS   r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rì   ‚  s2   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   Zformat_duration)r   r   r   r   Útest_format_duration2  s(    zTestUtils.test_format_durationN)rn   ro   rp   r  r   r   r   r   r  1  s   r  Ú__main__)%r]   rt   r_   Zos.pathr<   rÐ   r‹   r»   rÃ   r„   ry   r   rq   r×   r   r   Ztest.libregrtestr   rs   rç   r=   rI   rw   rx   râ   r>   Únormpathr€   rú   ZTestCaser   ru   rÆ   rì   r  rn   Úmainr   r   r   r   Ú<module>   s@   
  2 Ak   2
