o
    HXh                     @   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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 d dlmZmZ eedZejejeddZejejeZd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$Z'G dd dej"Z(e)dkre*  dS dS )    N)libregrtest)support)	os_helper)utilssetupZgettotalrefcountz..z5[0-9]+:[0-9]+:[0-9]+ (?:load avg: [0-9]+\.[0-9]{2} )?z
    from signal import SIGINT, raise_signal
    try:
        raise_signal(SIGINT)
    except ImportError:
        import os
        os.kill(os.getpid(), SIGINT)
    c                   @   sN  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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   sp   t  "}| t t| W d    n1 sw   Y  W d    n1 s)w   Y  | ||  d S N)r   Zcaptured_stderrassertRaises
SystemExitr   _parse_argsassertIngetvalue)selfargsmsgerr r   </opt/python-3.10.19/usr/lib/python3.10/test/test_regrtest.py
checkError.   s    zParseArgsTestCase.checkErrorc                 C   s   dD ]O}| j |d? t #}| t t|g W d    n1 s&w   Y  W d    n1 s5w   Y  | d|  W d    n1 sLw   Y  q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_help3   s   
 zParseArgsTestCase.test_helpc                 C   s>   t ddg}| |jd | dgd | ddgd d S )N	--timeoutz4.2g@expected one argumentfoozinvalid float value)r   r   assertEqualtimeoutr   r   nsr   r   r   test_timeout;   s   zParseArgsTestCase.test_timeoutc                 C   s   t dg}| |j d S )N--wait)r   r   
assertTruewaitr   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[[], {}]r   )r   r   r   Zworker_argsr   r   r   r   r   test_worker_argsE   s   z"ParseArgsTestCase.test_worker_argsc              	   C   d   dD ]-}| j |d t|dg}| |jd | |gd W d    n1 s*w   Y  qd S )N)z-S--startr   r   r   )r   r   r   r   startr   r   r   r    r   r   r   
test_startJ      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 )N-v   z-vvv   	--verboser   )r   r   r   verboser   r   r   r   test_verboseQ   s   
zParseArgsTestCase.test_verbosec              	   C   R   dD ]$}| j |d t|g}| |j W d    n1 s!w   Y  qd S )N)-wz
--verbose2r   )r   r   r   r#   Zverbose2r*   r   r   r   test_verbose2]      zParseArgsTestCase.test_verbose2c              	   C   r3   )N)-Wz
--verbose3r   )r   r   r   r#   Zverbose3r*   r   r   r   test_verbose3c   r6   zParseArgsTestCase.test_verbose3c              	   C   s`   dD ]+}| j |d t|g}| |j | |jd W d    n1 s(w   Y  qd S )N)-q--quietr   r   )r   r   r   r#   quietr   r1   r*   r   r   r   
test_quieti   s   zParseArgsTestCase.test_quietc              	   C   r3   )N)z-o	--slowestr   )r   r   r   r#   Z
print_slowr*   r   r   r   test_slowestp   r6   zParseArgsTestCase.test_slowestc                 C   s4   t dg}| |j t dg}| |j d S )Nz--headerr0   )r   r   r#   headerr   r   r   r   test_headerv   s   zParseArgsTestCase.test_headerc              	   C   r3   )N)-rz--randomizer   )r   r   r   r#   	randomizer*   r   r   r   test_randomize}   r6   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  r   r   invalid int value)r   r   r   Zrandom_seedr#   rB   r   r   r   r   r   test_randseed   s
   zParseArgsTestCase.test_randseedc              	   C   sv   dD ]6}| j |d& t|dg}| |jd | |gd | |ddgd W d    n1 s3w   Y  qd S )N)-f
--fromfiler   r   r   -sdon't go together)r   r   r   r   fromfiler   r*   r   r   r   test_fromfile   s   zParseArgsTestCase.test_fromfilec              	   C   r3   )N)z-x	--excluder   )r   r   r   r#   excluder*   r   r   r   test_exclude   r6   zParseArgsTestCase.test_excludec              	   C   sd   dD ]-}| j |d t|g}| |j | |ddgd W d    n1 s*w   Y  qd S )N)rH   z--singler   rF   r   rI   )r   r   r   r#   Zsingler   r*   r   r   r   test_single   s   zParseArgsTestCase.test_singlec              	   C   s   dD ].}| j |d t|dg}| |jdg | |gd W d    n1 s+w   Y  q| tjtj	 t
tj	d}td|d td|d W d    n1 sVw   Y  tjtj	}td	d
d|g}| |jddg d S )N)z-iz--ignorer   patternr   w
matchfile1file
matchfile2-mmatch--ignorefile)r   r   r   r   Zignore_testsr   
addCleanupr   unlinkTESTFNopenprintospathabspathr   r   r    fpfilenamer   r   r   test_ignore   s&   zParseArgsTestCase.test_ignorec              	   C   s  dD ].}| j |d t|dg}| |jdg | |gd W d    n1 s+w   Y  qtg d}| |jddg | tjtj	 t
tj	d}td	|d
 td|d
 W d    n1 sfw   Y  tjtj	}tddd|g}| |jg d d S )N)rV   z--matchr   rP   r   )rV   pattern1rV   pattern2re   rf   rQ   rR   rS   rU   rV   rW   --matchfile)rW   rR   rU   )r   r   r   r   Zmatch_testsr   rY   r   rZ   r[   r\   r]   r^   r_   r`   ra   r   r   r   
test_match   s*   zParseArgsTestCase.test_matchc              	   C   s|   dD ]9}| j |d) t|dg}| |j t|dg}| |j | |gd W d    n1 s6w   Y  qd S )N)z-Gz
--failfastr   r-   r7   z#-G/--failfast needs either -v or -W)r   r   r   r#   Zfailfastr   r*   r   r   r   test_failfast   s   zParseArgsTestCase.test_failfastc              	   C   s  dD ]}| j |dq 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    n1 s~w   Y  qd S )N)-uz--user   zgui,networkZguinetworkzgui,none,networkzall,-guir   r   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   r'   )N)z-Mz
--memlimitr   Z4Gr   )r   r   r   r   memlimitr   r*   r   r   r   test_memlimit   r,   zParseArgsTestCase.test_memlimitc                 C   s:   t ddg}| |jtjtjd | 	dgd d S )Nz	--testdirr   r   )
r   r   r   testdirr^   r_   joinr   SAVEDCWDr   r   r   r   r   test_testdir   s   zParseArgsTestCase.test_testdirc              	   C   r3   )N)z-Lz
--runleaksr   )r   r   r   r#   Zrunleaksr*   r   r   r   test_runleaks   r6   zParseArgsTestCase.test_runleaksc              	   C   s   dD ]o}| 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    n1 slw   Y  qd S )N)z-R--huntrleaksr   :)      
reflog.txtz6:)   ry   rz   z:3)rx   r/   rz   z6:3:leaks.log)r{   r/   z	leaks.logr   6z&needs 2 or 3 colon-separated argumentszfoo:zinvalid huntrleaks valuez6:foo)r   r   r   r   
huntrleaksr   r*   r   r   r   test_huntrleaks   s&   
z!ParseArgsTestCase.test_huntrleaksc              	   C   s   dD ]G}| j |d7 t|dg}| |jd | |gd | |dgd | |ddgd	 | |d
dgd	 W d    n1 sDw   Y  qd S )N)z-jz--multiprocessr   2   r   r   rD   -TrI   0)r   r   r   r   Zuse_mpr   r*   r   r   r   test_multiprocess  s   z#ParseArgsTestCase.test_multiprocessc              	   C   r3   )N)r   
--coverager   )r   r   r   r#   Ztracer*   r   r   r   test_coverage  r6   zParseArgsTestCase.test_coveragec              	   C   sp   dD ]3}| j |d# t|dg}| |jtjtj	d | 
|gd W d    n1 s0w   Y  qd S )N)z-Dz
--coverdirr   r   r   )r   r   r   r   coverdirr^   r_   rr   r   rs   r   r*   r   r   r   test_coverdir  s   zParseArgsTestCase.test_coverdirc              	   C   r3   )N)z-Nz--nocoverdirr   )r   r   r   ZassertIsNoner   r*   r   r   r   test_nocoverdir$  r6   z!ParseArgsTestCase.test_nocoverdirc              	   C   st   dD ]5}| j |d% t|dg}| |jd | |gd | |dgd W d    n1 s2w   Y  qd S )N)z-tz--thresholdr   Z1000i  r   r   rD   )r   r   r   r   Z	thresholdr   r*   r   r   r   test_threshold*  s   z ParseArgsTestCase.test_thresholdc              
   C   s   dD ]E}| j |d5 tt }t|g}W d    n1 s#w   Y  | |j |	 }| 
d| W d    n1 sBw   Y  qd S )N)-nz--nowindowsr   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_nowindows2  s   z ParseArgsTestCase.test_nowindowsc              	   C   r3   )N)z-F	--foreverr   )r   r   r   r#   foreverr*   r   r   r   test_forever;  r6   zParseArgsTestCase.test_foreverc                 C      |  dgd d S )Nz--xxxzusage:r   r   r   r   r   test_unrecognized_argumentA  s   z,ParseArgsTestCase.test_unrecognized_argumentc                 C   s*   t dg}| |j | |jd d S )Nz--quir   )r   r   r#   r;   r   r1   r   r   r   r   test_long_option__partialD  s   z+ParseArgsTestCase.test_long_option__partialc                 C   s8   t ddg}| |j | |jd | |j d S )Nr:   rL   r   )r   r   r#   r;   r   r1   rM   r   r   r   r   test_two_optionsI  s   z"ParseArgsTestCase.test_two_optionsc                 C   s    t ddg}| |jd d S )Nr(    )r   r   r   r)   r   r   r   r   #test_option_with_empty_string_valueO  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   test_argS  s   zParseArgsTestCase.test_argc                 C   s<   t ddg}| |j | |jd | |jdg d S )Nr:   r   r   )r   r   r#   r;   r   r1   r   r   r   r   r   test_option_and_argW  s   z%ParseArgsTestCase.test_option_and_argc                 C   s2   t g d}| |jd | |jddg d S )N)test_unaryopr-   
test_binopr.   r   r   )r   r   r   r1   r   r   r   r   r   test_arg_option_arg]  s   z%ParseArgsTestCase.test_arg_option_argc                 C   r   )Nz--unknown-optionz(unrecognized arguments: --unknown-optionr   r   r   r   r   test_unknown_optionb  s   z%ParseArgsTestCase.test_unknown_optionN)+__name__
__module____qualname__r   r   r!   r%   r&   r+   r2   r5   r8   r<   r>   r@   rC   rE   rK   rN   rO   rd   rh   ri   rn   rp   rt   ru   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )   sT    	
	r   c                	   @   sx   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di ddddf	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 r   )r^   r_   realpathdirname__file__rq   tempfilemkdtemp
tmptestdirrY   r   rmtreer   r   r   r   setUpl  s   
zBaseTestCase.setUpNc              
   C   s   |sdt j }t  jd7  _|d u rtd}| j| }tj| j|d }| 	t
j| z!t|ddd}|| W d    W |S 1 sGw   Y  W |S  tyh } zt sc| d||f   d }~ww )	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_PREFIXr^   r_   rr   r   rY   r   rZ   r\   writePermissionError	sysconfigis_python_buildskipTest)r   namecoder_   rb   excr   r   r   create_testr  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outputrW   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   s0   dt | jf }t||tj}tdd |D S )Nz"^%s\[ *[0-9]+(?:/ *[0-9]+)*\] (%s)c                 s   s    | ]}| d V  qdS )r.   Ngroup.0rW   r   r   r   	<genexpr>  s    z4BaseTestCase.parse_executed_tests.<locals>.<genexpr>)
LOG_PREFIXTESTNAME_REGEXr   finditerr   rl   )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r|g}t |tr |g}t |tr(|g}t |tr0|g}| |}|	rC| t|t|| n| ||| dd   fdd}|ra|d|}| || |rn|d|}| || |r{|d|}| || |r|d|}| || |r|d	| }| || td
 }| || | D ]\}}td| d| d }| || q|r|d|}| || t	|t	| t	| t	| t	| t	| }|rd| |f }|s|s|dkrd| }| || |
r| |d g }|r|
d n|r|r|
d |
r#|
d t||||
|||fs5|
d n|s=|
d d|}|rO| |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$)lenrr   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 z in verbose mode \(matching: z\)z%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SUCCESS, zTests result: FAILUREzFAILURE then %szTests result: %s)
isinstancestrr   r   setr   keysr   itemsr   appendanyrr   )r   r   r   skippedfailedenv_changedomittedrerunno_test_ranrB   interruptedfail_env_changedZexecutedr   r   r   rW   Zgoodresultr   r   r   check_executed_tests  s   














z!BaseTestCase.check_executed_testsc                 C   s>   |  d|}t|d}| d|  kodkn  | |S )NzUsing random seed ([0-9]+)r.   r   i )r   intr   r#   )r   r   rW   randseedr   r   r   parse_random_seed  s    zBaseTestCase.parse_random_seedr   c                 K   sx   |sd}d|vrt j|d< t j|fd|t jd|}|j|kr:dt||j|jf }|jr5|d|j 7 }| | |S )Nr   r   T)universal_newlinesinputstdoutz8Command %s failed with exit code %s

stdout:
---
%s
---
z
stderr:
---
%s---
)	
subprocessSTDOUTrunPIPE
returncoder   r   r   r   )r   r   r   exitcodekwprocr   r   r   r   run_command  s*   


zBaseTestCase.run_commandc                 K   s*   t jdddg|}| j|fi |}|jS )Nz-Xfaulthandlerz-I)sys
executabler   r   )r   r   r   r   r   r   r   
run_python   s   zBaseTestCase.run_python)NN)Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   g  s$    

^
r   c                   @      e Zd Zdd ZdS )CheckActualTestsc                 C   sv   	 g d}|  |}t| }tjttjt	d}tt|}| j
||d d dd|  d d S )N)-Wd-E-bbrV   test.regrtest--list-testsztest*.py	   
   z+Unexpectedly low number of tests found in:
r   )r   )r  r   
splitlinesr^   r_   rr   globescaper   r   ZassertGreater)r   r   r   Zrough_number_of_tests_foundZactual_testsuite_globZrough_counted_test_py_filesr   r   r   #test_finds_expected_number_of_tests'  s   


z4CheckActualTests.test_finds_expected_number_of_testsN)r   r   r   r  r   r   r   r   r  &      r  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 ) ProgramsTestCasery   c                    sj   t     fddt jD  _g d _ddd j g _ jd t	j
dkr3 jd	 d S d S )
Nc                       g | ]}   qS r   r   r   indexr   r   r   
<listcomp>J      z*ProgramsTestCase.setUp.<locals>.<listcomp>)r  r  r  z-uallz-rwW--testdir=%s)r   Z3600z-j4win32r   )superr   rangeNTESTr   python_argsr   regrtest_argsextendr  platformr   r   	__class__r   r   r   F  s   


zProgramsTestCase.setUpc                 C   s    |  | | j|| jdd d S )NT)rB   )r   r   r   )r   r   r   r   r   check_outputS  s   
zProgramsTestCase.check_outputc                 C   s   |  |}| | d S r   )r  r$  )r   r   r   r   r   r   	run_testsW  s   
zProgramsTestCase.run_testsc                 C   8   t j| jd}g | j|| j| j}| | d S )Nzregrtest.pyr^   r_   rr   rq   r  r  r   r%  r   scriptr   r   r   r   test_script_regrtest[  s   z%ProgramsTestCase.test_script_regrtestc                 C   ,   g | j dd| j| j}| | d S )NrV   testr  r  r   r%  r   r   r   r   r   test_module_testb     z!ProgramsTestCase.test_module_testc                 C   r+  )NrV   r	  r-  r.  r   r   r   test_module_regrtesth  r0  z%ProgramsTestCase.test_module_regrtestc                 C   r+  )NrV   ztest.autotestr-  r.  r   r   r   test_module_autotestn  r0  z%ProgramsTestCase.test_module_autotestc                 C   s0   d}g | j d|| j| j}| | d S )Nzfrom test import autotestz-cr-  )r   r   r   r   r   r   test_module_from_test_autotestt  s   z/ProgramsTestCase.test_module_from_test_autotestc                 C   r&  )Nzautotest.pyr'  r(  r   r   r   test_script_autotest{  s   z%ProgramsTestCase.test_script_autotestz$run_tests.py script is not installedc                 C   s2   t jtddd}|g| j| j}| | d S )NToolsZscriptszrun_tests.py)r^   r_   rr   ROOT_DIRr  r   r%  r(  r   r   r   test_tools_script_run_tests  s   z,ProgramsTestCase.test_tools_script_run_testsc                 G   s   |  |}| |j d S r   )r   r$  r   )r   r   r   r   r   r   	run_batch  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kr|d nt dkr'|d nt d	 d
kr4|d t	s;|d | j
|g|| jR   d S )Nr5  Zbuildbotztest.batr  ARM64-arm64ARM-arm32r   64bit-x64z+d)r^   r_   rr   r6  r   r!  machiner   architecturePy_DEBUGr8  r   )r   r)  Z	test_argsr   r   r   test_tools_buildbot_test  s   

z)ProgramsTestCase.test_tools_buildbot_testc                 C   s   t jtd}t j|s| d| d dg}t dkr%|d nt dkr1|d nt	 d	 d
kr>|d t
rE|d | j|g|| j| jR   d S )NzPCbuild\rt.batzFile "z" does not existr9   r9  r:  r;  r<  r   r=  r>  z-d)r^   r_   rr   r6  isfiler   r!  r?  r   r@  rA  r8  r  r   )r   r)  Zrt_argsr   r   r   test_pcbuild_rt  s   

"z ProgramsTestCase.test_pcbuild_rt)r   r   r   r  r   r$  r%  r*  r/  r1  r2  r3  r4  unittest
skipUnlessr   r   r7  r8  r  r!  rB  rD  __classcell__r   r   r"  r   r  >  s0    


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ej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"ejd8d9 Z#d:d; Z$d<d= Z%d>d? Z&d@dA Z'dBdC Z(dDS )EArgsTestCasec                 O   s&   ddd| j  g|}| j|fi |S )NrV   r,  r  )r   r  )r   Ztestargsr   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   r   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 }dD ]}t d| }| ||||< qt| }| jddg|R  }| || | jdg|R  }| j|||d d | j| }| j|||d d S )N)Zaudiork   a  
                        from test import support; support.requires(%r)
                        import unittest
                        class PassingTest(unittest.TestCase):
                            def test_pass(self):
                                pass
                    rj   allz-uaudiork   )r   )r   r   r   r   valuesr%  r   )r   r   Z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))
        randomrA   zTESTRANDOM: ([0-9]+)r.   z--randseed=%s)	r   r   r   r%  r   r   r   r   r   )	r   r   r,  r   r   rW   test_randomZ	randseed2Ztest_random2r   r   r   rS    s   


zArgsTestCase.test_randomc           	         s   fddt dD }tj} tj| t|d.}d }t|dD ]\}}d||t||f }|r8|d| 7 }t||d |}q"W d    n1 sKw   Y   	d	|} 
|| t|d}t|dD ]\}}td
|t||f |d qgW d    n1 sw   Y   	d	|} 
|| t|d}|D ]}t||d qW d    n1 sw   Y   	d	|} 
|| t|d}|D ]
}td| |d qW d    n1 sw   Y   	d	|} 
|| d S )Nc                    r  r   r  r  r   r   r   r    r  z.ArgsTestCase.test_fromfile.<locals>.<listcomp>rx   rQ   r.   z00:00:%02i [%s/%s] %sz -- %s took 0 secrS   rG   z
[%s/%s] %szLib/test/%s.py)r  r   r[   rY   rZ   r\   	enumerater   r]   r%  r   )	r   r   rc   rb   Zpreviousr  r   liner   r   r   r   rK     sL   
zArgsTestCase.test_fromfilec                 C   s6   t }| jd|d}| j|dd}| j|||dd d S )NsigintrK     r   Tr   r   )TEST_INTERRUPTEDr   r%  r   r   r   r,  r   r   r   r   test_interrupted-  s   

zArgsTestCase.test_interruptedc                    sV    fddt dD } jdg|R  } || d jt|f } || d S )Nc                    r  r   r  r  r   r   r   r  6  r  z-ArgsTestCase.test_slowest.<locals>.<listcomp>r/   r=   z#10 slowest tests:
(?:- %s: .*
){%s})r  r%  r   r   r   r   )r   r   r   r   r   r   r   r>   4  s   zArgsTestCase.test_slowestc              	   C   s   t }| jd|d}dD ]=}| j|d- |rdd|f}nd|f}| j|ddi}| j|||d	d
 d}| || W d    n1 sCw   Y  qd S )NrV  rK  )FT)multiprocessingr=   -j2r   rW  TrY  z10 slowest tests:
)rZ  r   r   r%  r   r   )r   r   r,  r]  r   r   r   r   r   r   test_slowest_interrupted>  s    z%ArgsTestCase.test_slowest_interruptedc                 C   s8   |  d}| d|}| ||g d}| || d S )NZcoverager   zLlines +cov% +module +\(path\)\n(?: *[0-9]+ *[0-9]{1,2}% *[^ ]+ +\([^)]+\)+)+)r   r%  r   r   )r   r,  r   r   r   r   r   r   P  s
   
zArgsTestCase.test_coveragec                 C   s*   |  d}| jd|dd}| |d d S )Nr$   r"   key)r   zPress any key to continue)r   r%  r   )r   r,  r   r   r   r   r%   Y  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   rK  r   r   rX  r/   rL  rM  r[  r   r   r   r   _  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    d S 1 sUw   Y  d S )Nr}   rK  rz   rv   z3:3:r   )r   r   rL  z&beginning 6 repetitions
123456
......
z%s leaked [1, 1, 1] %s, sum=3
)r   rY   r   rZ   r%  r   r   r   r   r   r  r   r\   read)
r   r   Zwhatr,  rc   r   rU  Zline2rb   Zreflogr   r   r   
check_leakt  s    

"zArgsTestCase.check_leakzneed a debug buildc                 C      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   rb  r   r   r   r   r   r~        
	zArgsTestCase.test_huntrleaksc                 C   rc  )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 descriptorsrd  re  r   r   r   test_huntrleaks_fd_leak  rf  z$ArgsTestCase.test_huntrleaks_fd_leakc                    s@    fddt dD } jdg|R  } |  | d S )Nc                    r  r   r  )r   ir   r   r   r    r  z0ArgsTestCase.test_list_tests.<locals>.<listcomp>rx   r
  )r  r%  r   rstripr  )r   r   r   r   r   r   test_list_tests  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
        rK  z%s.Tests.test_method1z%s.Tests.test_method2z--list-casesrV   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   sF   d}| j d|d}|g}| jdg|R ddi}| j|||dd d S )	Nz,import faulthandler; faulthandler._sigsegv()Zcrash)r   r   r^  r   r   T)r   rB   )r   r%  r   )r   r   Z
crash_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    s    z.ArgsTestCase.parse_methods.<locals>.<listcomp>)r   r   r   r   r   r   r   r   parse_methods  s   zArgsTestCase.parse_methodsc           
      C   s   t d}g d}| j|d}tj}| tj| dd| g}t|d}|D ]}t||d q'W d    n1 s:w   Y  | 	dd	||}| 
|}	d
dg}| |	| d S )NV  
            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
        rk  test_method2test_method3test_method4rK  rk  %s.Tests.test_method3rQ   rS   r-   rX   rt  rv  )r   r   r   r   r[   rY   rZ   r\   r]   r%  rq  r   )
r   r   rm  rl  rc   subsetrb   r   r   methodsr   r   r   test_ignorefile  s"   

zArgsTestCase.test_ignorefilec           
      C   s   t d}g d}| j|d}| d|}| |}| || tj}| tj	| dd| g}t
|d}|D ]}	t|	|d q8W d    n1 sKw   Y  | dd	||}| |}dd
g}| || d S )Nrr  rs  rK  r-   rk  rw  rQ   rS   rg   ru  )r   r   r   r%  rq  r   r   r[   rY   rZ   r\   r]   )
r   r   rm  rl  r   ry  rc   rx  rb   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()
        rK  )r   --fail-env-changedr/   rX  Tr   r   rM  r   r   rl  r   r   r   r   test_env_changed!  s   


zArgsTestCase.test_env_changedc                 C   sB   t d}| j|d}| jd|dd}| j||g||did d S )Na  
            import unittest

            class Tests(unittest.TestCase):
                def test_succeed(self):
                    return

                def test_fail_always(self):
                    # test that always fails
                    self.fail("bug")
        rK  r4   r   rX  Ztest_fail_always)r   r   rM  r~  r   r   r   test_rerun_fail4  s   


zArgsTestCase.test_rerun_failc                 C   s@   t d}| j|d}| jd|dd}| j||g|did d S )Nax  
            import builtins
            import unittest

            class Tests(unittest.TestCase):
                def test_succeed(self):
                    return

                def test_fail_once(self):
                    if not hasattr(builtins, '_test_failed'):
                        builtins._test_failed = True
                        self.fail("bug")
        rK  r4   r   rX  Ztest_fail_once)r   rM  r~  r   r   r   test_rerun_successG  s   


zArgsTestCase.test_rerun_successc                 C   s>   t d}| j|d}| j|dddd}| j||g|d d S N
            import unittest

            class Tests(unittest.TestCase):
                def test_bug(self):
                    pass
        rK  rV   
nosuchtestr   rX  r   rM  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")
        rK  r   rX  rM  r~  r   r   r   test_no_tests_ran_skipi  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 r  rM  )r   r   rl  	testname2r   r   r   r   ,test_no_tests_ran_multiple_tests_nonexistentv  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 )
Nr  rK  z
            import unittest

            class Tests(unittest.TestCase):
                def test_other_bug(self):
                    pass
        rV   r  Ztest_other_bugr   rX  r  rM  )r   r   rl  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_notc                 C   sf   t d}| j|d}| jd|dd}| j||g|gdd | jd|dd}| j||g|gdd d S )	Na  
            import _testcapi
            import gc
            import unittest

            @_testcapi.with_tp_del
            class Garbage:
                def __tp_del__(self):
                    pass

            class Tests(unittest.TestCase):
                def test_garbage(self):
                    # create an uncollectable object
                    obj = Garbage()
                    obj.ref_cycle = obj
                    obj = None
        rK  r|  r/   rX  Tr}  z--findleaksrM  r~  r   r   r   test_findleaks  s   



zArgsTestCase.test_findleaksc                 C   sX   t d}| j|d}| jdd|dd}| j||g|d | |td| tj d S )	Naa  
            import time
            import unittest
            try:
                import faulthandler
            except ImportError:
                faulthandler = None

            class Tests(unittest.TestCase):
                # test hangs and so should be stopped by the timeout
                def test_sleep(self):
                    # we want to test regrtest multiprocessing timeout,
                    # not faulthandler timeout
                    if faulthandler is not None:
                        faulthandler.cancel_dump_traceback_later()

                    time.sleep(60 * 5)
        rK  r^  z--timeout=1.0r   rX  rL  z%s timed out)	r   r   r   r%  r   r   r   r   r   r~  r   r   r   test_multiprocessing_timeout  s   

z)ArgsTestCase.test_multiprocessing_timeoutc                 C   Z   t d}| j|d}| jdd|dd}| j||g|gdd | d	| | d
| d S )Na  
            import unittest
            import weakref
            from test.support import captured_stderr

            class MyObject:
                pass

            def weakref_callback(obj):
                raise Exception("weakref callback bug")

            class Tests(unittest.TestCase):
                def test_unraisable_exc(self):
                    obj = MyObject()
                    ref = weakref.ref(obj, weakref_callback)
                    with captured_stderr() as stderr:
                        # call weakref_callback() which logs
                        # an unraisable exception
                        obj = None
                    self.assertEqual(stderr.getvalue(), '')
        rK  r|  r-   r/   rX  Tr}  zWarning -- Unraisable exceptionzException: weakref callback bugr   r   r   r%  r   r   r~  r   r   r   test_unraisable_exc  s   

z ArgsTestCase.test_unraisable_excc                 C   r  )Na[  
            import threading
            import unittest
            from test.support import captured_stderr

            class MyObject:
                pass

            def func_bug():
                raise Exception("bug in thread")

            class Tests(unittest.TestCase):
                def test_threading_excepthook(self):
                    with captured_stderr() as stderr:
                        thread = threading.Thread(target=func_bug)
                        thread.start()
                        thread.join()
                    self.assertEqual(stderr.getvalue(), '')
        rK  r|  r-   r/   rX  Tr}  z$Warning -- Uncaught thread exceptionzException: bug in threadr  r~  r   r   r   test_threading_excepthook  s   

z&ArgsTestCase.test_threading_excepthookc                 C   s<   t jtj}| |tj d | r| d d S d S )Nz not setzModified guard)r^   environgetr   ZUNICODE_GUARD_ENVZassertIsNotNoneisasciir   )r   guardr   r   r   test_unicode_guard_env  s
   z#ArgsTestCase.test_unicode_guard_envc                 C   s~   t j| jd}t | t j| jd}t|d  ||g}ddd| j dg}| | |D ]}| t j	|| q0d S )NZtest_python_123Ztest_python_456wbrV   r,  z--tempdir=%sz	--cleanup)
r^   r_   rr   r   mkdirr\   closer  ZassertFalseexists)r   r   rc   r   rI  r   r   r   r   test_cleanup  s   

zArgsTestCase.test_cleanupN))r   r   r   r%  rN  rQ  rS  rK   r\  r>   r_  r   r%   r   rb  rE  rF  rA  r~   rg  rj  rn  r   Zcpython_onlyro  rq  rz  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rH    sN    0
	





$)
!rH  c                   @   r  )	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{Gz?z10 msg      ?z1.5 secr.   z1.0 secx   z2 miny   z2 min 1 seci0*  z3 houri*  z3 hour 2 mini1*  z3 hour 1 sec)r   r   Zformat_durationr   r   r   r   test_format_duration0  s<   zTestUtils.test_format_durationN)r   r   r   r  r   r   r   r   r  /  r  r  __main__)+r   r  r   Zos.pathr^   r!  r   r   r  r   r   r   timerE  r,  r   r   Ztest.supportr   Ztest.libregrtestr   r   hasattrrA  r_   rr   r   r   r6  r`   normpathr   r   rZ  ZTestCaser   r   r  r  rH  r  r   mainr   r   r   r   <module>   sP    


  @ @r     