
    Rh)              	       N   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*y)    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                  |       }|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.12/test/libregrtest/single.pyrun_unittestr$      si      "F&&x0E &e#**%&}}455%$e    c                     g }| j                   D ]T  }t        |t        j                        rt	        ||       |j                  |       ; ||      sD|j                  |       V || _         y)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!Dz%& ELr%   c                    t        t        j                  t        j                  t        j
                  du      }|j                  |       }t        j
                  -t        j
                  j                  |j                                |j                  s(|j                  s|j                  st        j                  |j                         st        j                  |      }t!        |j                        dk(  r|j"                  s|j                  d   d   }nNt!        |j"                        dk(  r|j                  s|j"                  d   d   }nd}t        j                  s|dz  }|j                  D cg c]  \  }}t%        |      |f }}}|j"                  D cg c]  \  }}t%        |      |f }}}t        j&                  ||||      |S c c}}w c c}}w )z2Run tests from a unittest.TestSuite-derived class.N)	verbositycapture_outputr   r   zmultiple errors occurredz!; run in verbose mode for details)stats)r   r   stdoutr   verbosejunit_xml_listrunr*   get_xml_elementtestsRunskippedr   TestDidNotRunwasSuccessfulr	   from_unittestlenfailuresstrTestFailedWithDetails)	r+   runnerresultr2   errtcexc_strr   r>   s	            r#   r   r   3   ss   SZZ'.-4-C-C4-ORF ZZF)%%f&<&<&>???6>>&--###!''/v}}"6??--"1%C!Q&v}}//!$Q'C,C??C+N$NC8>FW3r7G$FF:@//J;2wSWg&JJ++COOM GJs   7G GrB   runtestsreturnc                 X   |j                   r3ddlm}  || j                  ||j                   |j                        \  }}n	 |       }d}|rt
        j                  | _        |xt        d x\    |}|| _        y  xt        j                  d x \    t        j                  |      }|| _        y  $t        | j                   d|        d }|| _        y 	 dd l}t        ||j                        rt        j                   |      }|| _        y t        dt#        |              d }|| _        y )Nr   )runtest_refleakF z test runner returned None: r   zUnknown test result type: )hunt_refleakrefleakrI   	test_namequietr   REFLEAKstater	   r   r   r<   r   doctestr(   TestResultsfrom_doctesttyper2   )rB   	test_funcrF   rI   rL   test_resultr2   rQ   s           r#   regrtest_runnerrW   O   s#    ,.v/?/?/7/D/D/7~~ ?  k}} Y[E  FL# "X  "++K8E FL #V--..J9+VWE FL  +w':':;!..{;
 FL  :4;L:MNOFLr%   c                    | j                   }t        ||j                        }t        j                  |      t        d      rt        d| d      fd}	 t        | ||       t        j                          t        ||j                         t        j                  rtdt        _        t        | dt!        t        j                         d       t"        j%                  t        j                         t        j                  j'                          t        j(                          y # t        j                          t        ||j                         w xY w)N	test_mainzModule z= defines test_main() which is no longer supported by regrtestc                      t               S )N)r$   )r   s   r#   rU   z!_load_run_test.<locals>.test_func   s    H%%r%   Tz	 created z uncollectable object(s))rM   r   test_dir	importlibimport_modulehasattrr   rW   r   
gc_collectr   r4   gcgarbageenvironment_alteredr   r=   
GC_GARBAGEextendclearreap_children)rB   rF   rM   module_namerU   r   s        @r#   _load_run_testrh   y   s     I!)X->->?K&&{3Hx%') -= > ? 	?&	3	84 	i!1!12	zz&*#9S_,= >0 1 	2
 	"**%


 	i!1!12s   D* *,Edisplay_failurec                    dt         _        |j                  }|rd}|j                  }| j                  }	 t                t        j                          t        ||j                  ||      5  t        | |       d d d        t         j                  r| jC                          | j                  t        jD                  | _        y y # 1 sw Y   LxY w# t         j                  $ r5}|s|st        | d| d       t        j                  | _        Y d }~y d }~wt        j                   $ r5}|s|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.                  | _        |j0                  | _        Y d }~y d }~wt         j2                  $ r[}d| d}|r| d| }t        |t&        j(                  d	       t        j*                  | _        |j0                  | _        Y d }~y d }~wt         j4                  $ r t        j6                  | _        Y y t8        $ r" t                t        j:                  | _        Y y  |s6t=        j>                         }t        d| d
| t&        j(                  d	       t        j@                  | _        Y y xY w)NF)pgoz skipped -- T)flushtest z failedz -- r   rl    crashed -- )#r   rb   rk   rN   rM   r   r_   r   r4   rh   ResourceDeniedr   r   RESOURCE_DENIEDrP   r   SkipTestSKIPPEDr@   r   r   FAILEDr   r>   r2   
TestFailedr:   DID_NOT_RUNKeyboardInterruptINTERRUPTED	traceback
format_excUNCAUGHT_EXCset_env_changedPASSED)rB   rF   ri   rk   rN   rM   excmsgs           r#   _runtest_env_changed_excr      sm    #(G
,,C
NNE  I0#I$,$4$4eF 	-68,	-\ "" |||| c	- 	- !! SYK|C51>,, SYK|C51>}}(( 	i[(EcU#Cc

$/||

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

$/||yy   (( ((&&(CE)L6zz/))sb   7C ,C9C C	C K9#+DK9)+EK9/A3G''K9=AI+K9 'K9)AK9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&                  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)ri   r   zus-ascii)r4   output_on_failuretimeoutr   can_start_threadfaulthandlerdump_traceback_laterr   r   ioStringIOr   r3   r   r   orig_stderrr   rP   r   r}   getvaluewriterl   r5   xml.etree.ElementTreeetreeElementTreetostringdecodexml_datacancel_dump_traceback_later)rB   rF   r4   r   r   use_timeoutstreamorig_stdoutr   r   orig_print_warnings_stderroutputxml_listETxs                  r#   _runtestr      s    G 22G/@@))'=/&H"GO[[]F**K**K#11M)6)B)B&FG#
#
 -3)(5Q<<5<</#__.F(
(
,F)!

  (

  " &GO$VX9@[B ))..(02#$  "{{1~44Z@ 2FO 446!%+ )
(
,F)2 446!%s3   A+H&  AG? BH& .'H!H& ?HH& &#I	rM   c                    t        j                         }t        |       }|j                  }	 t	        ||       t        j                  j                          t        j                  j                          t        j                         |z
  |_        |S #  |s6t        j                         }t        d|  d| t        j                  d       t        j                  |_        Y xY w)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.
    rm   ro   Trn   )timeperf_counterr   rk   r   ry   rz   r   r   r   r   r{   rP   r3   rl   duration)rM   rF   
start_timerB   rk   r   s         r#   run_single_testr   $  s     ""$J	"F
,,C*" JJJJ'')J6FOM*&&(CE)L6zz/))s   B AC$)T)+r   r`   r\   r   r   r   ry   r   r.   r   test.supportr   filterr   rB   r   r   r	   rF   r
   save_envr   setupr   
testresultr   utilsr   r   r   r   r   PROGRESS_MIN_TIMEr$   r   r   rW   rc   rh   boolr   r   r   rJ   r%   r#   <module>r      s     	  	 
     )  0 0  ,  'A A  
8#J #X #$ #N 
": " "d "L 6:D$Z D$8 D$.2D$>BD$N<&Z <&8 <& <&~x 8 
 r%   