
    Rh4                         d Z ddlZddlmZ ddlmZ dZd Z G d d	e      Z G d
 d e      Z	 G d de      Z
d Z G d de      Zy)	TestSuite    N   )case)utilTc                 .    t        | |d       } |        y )Nc                       y N r
       %/usr/lib/python3.12/unittest/suite.py<lambda>z!_call_if_exists.<locals>.<lambda>   s    r   )getattr)parentattrfuncs      r   _call_if_existsr      s    64.DFr   c                   X    e Zd ZdZdZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)BaseTestSuitezNA simple test suite that doesn't provide class or module shared fixtures.
    Tc                 B    g | _         d| _        | j                  |       y Nr   )_tests_removed_testsaddTests)selftestss     r   __init__zBaseTestSuite.__init__   s    er   c                 `    dt        j                  | j                        dt        |       dS )N<z tests=>)r   strclass	__class__listr   s    r   __repr__zBaseTestSuite.__repr__   s    "&--"?dLLr   c                 h    t        || j                        st        S t        |       t        |      k(  S r	   )
isinstancer!   NotImplementedr"   )r   others     r   __eq__zBaseTestSuite.__eq__   s)    %0!!DzT%[((r   c                 ,    t        | j                        S r	   )iterr   r#   s    r   __iter__zBaseTestSuite.__iter__"   s    DKK  r   c                 X    | j                   }| D ]  }|s||j                         z  } |S r	   )r   countTestCases)r   casestests      r   r.   zBaseTestSuite.countTestCases%   s9    ## 	/D,,..	/ r   c                    t        |      s#t        dj                  t        |                  t	        |t
              r+t        |t        j                  t        f      rt        d      | j                  j                  |       y )Nz{} is not callablezNTestCases and TestSuites must be instantiated before passing them to addTest())callable	TypeErrorformatreprr&   type
issubclassr   TestCaser   r   appendr   r0   s     r   addTestzBaseTestSuite.addTest,   sj    ~077T
CDDdD!j26--1K'M ? @ @4 r   c                 j    t        |t              rt        d      |D ]  }| j                  |        y )Nz0tests must be an iterable of tests, not a string)r&   strr3   r;   )r   r   r0   s      r   r   zBaseTestSuite.addTests6   s3    eS!NOO 	DLL	r   c                     t        |       D ]:  \  }}|j                  r |S  ||       | j                  s*| j                  |       < |S r	   )	enumerate
shouldStop_cleanup_removeTestAtIndex)r   resultindexr0   s       r   runzBaseTestSuite.run<   sQ    $T? 	/KE4    L}}''.	/ r   c                     	 | j                   |   }t        |d      r#| xj                  |j                         z  c_        d| j                   |<   y# t        $ r Y yw xY w)z2Stop holding a reference to the TestCase at index.r.   N)r   hasattrr   r.   r3   )r   rD   r0   s      r   rB   z BaseTestSuite._removeTestAtIndexE   s^    
	&;;u%D t-.##t':':'<<#!%DKK  		s   A 	AAc                 &     | j                   |i |S r	   rE   )r   argskwdss      r   __call__zBaseTestSuite.__call__S   s    txx&&&r   c                 2    | D ]  }|j                           y)7Run the tests without collecting errors in a TestResultN)debugr:   s     r   rO   zBaseTestSuite.debugV   s     	DJJL	r   N)r
   )__name__
__module____qualname____doc__rA   r   r$   r)   r,   r.   r;   r   rE   rB   rL   rO   r
   r   r   r   r      sD    H
M)
!!&'r   r   c                   P    e Zd ZdZddZd Zd Zd Zd Z	 ddZ		 dd	Z
d
 Zd Zy)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                 4   d}t        |dd      du r	dx|_        }t        |       D ]  \  }}|j                  r nt	        |      rl| j                  ||       | j                  ||       | j                  ||       |j                  |_	        t        |j                  dd      st        |dd      r|s	 ||       n|j                          | j                  s| j                  |        |r*| j                  d |       | j                  |       d|_        |S )NF_testRunEnteredT_classSetupFailed_moduleSetUpFailed)r   rV   r?   r@   _isnotsuite_tearDownPreviousClass_handleModuleFixture_handleClassSetUpr!   _previousTestClassrO   rA   rB   _handleModuleTearDown)r   rC   rO   topLevelrD   r0   s         r   rE   zTestSuite.runf   s   6,e4=044F"X$T? 	/KE4  4 ++D&9))$7&&tV4,0NN)DNN,?GF$8%@V

}}''.)	/, ''f5&&v.%*F"r   c                 <    t               }| j                  |d       y)rN   TN)_DebugResultrE   )r   rO   s     r   rO   zTestSuite.debug   s    r   c                    t        |dd       }|j                  }||k(  ry |j                  ry t        |dd      ry d}	 d|_        t        |dd       }t        |dd       }|Wt        |d       	 	  |        |r3|1 |        |j                  D ]  }
| j                  ||
d   d	|
	        t        |d
       y y # t        $ r Y w xY w# t        $ r^}t        |t              r d}	 d|_        n# t        $ r Y nw xY wt        j                  |      }	| j                  ||d|	       Y d }~d }~ww xY w# t        |d
       w xY w)Nr]   __unittest_skip__F
setUpClassdoClassCleanups_setupStdoutTr   info_restoreStdout)r   r!   rX   rW   r3   r   	Exceptionr&   ra   r   r    "_createClassOrModuleLevelExceptiontearDown_exceptions)r   r0   rC   previousClasscurrentClassfailedrd   re   e	classNameexc_infos              r   r\   zTestSuite._handleClassSetUp   s   (<dC~~=($$<!4e<	-2L* \<>
!,0A4H!FN3:GL o9#%$0$D$D /?? &\9%- @ //
  (891 "  	 	 ! G!&,7!F9=6$  $l ;I;;FA<H<EG GG&  (89se   B9 /C 65D2 9	CC	D/D*%C-,D*-	C96D*8C99,D*%D2 *D//D2 2E c                 @    d }t        |dd       }||j                  }|S )Nr]   )r   rQ   )r   rC   previousModulerm   s       r   _get_previous_modulezTestSuite._get_previous_module   s-    (<dC$*55Nr   c                 r   | j                  |      }|j                  j                  }||k(  ry | j                  |       d|_        	 t
        j                  |   }t        |dd       }|Ct        |d       	 	  |        |j                  r	 t        j                          t        |d       y y # t        $ r Y y w xY w# t        $ r6}t        |t              r d|_        | j                  ||d|       Y d }~xd }~ww xY w# t        $ r}| j                  ||d|       Y d }~d }~ww xY w# t        |d       w xY w)NFsetUpModulerf   Tri   )ru   r!   rQ   r^   rX   sysmodulesKeyErrorr   r   rj   r&   ra   rk   r   doModuleCleanups)r   r0   rC   rt   currentModulemodulerw   rp   s           r   r[   zTestSuite._handleModuleFixture   sQ   226:11N*""6* %*!	[[/F fmT:"FN3:KM ,,O--/  (89) #  		 ! K!&,704F-;;FA<I<IK K	K % O??@M@MO OO
  (89sf   B- 7B< >D( C> -	B98B9<	C;,C61D( 6C;;D( >	D%D D(  D%%D( (D6Nc                 <    | d| d}| j                  ||||       y )Nz ())_addClassOrModuleLevelException)r   rC   excmethod_namer   rh   	errorNames          r   rk   z,TestSuite._createClassOrModuleLevelException   s(    "m2fXQ/	,,VS)TJr   c                    t        |      }t        |dd       }|-t        |t        j                        r ||t        |             y |s%|j                  |t        j                                y |j                  ||       y )NaddSkip)	_ErrorHolderr   r&   r   SkipTestr=   addErrorrx   rr   )r   rC   	exceptionr   rh   errorr   s          r   r   z)TestSuite._addClassOrModuleLevelException   s`    Y'&)T2:i#GE3y>*s||~6t,r   c                 $   | j                  |      }|y |j                  ry 	 t        j                  |   }t        |d       	 t        |dd       }|	  |        	 t        j                          t        |d       y # t        $ r Y y w xY w# t        $ r/}t        |t              r | j                  ||d|       Y d }~dd }~ww xY w# t        $ r/}t        |t              r | j                  ||d|       Y d }~d }~ww xY w# t        |d       w xY w)Nrf   tearDownModuleri   )ru   rX   rx   ry   rz   r   r   rj   r&   ra   rk   r   r{   )r   rC   rt   r}   r   rp   s         r   r^   zTestSuite._handleModuleTearDown   s+   226:!$$	[[0F 	/	6$V-=tDN)L"$H%%' F$451  		 ! L!&,7;;FA<L<JL LL  Hfl3778H8FH HH F$45se   A< D B C <	BB	C%B>9D >CD 	C>%C94D 9C>>D Dc                    t        |dd       }|j                  }||k(  s|y t        |dd      ry t        |dd      ry t        |dd      ry t        |dd       }t        |dd       }||y t        |d       	 |	  |        |[ |        |j                  D ]E  }	t	        |t
              r|	d	   t        j                  |      }| j                  ||	d	   d||	
       G t        |d       y # t        $ rD}t	        |t
              r t        j                  |      }| j                  ||d|       Y d }~d }~ww xY w# t        |d       w xY w)Nr]   rW   FrX   rc   tearDownClassre   rf   r   rg   ri   )
r   r!   r   rj   r&   ra   r   r    rk   rl   )
r   r0   rC   rm   rn   r   re   rp   rq   rr   s
             r   rZ   z TestSuite._tearDownPreviousClass  sz   (<dC~~=(M,A="5u=6/7="5u=E!-1BDI _%</	6(G!O *! - A A KH!&,7&qk) $m <I;;FHQK<K<EAI < K	K F$45% ! G!&,7 $m <I;;FA<K<EG G	G$ F$45s7   8D< ;C, AD< ,	D95:D4/D< 4D99D< <E
)Fr	   )rP   rQ   rR   rS   rE   rO   r\   ru   r[   rk   r   r^   rZ   r
   r   r   r   r   \   sC    B,:\#:L 9=K .2
-!6F(6r   c                   D    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)r   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                     || _         y r	   description)r   r   s     r   r   z_ErrorHolder.__init__T  s
    &r   c                     | j                   S r	   r   r#   s    r   idz_ErrorHolder.idW  s    r   c                      y r	   r
   r#   s    r   shortDescriptionz_ErrorHolder.shortDescriptionZ  s    r   c                 "    d| j                   dS )Nz<ErrorHolder description=r   r   r#   s    r   r$   z_ErrorHolder.__repr__]  s    151A1ACCr   c                 "    | j                         S r	   )r   r#   s    r   __str__z_ErrorHolder.__str__`  s    wwyr   c                      y r	   r
   r   rC   s     r   rE   z_ErrorHolder.runc  s     	r   c                 $    | j                  |      S r	   rI   r   s     r   rL   z_ErrorHolder.__call__h  s    xxr   c                      yr   r
   r#   s    r   r.   z_ErrorHolder.countTestCasesk  s    r   )rP   rQ   rR   rS   failureExceptionr   r   r   r$   r   rE   rL   r.   r
   r   r   r   r   H  s8     ' D
 r   r   c                 :    	 t        |        y# t        $ r Y yw xY w)z?A crude way to tell apart testcases and suites with duck-typingTF)r+   r3   )r0   s    r   rY   rY   n  s'    T
   s    	c                       e Zd ZdZdZdZdZy)ra   zCUsed by the TestSuite to hold previous class when running in debug.NF)rP   rQ   rR   rS   r]   rX   r@   r
   r   r   ra   ra   w  s    IJr   ra   )rS   rx    r   r   
__unittestr   objectr   r   r   rY   ra   r
   r   r   <module>r      sW     
  

IF IXi6 i6X$6 $L6 r   