
    z
@h)              	       P   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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mZmZ dZ d Z!d Z"d Z#dededdfdZ$g Z%dededdfdZ&	 ddedede'ddfdZ(dededdfdZ)dededefdZ*dS )    N)support)threading_helper   )
match_test)State
TestResult	TestStats)RunTests)saved_test_environment)setup_tests)get_test_runner)TestNameclear_cachesremove_testfnabs_module_nameprint_warningg      >@c                    t          j                    }|                    |           }|j        D ]}t	          |t
          j                   |j        rt          d          t          |t                     t          |          S )N)filezerrors while loading tests)unittest
TestLoaderloadTestsFromModuleerrorsprintsysstderr	Exception_filter_suiter   
_run_suite)test_modloadertestserrors       ./usr/lib/python3.11/test/libregrtest/single.pyrun_unittestr$      s     ""F&&x00E & &e#*%%%%%} 64555%$$$e    c                     g }| j         D ]b}t          |t          j                  r&t	          ||           |                    |           B ||          r|                    |           c|| _         dS )z>Recursively filter test cases in a suite based on a predicate.N)_tests
isinstancer   	TestSuiter   append)suiteprednewteststests       r#   r   r   '   s    H & &dH.// 	&$%%%OOD!!!!tDzz &%%%ELLLr%   c                    t          t          j        t          j        t          j        du          }|                    |           }t          j        1t          j                            |                                           |j	        s|j
        s|j        st          j        |                                st          j        |          }t!          |j                  dk    r|j        s|j        d         d         }nFt!          |j                  dk    r|j        s|j        d         d         }nd}t          j        s|dz  }d |j        D             }d |j        D             }t          j        ||||	          |S )
z2Run tests from a unittest.TestSuite-derived class.N)	verbositycapture_outputr   r   zmultiple errors occurredz!; run in verbose mode for detailsc                 6    g | ]\  }}t          |          |fS  str.0tcexc_strs      r#   
<listcomp>z_run_suite.<locals>.<listcomp>I   s'    FFFW3r77G$FFFr%   c                 6    g | ]\  }}t          |          |fS r3   r4   r6   s      r#   r:   z_run_suite.<locals>.<listcomp>J   s'    JJJ;2wSWWg&JJJr%   )stats)r   r   stdoutr   verbosejunit_xml_listrunr*   get_xml_elementtestsRunskippedr   TestDidNotRunwasSuccessfulr	   from_unittestlenfailuresTestFailedWithDetails)r+   runnerresultr<   errr   rH   s          r#   r   r   3   st   SZ'.-4-C4-OR R RF ZZF)%%f&<&<&>&>???? $6> $&- $##!! P'//v}""6?"-"1%CC!!Q&&v}&/!$Q'CC,C?NC+N$NCFFFFFJJ&/JJJ+COOOOMr%   rK   runtestsreturnc                     |j         r'ddlm}  || j        ||j         |j                  \  }}n |            }d}|rt
          j        | _        |xt          d x\    |}n xt          j
        d x\    t          j        |          }nn t          | j         d|            d }nP	 dd l}t          ||j                  rt          j        |          }n!t          dt#          |                      d }|| _        d S )Nr   )runtest_refleakFr3   z test runner returned None: r   zUnknown test result type: )hunt_refleakrefleakrP   	test_namequietr   REFLEAKstater	   r   r   rF   r   doctestr(   TestResultsfrom_doctesttyper<   )rK   	test_funcrM   rP   rR   test_resultr<   rW   s           r#   regrtest_runnerr]   O   sN     ,,,,,,.v/?/7/D/7~ ?  ?  ikk %} Y[[[[[[EE "X """"""+K88EE #V-VV9VVWWWEE NNN+w':;; !.{;;N4;L;LNNOOOFLLLr%   c                    | j         }t          ||j                  }t          j        |          t          d          rt          d| d          fd}	 t          | ||           t          j	                     t          ||j                   n-# t          j	                     t          ||j                   w xY wt          j        rzdt          _        t          | dt!          t          j                   d           t"                              t          j                   t          j                                         t          j                     d S )N	test_mainzModule z= defines test_main() which is no longer supported by regrtestc                  "    t                     S )N)r$   )r   s   r#   r[   z!_load_run_test.<locals>.test_func   s    H%%%r%   Tz	 created z uncollectable object(s))rS   r   test_dir	importlibimport_modulehasattrr   r]   r   
gc_collectr   r>   gcgarbageenvironment_alteredr   rG   
GC_GARBAGEextendclearreap_children)rK   rM   rS   module_namer[   r   s        @r#   _load_run_testrn   y   ss    I!)X->??K&{33Hx%% ? >) > > > ? ? 	?& & & & &	3	8444 	i!12222 	i!12222	z &*# 1 1S__ 1 1 1 	2 	2 	2
 	"*%%%

s   B *B?Tdisplay_failurec                    dt           _        |j        }|rd}|j        }| j        }	 t                       t          j                     t          ||j        ||          5  t          | |           d d d            n# 1 swxY w Y   n# t           j
        $ r6}|s|st          | d| d           t          j        | _        Y d }~d S d }~wt          j        $ r6}|s|st          | d| d           t          j        | _        Y d }~d S d }~wt           j        $ rk}d| d}|r| d| }t          |t&          j        d	           t          j        | _        |j        | _        |j        | _        |j        | _        Y d }~d S d }~wt           j        $ rS}d| d}|r| d| }t          |t&          j        d	           t          j        | _        |j        | _        Y d }~d S d }~wt           j        $ r t          j        | _        Y d S t8          $ r# t                       t          j        | _        Y d S  |s5t=          j                    }t          d| d
| t&          j        d	           t          j         | _        Y d S xY wt           j        r| !                                 | j        t          j"        | _        d S d S )NF)pgoz skipped -- T)flushtest z failedz -- r   rr    crashed -- )#r   rh   rq   rT   rS   r   re   r   r>   rn   ResourceDeniedr   r   RESOURCE_DENIEDrV   r   SkipTestSKIPPEDrI   r   r   FAILEDr   rH   r<   
TestFailedrD   DID_NOT_RUNKeyboardInterruptINTERRUPTED	traceback
format_excUNCAUGHT_EXCset_env_changedPASSED)rK   rM   ro   rq   rT   rS   excmsgs           r#   _runtest_env_changed_excr      s    #(G
,C
  NE I0#I$,$4eF F F 	- 	-68,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- !    	?S 	?Y11C11>>>>,    	?S 	?Y11C11>>>>}( 	 	 	(i((( 	$##c##Cc
$////|
,y   (i((( 	$##c##Cc
$////|y    (   ( 	/&((C6)6666z/ / / /)" !   || sn   9B
  A=1B
 =BB
 BB
 
J+C

J+DJA FJAG%%#J(J6A	Jc                     |j         }|j        }|j        }|%t          j        rd}t          j        |d           nd}	 t          |           |r+dt          _         t          j
                    }t          j        }t          j        }t          j        }	|	j        }
d }	 |t          _        |t          _        ||	_        t!          | |d           | j        t$          j        k    r|                                }|t          _        |t          _        |
|	_        n$# |t          _        |t          _        |
|	_        w xY w|=t          j                            |           t          j                                         n|t          _         t!          | ||            t          j        }|rdd lmc m fd|D             | _        |rt          j                     d t          _        d S # |rt          j                     d t          _        w xY w)NT)exitF)ro   r   c                 `    g | ]*}                     |                              d           +S )zus-ascii)tostringdecode)r7   xETs     r#   r:   z_runtest.<locals>.<listcomp>  sA     2 2 2#$  "{{1~~44Z@@ 2 2 2r%   )r>   output_on_failuretimeoutr   can_start_threadfaulthandlerdump_traceback_laterr   r   ioStringIOr   r=   r   r   orig_stderrr   rV   r   r   getvaluewriterr   r?   xml.etree.ElementTreeetreeElementTreexml_datacancel_dump_traceback_later)rK   rM   r>   r   r   use_timeoutstreamorig_stdoutr   r   orig_print_warnings_stderroutputxml_listr   s                @r#   _runtestr      s;    G 2G/@)'=====/&H "	B"GO[]]F*K*K#1M)6)B&FG#
#
 -3)(5QQQQ<5<//#__..F(
(
,F)) )
(
,F)FFFF!
  (((
  """ &GO$VX9@[B B B B ) 	2.........2 2 2 2(02 2 2FO  	74666!%  	74666!%%%%%s'   AG*  AD : G* !D;;BG* *#HrS   c                    t          j                    }t          |           }|j        }	 t	          ||           nO#  |s5t          j                    }t          d|  d| t          j	        d           t          j        |_        Y nxY wt          j                                         t          j	                                         t          j                    |z
  |_        |S )zRun a single test.

    test_name -- the name of the test

    Returns a TestResult.

    If runtests.use_junit, xml_data is a list containing each generated
    testsuite element.
    rs   ru   Trt   )timeperf_counterr   rq   r   r   r   r   r   r   r   r   rV   r=   rr   duration)rS   rM   
start_timerK   rq   r   s         r#   run_single_testr   $  s     "$$J	""F
,C*""""* 	/&((C6)6666z/ / / /)JJ'))J6FOMs
   < A
B)T)+r   rf   rb   r   r   r   r   r   r.   r   test.supportr   filterr   rK   r   r   r	   rM   r
   save_envr   setupr   
testresultr   utilsr   r   r   r   r   PROGRESS_MIN_TIMEr$   r   r   r]   ri   rn   boolr   r   r   r3   r%   r#   <module>r      sy       				     				 



             ) ) ) ) ) )       0 0 0 0 0 0 0 0 0 0       , , , , , ,       ' ' ' ' ' 'A A A A A A A A A A A A A A    
 
 
  8#J #X #$ # # # #N 
": " "d " " " "L 6:D$ D$Z D$8 D$.2D$>BD$ D$ D$ D$N<&Z <&8 <& <& <& <& <&~x 8 
      r%   