
    z%iL              	       l   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 d dlmZ d dlmZ d dlmZmZmZ ee   Zeeef   Z G d	 d
      Z ed      Z dddZ! e jD                  d       G d d             Z# e jD                  dd       G d d             Z$dZ%h dZ&d0dZ'dde&dddZ(dde&ddZ)ded edz  d!efd"Z*d#efd$Z+d%e#d#ed!dfd&Z,d#eded!e#fd'Z-d( Z.d#edefd)Z/d1d*Z0g Z1d%e#d#ed!dfd+Z2	 d2d%e#d#ed,e3d!dfd-Z4ded.e5d!dfd/Z6y)3    N)support)	TestStats)	os_helper)threading_helper)	Namespace)saved_test_environment)clear_cachesformat_durationprint_warningc                   h    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZed        Zed        Zed        Zy)StatePASSEDFAILEDSKIPPEDUNCAUGHT_EXCREFLEAKENV_CHANGEDRESOURCE_DENIEDINTERRUPTEDMULTIPROCESSING_ERRORDID_NOT_RUNTIMEOUTc                     | t         j                  t         j                  t         j                  t         j                  t         j
                  hv S N)r   r   r   r   r   r   states    L/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/libregrtest/runtest.py	is_failedzState.is_failed(   s;    LLMM''MM  	    c                     | t         j                  t         j                  t         j                  t         j                  t         j
                  hvS r   )r   r   r   r   r   r   r   s    r   has_meaningful_durationzState.has_meaningful_duration1   sA     MM!!''  	r   c                 F    | t         j                  t         j                  hv S r   )r   r   r   r   s    r   	must_stopzState.must_stop>   s&    '') ) 	)r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r!   r#    r   r   r   r      st    FFG!LGK'OK3KG  
 
 ) )r   r   )
setUpClasstearDownClasssetUpModuletearDownModuleFis_errorc                    | j                  d      d   }|rV|t        v rN| j                  d      ry | j                  d      }| j                  d      }| |dz   | j                  d      d   S |S )	N r   )zsetUpModule (ztearDownModule (()   .)split_TEST_LIFECYCLE_HOOKS
startswithindex)test_full_namer.   
short_namelparrpars        r   normalize_test_namer>   M   s    %%c*1-JJ"77$$%JK  ##C(##C(dQh-33C8<<r   T)slotsc                       e Zd ZU eed<   dZedz  ed<   dZedz  ed<   dZe	e   dz  ed<   dZ
edz  ed<   dZe	eeef      dz  ed<   dZe	eeef      dz  ed<   d	ed
efdZd Zd
efdZd Zd Zded	ed
efdZd Zy)
TestResult	test_nameNr   durationxml_datastatserrorsfailuresfail_env_changedreturnc                 ~    | j                   t        j                  k(  r|S t        j                  | j                         S r   )r   r   r   r   )selfrH   s     r   r   zTestResult.is_failedo   s-    ::***##tzz**r   c           
         | j                   ri| j                  r]t        | j                         }t        | j                        }d|dkD  rdndz   }d|dkD  rdndz   }| j                   d| d| d| d| d	
S | j                   r6t        | j                         }d|dkD  rdndz   }| j                   d| d| d	S | j                  r6t        | j                        }d|dkD  rdndz   }| j                   d| d| d	S | j                   d
S )Nerrorr3   s failurez	 failed (r0   z, r2    failed)rF   rG   lenrB   )rK   lelferror_s	failure_ss        r   _format_failedzTestResult._format_failedt   s   ;;4==T[[!BT]]#BQB7G!BFS;Inn%Yrd!G9Brd!I;aPP;;T[[!BQB7Gnn%Yrd!G9A>>==T]]#B!BFS;Inn%Yrd!I;a@@..!))r   c                 \   | j                   xt        j                  k(  r | j                   dS xt        j                  k(  r | j                         S xt        j                  k(  r | j                   dS xt        j                  k(  r | j                   dS xt        j                  k(  r | j                   dS xt        j                  k(  r | j                   dS xt        j                  k(  r | j                   dS xt        j                  k(  r | j                   dS xt        j                  k(  r | j                   dS xt        j                  k(  r | j                   d	S t        j                  k(  r%| j                   d
t        | j                          dS 	 t#        d      )Nz passedz skippedz failed (uncaught exception)z failed (reference leak)z failed (env changed)z skipped (resource denied)z interruptedz process crashedz ran no testsz timed out (r2   zunknown result state: {state!r})r   r   r   rB   r   rW   r   r   r   r   r   r   r   r   r   r
   rC   
ValueErrorrK   s    r   __str__zTestResult.__str__   s^   jj..)11**,,..)22###..))EFF..))ABB"""..))>??&&&..))CDD"""..)66,,,..))9::"""..)77..)odmm6T5UUVWW !BCCr   c                 @    t         j                  | j                        S r   )r   r!   r   rZ   s    r   r!   z"TestResult.has_meaningful_duration   s    ,,TZZ88r   c                     | j                   | j                   t        j                  k(  rt        j                  | _         y y r   )r   r   r   r   rZ   s    r   set_env_changedzTestResult.set_env_changed   s-    ::u||!;**DJ "<r   	fail_fastc                 l    t         j                  | j                        ry|r| j                  |      ryy)NTF)r   r#   r   r   )rK   r_   rH   s      r   r#   zTestResult.must_stop   s*    ??4::&(89r   c           	          g }| j                   xs g }| j                  xs g }|df|dffD ]N  \  }}|D ]D  ^}}t        ||      }|  y |s|rdnd}	t        d|	 d|d         y |j	                  |       F P |S )	NTFr-   ERRORFAILzrerun failed to parse z test name: z: don't filter tests)rF   rG   r>   r   append)
rK   match_testsrF   rG   
error_listr.   	full_name_
match_name
error_types
             r   get_rerun_match_testsz TestResult.get_rerun_match_tests   s    "==&BTNu%
 	/ J ", 
/	A0XN
%!,4&J!$::,l%.M1E#G H"":.
/		/  r   )r$   r%   r&   str__annotations__r   rC   floatrD   listrE   r   rF   tuplerG   boolr   rW   r[   r!   r^   r#   rk   r(   r   r   rA   rA   b   s    NE3:!Hedl!!%Hd3i$%"E9t" ,0FDsCx!D(/-1Hd5c?#d*1+$ +4 +
*(D D69+4 4 D r   rA   )r?   frozenc                   f    e Zd ZU ee   ed<   dZedz  ed<   dZe	ed<   dZ
e	ed<   dedz  fdZd	 Zy)
RunTeststestsNre   FrerunforeverrI   c                 T    | j                   | j                   j                  |d       S y r   )re   get)rK   rB   s     r   get_match_testszRunTests.get_match_tests   s*    '##''	488r   c              #      K   t        | j                        }| j                  r	 |E d {    |E d {    y 7 7 wr   )rp   ru   rw   )rK   ru   s     r   
iter_testszRunTests.iter_tests   s@     djj!<<      !s   (?;
?=??)r$   r%   r&   ro   rl   rm   re   MatchTestsDictrv   rq   rw   
MatchTestsrz   r|   r(   r   r   rt   rt      sE    9)-K$&-E4GTJ,= r   rt   g      >@>   test_asynciotest_concurrent_futurestest_multiprocessing_forktest_multiprocessing_spawntest_multiprocessing_forkserverc                     | xsR t         j                  j                  t         j                  j                  t                    xs t         j                  S r   )ospathdirname__file__curdir)r   s    r   findtestdirr      s0    J277??277??8#<=JJr   r(   rO   testdirexcludesplit_test_dirsbase_modc           	         	 t        |       } g }t        j                  |       D ]  }t        j                  j	                  |      \  }}|j                  d      r||v r;||v rJt        j                  j                  | |      }|xs d d| }|j                  t        ||||             |dv s|j                  |r| d| n|        t        |      S )Ntest_testr4   r   )z.pyrO   )r   r   listdirr   splitextr8   joinextend	findtestsrd   sorted)	r   r   r   r   ru   namemodextsubdirs	            r   r   r      s    7'"GE

7# 
C77##D)Sw'SG^/!WW\\'3/F'(#/CLL673BSR SKLLH:Qse,cB
C %=r   )r   r   r   c          	          t        |      }g }| D ]V  }||v r?t        j                  j                  ||      }|j	                  t        ||||             F|j                  |       X |S )Nr   )r   r   r   r   r   r   rd   )ru   r   r   r   splittedr   r   s          r   split_test_packagesr     sn    '"GH "?"WW\\'40FOOIfg6E/35 6 OOD!" Or   rB   test_dirrI   c                 6    | j                  d      s|r| S d| z   S )Nztest.)r8   )rB   r   s     r   abs_module_namer     s%    G$ ""r   nsc                 F   | j                   t        _        | j                  t        _        t        j
                  | j                  | j                         | j                  t        _        | j                  t        _	        | j                  rg t        _        y d t        _        y r   )pgor   PGOpgo_extendedPGO_EXTENDEDset_match_testsre   ignore_testsfailfastverbosexmlpathjunit_xml_list)r   s    r   setup_supportr     s_    &&GK??GBNNBOO<{{GjjGO	zz!#!%r   resultc                    |j                   }|j                  }|j                  }|d uxr t        j                  }|rt        j                  |d       	 t        |       |rdt        _         t        j                         }t        j                  }t        j                  }t        j                  }	|	j                  }
d }	 |t        _        |t        _        ||	_        t!        | |d       | j"                  t$        j&                  k7  r|j)                         }|t        _        |t        _        |
|	_        |Xt        j                  j+                  |       t        j                  j-                          n|t        _         t!        | ||        t        j.                  }|r<dd lmc m} |D cg c]"  }|j7                  |      j9                  d      $ c}| _        |rt        j<                          d t        _        y # |t        _        |t        _        |
|	_        w xY wc c}w # |rt        j<                          d t        _        w xY w)NT)exitF)display_failurer   zus-ascii)r   verbose3timeoutr   can_start_threadfaulthandlerdump_traceback_laterr   r   ioStringIOsysstdoutstderrr   orig_stderr_runtest_env_changed_excr   r   r   getvaluewriteflushr   xml.etree.ElementTreeetreeElementTreetostringdecoderD   cancel_dump_traceback_later)r   r   r   output_on_failurer   use_timeoutstreamorig_stdoutr   r   orig_print_warnings_stderroutputxml_listETxs                  r   _runtestr   +  s    jjGjjG 	tA 0 A A  ))'=.&b"GO[[]F**K**K#11M)6)B)B&FG#
#
 -3)(UK<<5<</#__.F(
(
,F)!

  (

  " &GO$VRWM))..(02#$  "{{1~44Z@ 2FO 446!%) )
(
,F)2 446!%s3   A+H' AH  BH' /'H"H'  HH' '#I
c                 T   	 t        j                         }t        |      }	 t        ||        t        j                         |z
  |_        |S #  | j                  s6t        j                         }t        d| d| t        j                  d       t        j                  |_        Y yxY w)Ntest  crashed -- Tfiler   )timeperf_counterrA   r   r   	traceback
format_excprintr   r   r   r   r   rC   )r   rB   
start_timer   msgs        r   runtestr   i  s    	 ""$J	"F* '')J6FOM*vv&&(CE)L6zz/))s   A AB'c                     t        j                         }|j                  |       }|j                  D ]  }t	        |t
        j                          |j                  rt        d      t        j                  |      S )N)r   zerrors while loading tests)
unittest
TestLoaderloadTestsFromModulerF   r   r   r   	Exceptionr   run_unittest)test_modloaderru   rM   s       r   r   r     se      "F&&x0E &e#**%&}}455&&r   c                 \    t        || j                  | j                  | j                        S )N)r   )r   r   quietr   )r   rB   s     r   save_envr     s    !)RZZrvvNNr   c                 *   |j                   rddlm}  ||| j                  |      \  }}n	 |       }d}|rt        j
                  | _        |xt        d x\    |}|| _        y  xt        j                  d x \    t        j                  |      }|| _        y  xt        j                  d x \    t        j                  |      }|| _        y  $t        | j                   d|        d }|| _        y 	 t        dt        |              d }|| _        y )Nr   )dash_RFr(   z test runner returned None: zUnknown test result type: )
huntrleakstest.libregrtest.refleakr   rB   r   r   r   r   r   rA   from_unittestdoctestTestResultsfrom_doctestr   typerE   )r   	test_funcr   r   refleaktest_resultrE   s          r   regrtest_runnerr     s	    
}}3%b&*:*:IFk}}
Y[E FL "X  "++K8E FL #"W  "**;7E FL #V--..J9+VWE
 FL	 6tK7H6IJKEFLr   c                    t        | j                  |j                        }t        j                  j                  |d        t        j                  |      t        d      rt        d| j                   d      fd}	 t        || j                        5  t        | ||       d d d        t        j                          t        | j                  |j                         t         j"                  r~dt        _        t'        | j                   dt)        t         j"                         d       t*        j-                  t         j"                         t         j"                  j/                          t        j0                          y # 1 sw Y   xY w# t        j                          t        | j                  |j                         w xY w)N	test_mainzModule z= defines test_main() which is no longer supported by regrtestc                      t               S r   )r   )r   s   r   r   z!_load_run_test.<locals>.test_func  s    H%%r   Tz	 created z uncollectable object(s))r   rB   r   r   modulespop	importlibimport_modulehasattrr   r   r   r   
gc_collectremove_testfnr   gcgarbageenvironment_alteredr   rR   FOUND_GARBAGEr   clearreap_children)r   r   module_namer   r   s       @r   _load_run_testr	    sO   !&"2"2BJJ?K KKOOK&&&{3Hx%'&"2"2!33pqrr&
4b&**+ 	3FIr2	3 	f&&

3	zz&*#))*)C

O3D E0 1 	2
 	RZZ(


+	3 	3 	f&&

3s$   F F&F F
F 6Gr   c                 &   dt         _        |j                  rd}| j                  }	 t	                t        j
                          t        ||      5  t        | |       d d d        t         j                  r| jA                          | j                  t        jB                  | _        y y # 1 sw Y   LxY w# t         j                  $ rI}|j                  s|j                  st        | d| d       t        j                  | _        Y d }~y d }~wt        j                  $ rI}|j                  s|j                  st        | d| d       t        j                   | _        Y d }~y d }~wt         j"                  $ r}}d| d}|r| d| }t        |t$        j&                  d       t        j(                  | _        |j*                  | _        |j,                  | _        |j.                  | _        Y d }~y d }~wt         j0                  $ r[}d| d}|r| d| }t        |t$        j&                  d       t        j(                  | _        |j.                  | _        Y d }~y d }~wt         j2                  $ r t        j4                  | _        Y y t6        $ r" t                t        j8                  | _        Y y  |j                  s6t;        j<                         }t        d| d	| t$        j&                  d       t        j>                  | _        Y y xY w)
NFz skipped -- T)r   r   rQ   z -- r   r   )"r   r  r   rB   r	   r   r   r	  ResourceDeniedr   r   r   r   r   r   SkipTestr   TestFailedWithDetailsr   r   r   rF   rG   rE   
TestFailedTestDidNotRunr   KeyboardInterruptr   r   r   r   r^   r   )r   r   r   rB   r   excs         r   r   r     sc    #(G	vv  I/b)$ 	'62&	'Z "" |||| a	' 	'!! xxYK|C51>,, xxYK|C51>}}(( 	i[(EcU#Cc

$/||

,,yy i[(EcU#Cc

$/||yy   (( ((vv&&(CE)L6zz/))sb   *B5 B)B5 )B2.B5 5L?DL"?E&&L<A3G44L
AI  +L'L6ALr   c           
      p   t         j                  }t        j                  j	                  |      sy t        j                  j                  |      rdd l}d|j                  }}nAt        j                  j                  |      rdt        j                  }}nt        d|d      |rt        |  d| d|       dt        _        	 dd l}t        j                  ||j                   |j"                  z  |j$                  z          ||       y # t&        $ r }t        |  d| d|d	|        Y d }~y d }~ww xY w)
Nr   	directoryr   zos.path says z) exists but is neither directory nor filez left behind r0   Tz and it couldn't be removed: )r   TESTFNr   r   existsisdirshutilrmtreeisfileunlinkRuntimeErrorr   r   r  statchmodS_IRWXUS_IRWXGS_IRWXOr   )rB   r   r   r  kindnukerr  r  s           r   r  r    s    D77>>$	ww}}T!6==e		biie]4( 30 1 2 	2 =ax@A&*#<
t||dll2T\\ABd <=ax @558E; 	< 	<<s   AD 	D5D00D5r   )rI   N)T)7dataclassesr   r   r  r   r   r   r   r   r   r   r   r   test.supportr   r   r   test.libregrtest.cmdliner   test.libregrtest.save_envr   test.libregrtest.utilsr	   r
   r   ro   rl   r~   dictr}   r   	frozensetr7   r>   	dataclassrA   rt   PROGRESS_MIN_TIMESPLITTESTDIRSr   r   r   r   r   r   r   r   r   r   r  r	  rq   r   intr  r(   r   r   <module>r.     s      	  	 	 
     " " ) . < O O #Y
c:o&') ')Z " #  
 5: * T"c c #cL T$/  0.  K r+b& +/(5#s #cDj #S #	&i 	&;&Z ;&Y ;&4 ;&|	 c j 2'O Os O> %: %9 % %R 6:A$Z A$Y A$.2A$>BA$H!<S !<3 !<4 !<r   