
    F\h4                         S r SSKrSSKJr  SSKJr  SrS r " S S	\5      r " S
 S \5      r	 " S S\5      r
S r " S S\5      rg)	TestSuite    N   )case)utilTc                 ,    [        XS 5      nU" 5         g )Nc                      g N r
       %/usr/lib/python3.13/unittest/suite.py<lambda>!_call_if_exists.<locals>.<lambda>   s    r   )getattr)parentattrfuncs      r   _call_if_existsr      s    6.DFr   c                   b    \ rS rSrSrSrSS jrS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)BaseTestSuite   zNA simple test suite that doesn't provide class or module shared fixtures.
    Tc                 B    / U l         SU l        U R                  U5        g Nr   )_tests_removed_testsaddTests)selftestss     r   __init__BaseTestSuite.__init__   s    er   c                 f    S[         R                  " U R                  5      < S[        U 5      < S3$ )N<z tests=>)r   strclass	__class__listr   s    r   __repr__BaseTestSuite.__repr__   s    "&--"?dLLr   c                 p    [        XR                  5      (       d  [        $ [        U 5      [        U5      :H  $ r	   )
isinstancer$   NotImplementedr%   )r   others     r   __eq__BaseTestSuite.__eq__   s*    %00!!DzT%[((r   c                 ,    [        U R                  5      $ r	   )iterr   r&   s    r   __iter__BaseTestSuite.__iter__"   s    DKK  r   c                 f    U R                   nU  H  nU(       d  M  XR                  5       -  nM      U$ r	   )r   countTestCases)r   casestests      r   r4   BaseTestSuite.countTestCases%   s4    ##Dt,,..  r   c                 *   [        U5      (       d#  [        SR                  [        U5      5      5      e[	        U[
        5      (       a0  [        U[        R                  [        45      (       a  [        S5      eU R                  R                  U5        g )Nz{} is not callablezNTestCases and TestSuites must be instantiated before passing them to addTest())callable	TypeErrorformatreprr*   type
issubclassr   TestCaser   r   appendr   r6   s     r   addTestBaseTestSuite.addTest,   su    ~~077T
CDDdD!!j26--1K'M 'M ? @ @4 r   c                 x    [        U[        5      (       a  [        S5      eU H  nU R                  U5        M     g )Nz0tests must be an iterable of tests, not a string)r*   strr:   rB   )r   r   r6   s      r   r   BaseTestSuite.addTests6   s1    eS!!NOODLL r   c                     [        U 5       HE  u  p#UR                  (       a    U$ U" U5        U R                  (       d  M4  U R                  U5        MG     U$ r	   )	enumerate
shouldStop_cleanup_removeTestAtIndex)r   resultindexr6   s       r   runBaseTestSuite.run<   sL    $T?KE    L}}}''. + r   c                      U R                   U   n[        US5      (       a#  U =R                  UR                  5       -  sl        SU R                   U'   g! [         a     gf = f)z2Stop holding a reference to the TestCase at index.r4   N)r   hasattrr   r4   r:   )r   rM   r6   s      r   rK    BaseTestSuite._removeTestAtIndexE   sa    
	&;;u%D t-..##t':':'<<#!%DKK  		s   A 
A"!A"c                 &    U R                   " U0 UD6$ r	   rN   )r   argskwdss      r   __call__BaseTestSuite.__call__S   s    xx&&&r   c                 6    U  H  nUR                  5         M     g)7Run the tests without collecting errors in a TestResultN)debugrA   s     r   r[   BaseTestSuite.debugV   s    DJJL r   )r   r   N)r
   )__name__
__module____qualname____firstlineno____doc__rJ   r   r'   r-   r1   r4   rB   r   rN   rK   rW   r[   __static_attributes__r
   r   r   r   r      sD    H
M)
!!&'r   r   c                   ^    \ rS rSrSrSS jrS rS rS rS r	 SS	 jr
 SS
 jrS rS rSrg)r   \   a  A test suite is a composite test consisting of a number of TestCases.

For use, create an instance of TestSuite, then add test case instances.
When all tests have been added, the suite can be passed to a test
runner, such as TextTestRunner. It will run the individual test cases
in the order in which they were added, aggregating the results. When
subclassing, do not forget to call the base class constructor.
c                 |   Sn[        USS5      SL a	  S=Ul        n[        U 5       H  u  pEUR                  (       a    O[	        U5      (       at  U R                  XQ5        U R                  XQ5        U R                  XQ5        UR                  Ul	        [        UR                  SS5      (       d  [        USS5      (       a  M  U(       d	  U" U5        OUR                  5         U R                  (       d  M  U R                  U5        M     U(       a*  U R                  S U5        U R                  U5        SUl        U$ )NF_testRunEnteredT_classSetupFailed_moduleSetUpFailed)r   rf   rH   rI   _isnotsuite_tearDownPreviousClass_handleModuleFixture_handleClassSetUpr$   _previousTestClassr[   rJ   rK   _handleModuleTearDown)r   rL   r[   topLevelrM   r6   s         r   rN   TestSuite.runf   s   6,e4=044F"X$T?KE  4  ++D9))$7&&t4,0NN)DNN,?GGF$8%@@V

}}}''.) +, ''f5&&v.%*F"r   c                 <    [        5       nU R                  US5        g)rZ   TN)_DebugResultrN   )r   r[   s     r   r[   TestSuite.debug   s    r   c           	         [        USS 5      nUR                  nXC:X  a  g UR                  (       a  g [        USS5      (       a  g Sn SUl        [        USS 5      n[        USS 5      nUb[  [        US5          U" 5         U(       a2  Ub/  U" 5         UR                   H  n
U R                  X*S   SW	U
S	9  M     [        US
5        g g ! [         a     Nf = f! [         ad  n[        U[        5      (       a  e Sn SUl        O! [         a     Of = f[        R                  " U5      n	U R                  X(SU	5         S nANS nAff = f! [        US
5        f = f)Nrm   __unittest_skip__F
setUpClassdoClassCleanups_setupStdoutTr   info_restoreStdout)r   r$   rh   rg   r:   r   	Exceptionr*   rr   r   r#   "_createClassOrModuleLevelExceptiontearDown_exceptions)r   r6   rL   previousClasscurrentClassfailedrv   rw   e	classNameexc_infos              r   rl   TestSuite._handleClassSetUp   s~   (<dC~~($$<!4e<<	-2L* \<>
!,0A4H!FN3:GL o9#%$0$D$D?? &\9%- @ / %E
  (891 "  	 	 ! G!&,77!F9=6$  $l ;I;;F<H<EG GG&  (89sf   C :C 9E	 
CC
E"E;DE
DED,E<E	 EE	 	Ec                 B    S n[        USS 5      nUb  UR                  nU$ )Nrm   )r   r^   )r   rL   previousModuler   s       r   _get_previous_moduleTestSuite._get_previous_module   s-    (<dC$*55Nr   c                    U R                  U5      nUR                  R                  nXC:X  a  g U R                  U5        SUl         [
        R                  U   n[        USS 5      nUbI  [        US5          U" 5         UR                  (       a   [        R                  " 5         [        US5        g g ! [         a     g f = f! [         a:  n[        U[        5      (       a  e SUl        U R                  X'SU5         S nANS nAff = f! [         a  nU R                  X'SU5         S nANS nAff = f! [        US5        f = f)NFsetUpModulerx   Tr{   )r   r$   r^   rn   rh   sysmodulesKeyErrorr   r   r|   r*   rr   r}   r   doModuleCleanups)r   r6   rL   r   currentModulemoduler   r   s           r   rk   TestSuite._handleModuleFixture   sN   226:11*""6* %*!	[[/F fmT:"FN3:KM ,,O--/  (89) #  		 ! K!&,7704F-;;F<I<IK K	K % O??@M@MO OO
  (89sf   B4 8C ?D5 D 4
C C
D0D>D5 DD5 
D2D-(D5 -D22D5 5ENc                 8    U SU S3nU R                  XXe5        g )Nz ())_addClassOrModuleLevelException)r   rL   excmethod_namer   rz   	errorNames          r   r}   ,TestSuite._createClassOrModuleLevelException   s$    "m2fXQ/	,,V)Jr   c                    [        U5      n[        USS 5      nUb2  [        U[        R                  5      (       a  U" U[        U5      5        g U(       d&  UR                  U[        R                  " 5       5        g UR                  XT5        g )NaddSkip)	_ErrorHolderr   r*   r   SkipTestrE   addErrorr   r   )r   rL   	exceptionr   rz   errorr   s          r   r   )TestSuite._addClassOrModuleLevelException   sa    Y'&)T2:i#G#GE3y>*s||~6,r   c                 J   U R                  U5      nUc  g UR                  (       a  g  [        R                  U   n[        US5         [        USS 5      nUb   U" 5          [        R                  " 5         [        US5        g ! [         a     g f = f! [         a3  n[        U[        5      (       a  e U R                  XSU5         S nANkS nAff = f! [         a3  n[        U[        5      (       a  e U R                  XSU5         S nANS nAff = f! [        US5        f = f)Nrx   tearDownModuler{   )r   rh   r   r   r   r   r   r|   r*   rr   r}   r   r   )r   rL   r   r   r   r   s         r   rn   TestSuite._handleModuleTearDown   s-   226:!$$	[[0F 	/	6$V-=tDN)L"$H%%' F$451  		 ! L!&,77;;F<L<JL LL  Hfl33778H8FH HH F$45se   B 	D B "C 
BB
C)CD CD 
D)DD DD D"c           	         [        USS 5      nUR                  nXC:X  d  Uc  g [        USS5      (       a  g [        USS5      (       a  g [        USS5      (       a  g [        USS 5      n[        USS 5      nUc  Uc  g [        US5         Ub   U" 5         Ub_  U" 5         UR                   HH  n	[	        U[
        5      (       a  U	S	   e[        R                  " U5      nU R                  X)S	   SUU	S
9  MJ     [        US5        g ! [         aI  n[	        U[
        5      (       a  e [        R                  " U5      nU R                  X'SU5         S nANS nAff = f! [        US5        f = f)Nrm   rg   Frh   ru   tearDownClassrw   rx   r   ry   r{   )
r   r$   r   r|   r*   rr   r   r#   r}   r~   )
r   r6   rL   r   r   r   rw   r   r   r   s
             r   rj    TestSuite._tearDownPreviousClass  s}   (<dC~~(M,A="5u==6/77="5u==E!-1BDI _%</	6(G!O *! - A AH!&,77&qk) $m <I;;FQK<K<EAI < K	 !B F$45% ! G!&,77 $m <I;;F<K<EG G	G$ F$45s7   
E D A"E 
E?EE EE E(r
   )Fr	   )r]   r^   r_   r`   ra   rN   r[   rl   r   rk   r}   r   rn   rj   rb   r
   r   r   r   r   \   sC    B,:\#:L 9=K .2
-!6F(6r   c                   L    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rSrg)r   iH  z
Placeholder for a TestCase inside a result. As far as a TestResult
is concerned, this looks exactly like a unit test. Used to insert
arbitrary errors into a test suite run.
Nc                     Xl         g r	   description)r   r   s     r   r   _ErrorHolder.__init__T  s    &r   c                     U R                   $ r	   r   r&   s    r   id_ErrorHolder.idW  s    r   c                     g r	   r
   r&   s    r   shortDescription_ErrorHolder.shortDescriptionZ  s    r   c                 $    SU R                   < S3$ )Nz<ErrorHolder description=r"   r   r&   s    r   r'   _ErrorHolder.__repr__]  s    151A1ACCr   c                 "    U R                  5       $ r	   )r   r&   s    r   __str___ErrorHolder.__str__`  s    wwyr   c                     g r	   r
   r   rL   s     r   rN   _ErrorHolder.runc  s     	r   c                 $    U R                  U5      $ r	   rT   r   s     r   rW   _ErrorHolder.__call__h  s    xxr   c                     gr   r
   r&   s    r   r4   _ErrorHolder.countTestCasesk  s    r   r   )r]   r^   r_   r`   ra   failureExceptionr   r   r   r'   r   rN   rW   r4   rb   r
   r   r   r   r   H  s8     ' D
 r   r   c                 <     [        U 5        g! [         a     gf = f)z?A crude way to tell apart testcases and suites with duck-typingTF)r0   r:   )r6   s    r   ri   ri   n  s'    T
   s    
c                   $    \ rS rSrSrSrSrSrSrg)rr   iw  zCUsed by the TestSuite to hold previous class when running in debug.NFr
   )	r]   r^   r_   r`   ra   rm   rh   rI   rb   r
   r   r   rr   rr   w  s    IJr   rr   )ra   r    r   r   
__unittestr   objectr   r   r   ri   rr   r
   r   r   <module>r      sW     
  

IF IXi6 i6X$6 $L6 r   