
    z
@h/                        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mZmZmZmZmZ  G d d          Z ej        dd	           G d
 d                      Z ej        dd	           G d d                      Z ej        dd	           G d d                      Z ej        dd	           G d de                      Z G d dej                  Zdeeef         deeeef         z  fdZdS )    N)Any)support   )StrPathStrJSON	TestTuple
TestFilterFilterTuple
FilterDictc                       e Zd ZdZdZdZdS )JsonFileTypeUNIX_FDWINDOWS_HANDLESTDOUTN)__name__
__module____qualname__r   r   r        0/usr/lib/python3.11/test/libregrtest/runtests.pyr   r      s        G%NFFFr   r   T)slotsfrozenc                   b    e Zd ZU edz  ed<   eed<   deddfdZej	        d             Z
d
d	ZdS )JsonFileNfile	file_typepopen_kwargsreturnc                     | j         xt          j        k    r | j        g|d<   d S t          j        k    r)t          j                    }d| j        gi|_        ||d<   d S d S )Npass_fdshandle_liststartupinfo)r   r   r   r   r   
subprocessSTARTUPINFOlpAttributeList)selfr   r"   s      r   configure_subprocesszJsonFile.configure_subprocess   sq    n%%%%%,0I;Z(((,,, )466/<tyk.J+.9]+++ -,r   c              #      K   | j         t          j        k    rZt          j        | j        d           	 d V  t          j        | j        d           d S # t          j        | j        d           w xY wd V  d S )NTF)r   r   r   osset_handle_inheritabler   r&   s    r   inherit_subprocesszJsonFile.inherit_subprocess+   s|      >\888%di666<)$)U;;;;;)$)U;;;;EEEEEs   A A/rc                    | j         t          j        k    rt          d          | j        }| j         t          j        k    r$dd l}|                    |t          j	                  }t          |||          S )Nz)for STDOUT file type, just use sys.stdoutr   )encoding)r   r   r   
ValueErrorr   r   msvcrtopen_osfhandler)   O_WRONLYopen)r&   moder/   r   r1   s        r   r4   zJsonFile.open6   sm    >\000HIIIy>\888MMM((r{;;DD$2222r   )r-   )r   r   r   int__annotations__strdictr'   
contextlibcontextmanagerr,   r4   r   r   r   r   r      s          *NNN
: 
:$ 
: 
: 
: 
:   	3 	3 	3 	3 	3 	3r   r   c                   F    e Zd ZU eed<   eed<   eed<   dee         fdZdS )HuntRefleakwarmupsrunsfilenamer   c                 *    d| j          d| j         dgS )Nz-R:)r>   r?   r+   s    r   bisect_cmd_argszHuntRefleak.bisect_cmd_argsH   s$     44	44455r   N)	r   r   r   r6   r7   r   listr8   rC   r   r   r   r=   r=   B   sS         LLL
III6c 6 6 6 6 6 6r   r=   c                      e Zd ZU eed<   eed<   eed<   eed<   edz  ed<   eed<   eed<   eed	<   eed
<   eed<   edz  ed<   e	ed<   eed<   e
dz  ed<   edz  ed<   eed<   edz  ed<   e	dz  ed<   eedf         ed<   eedf         dz  ed<   eed<   e	ez  ed<   d"dZd Zdedz  fdZd Zd ZdefdZdee         fd Zdee         fd!ZdS )#RunTeststests	fail_fastfail_env_changedmatch_testsNmatch_tests_dictrerunforeverpgopgo_extendedoutput_on_failuretimeoutverbosequiethunt_refleaktest_dir	use_junitmemory_limitgc_threshold.use_resources
python_cmd	randomizerandom_seedr   c                 l    t          j        |           }|                    |           t          di |S Nr   )dataclassesasdictupdaterF   r&   overridestates      r   copyzRunTests.copyg   s8    "4((X  %   r   c                 l    t          j        |           }|                    |           t          di |S r^   )r_   r`   ra   WorkerRunTestsrb   s      r   create_worker_runtestszRunTests.create_worker_runtestsl   s8    "4((X&&&&&r   c                 J    | j         | j                             |d           S d S N)rK   get)r&   	test_names     r   get_match_testszRunTests.get_match_testsq   s)     ,(,,Y===4r   c                 <    | j         rd S t          | j                  S rj   )rM   lenrG   r+   s    r   get_jobszRunTests.get_jobsw   s!     < 	44:r   c              #   P   K   | j         r	 | j        E d {V  | j        E d {V  d S rj   )rM   rG   r+   s    r   
iter_testszRunTests.iter_tests~   sV      < 	"&:%%%%%%%& z!!!!!!!!!r   c                 Z    t          | j                  pt          j        pt          j        S rj   )boolrZ   r   is_emscriptenis_wasir+   s    r   json_file_use_stdoutzRunTests.json_file_use_stdout   s+     !! $	
r   c                     t          j                    }| j        | j        }d |D             }nt          j        f}g ||}d|vr|                    d           |S )Nc                     g | ]
}|d k    |S )z-Er   ).0opts     r   
<listcomp>z.RunTests.create_python_cmd.<locals>.<listcomp>   s    EEE33r   -u)r   args_from_interpreter_flagsrZ   sys
executableappend)r&   python_optsr   cmds       r   create_python_cmdzRunTests.create_python_cmd   sr    9;;?&J FE+EEEKK.*J)
)[){""JJt
r   c                 H   g }| j         r|                    d           | j        r|                    d           | j        r|                    d| j                    | j        ,|                    | j                                                   | j        r|                    d| j        f           | j        r|                    d| j        f           | j	        r|                    d| j	                    | j
        r/|                    dd                    | j
                  f           | j        r0t          j        | j                  }|                    d	|f           | j        r|                    d
           |                    d| j                    |S )Nz
--failfastz--fail-env-changedz
--timeout=z	--testdirz
--memlimitz--threshold=r}   ,z--pythonz--randomizez--randseed=)rH   r   rI   rQ   rT   extendrC   rU   rW   rX   rY   joinrZ   shlexr[   r\   )r&   argsr   s      r   rC   zRunTests.bisect_cmd_args   s   > 	&KK%%%  	.KK,---< 	5KK3T\33444(KK)99;;<<<= 	6KKdm4555 	;KKt'89::: 	<KK:t'8::;;; 	>KKsxx(:;;<===? 	+*T_--CKKS)***> 	(KK'''4$"244555r   )r   rF   )r   r   r   r   r7   rt   r	   r   floatr6   r=   r   r8   tuplere   rh   r
   rm   rp   rr   rw   rD   r   rC   r   r   r   rF   rF   N   s        OOO 4''''KKKMMM	IIIT\LLLKKK$$$$nOOO**c?"""c3h$&&&&OOOs! ! ! !
' ' '
K$,>      " " "
d 
 
 
 
49    c      r   rF   c                   F    e Zd ZU eed<   defdZededd fd            ZdS )rg   	json_filer   c                 8    t          j        | t                    S )N)cls)jsondumps_EncodeRunTestsr+   s    r   as_jsonzWorkerRunTests.as_json   s    z$O4444r   worker_jsonc                 8    t          j        | t                    S )N)object_hook)r   loads_decode_runtests)r   s    r   	from_jsonzWorkerRunTests.from_json   s    z+3CDDDDr   N)	r   r   r   r   r7   r   r   staticmethodr   r   r   r   rg   rg      st         5 5 5 5 5 Ew E+; E E E \E E Er   rg   c                   8     e Zd Zdedeeef         f fdZ xZS )r   or   c                     t          |t                    rt          j        |          }d|d<   |S t	                                          |          S )NT__runtests__)
isinstancerg   r_   r`   superdefault)r&   r   result	__class__s      r   r   z_EncodeRunTests.default   sJ    a(( 	& '**F%)F>"M77??1%%%r   )r   r   r   r   r9   r8   r   __classcell__)r   s   @r   r   r      sS        & &c3h & & & & & & & & & &r   r   datar   c                     d| v r[|                      d           | d         rt          di | d         | d<   | d         rt          di | d         | d<   t          di | S | S )Nr   rT   r   r   )popr=   r   rg   )r   s    r   r   r      s        	G#.#F#Fn1E#F#FD  	> ( = =4+< = =D%%%%%r   )r:   r_   r   r)   r   r#   r   typingr   testr   utilsr   r   r   r	   r
   r   r   	dataclassr   r=   rF   rg   JSONEncoderr   r9   r8   r   r   r   r   <module>r      s            				      



            F F F F F F F F F F F F F F F F        T$///(3 (3 (3 (3 (3 (3 (3 0/(3V T$///6 6 6 6 6 6 6 0/6 T$///j j j j j j j 0/jZ T$///E E E E EX E E 0/E& & & & &d& & & &	4S> 	hc3h.G 	 	 	 	 	 	r   