
    d4                         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dS )	TestSuite    N   )case)utilTc                 >    t          | |d           } |             d S )Nc                      d S N r
        lib/python3.11/unittest/suite.py<lambda>z!_call_if_exists.<locals>.<lambda>   s     r   )getattr)parentattrfuncs      r   _call_if_existsr      s$    64..DDFFFFFr   c                   Z    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dS )BaseTestSuitezNA simple test suite that doesn't provide class or module shared fixtures.
    Tr
   c                 L    g | _         d| _        |                     |           d S 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                 z    t          || j                  st          S t          |           t          |          k    S r	   )
isinstancer!   NotImplementedr"   )r   others     r   __eq__zBaseTestSuite.__eq__   s3    %00 	"!!DzzT%[[((r   c                 *    t          | j                  S r	   )iterr   r#   s    r   __iter__zBaseTestSuite.__iter__"   s    DK   r   c                 P    | j         }| D ]}|r||                                z  }|S r	   )r   countTestCases)r   casestests      r   r.   zBaseTestSuite.countTestCases%   s=    # 	/ 	/D /,,...r   c                 @   t          |          s/t          d                    t          |                              t	          |t
                    r0t          |t          j        t          f          rt          d          | j
                            |           d S )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,   s    ~~ 	E077T

CCDDDdD!! 	@j26-1K'M 'M 	@ ? @ @ @4     r   c                     t          |t                    rt          d          |D ]}|                     |           d S )Nz0tests must be an iterable of tests, not a string)r&   strr3   r;   )r   r   r0   s      r   r   zBaseTestSuite.addTests6   sR    eS!! 	PNOOO 	 	DLL	 	r   c                     t          |           D ]5\  }}|j        r n( ||           | j        r|                     |           6|S r	   )	enumerate
shouldStop_cleanup_removeTestAtIndex)r   resultindexr0   s       r   runzBaseTestSuite.run<   s\    $T?? 	/ 	/KE4  DLLL} /''...r   c                     	 | j         |         }t          |d          r"| xj        |                                z  c_        d| j         |<   dS # t          $ r Y dS 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':':'<'<<##!%DK  	 	 	DD	s   A 
AAc                      | j         |i |S r	   rE   )r   argskwdss      r   __call__zBaseTestSuite.__call__S   s    tx&&&&r   c                 8    | D ]}|                                  dS )7Run the tests without collecting errors in a TestResultN)debugr:   s     r   rO   zBaseTestSuite.debugV   s*     	 	DJJLLLL	 	r   N)r
   )__name__
__module____qualname____doc__rA   r   r$   r)   r,   r.   r;   r   rE   rB   rL   rO   r
   r   r   r   r      s         H   
M M M) ) )
! ! !  ! ! !    & & &' ' '    r   r   c                   R    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dS )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.
    Fc                 l   d}t          |dd          du r	dx|_        }t          |           D ]\  }}|j        r nt	          |          rv|                     ||           |                     ||           |                     ||           |j        |_	        t          |j        dd          st          |dd          r|s ||           n|
                                 | j        r|                     |           |r2|                     d |           |                     |           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   sb   6,e44==044F"X$T?? 	/ 	/KE4  4   ++D&999))$777&&tV444,0N)DN,?GG F$8%@@ V

} /''... 	+''f555&&v...%*F"r   c                 N    t                      }|                     |d           dS )rN   TN)_DebugResultrE   )r   rO   s     r   rO   zTestSuite.debug   s%    r   c                    t          |dd           }|j        }||k    rd S |j        rd S t          |dd          rd S d}	 d|_        n# t          $ r Y nw xY wt          |dd           }t          |dd           }|t          |d           	 	  |             nt# t          $ rg}t          |t                    r d}	 d|_        n# t          $ r Y nw xY wt          j
        |          }	|                     ||d|	           Y d }~nd }~ww xY w|r6|4 |             |j        D ]"}
|                     ||
d         d|	|
	           #t          |d
           d S # t          |d
           w xY wd S )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   s8   (<dCC~=((F$ 	F<!4e<< 	F	-2L** 	 	 	 D	
 \<>>
!,0A4HH!FN333:GJLLLL  G G G!&,77 !F9=66$    $l ; ;I;;FA<H<EG G G G G G G GG  /o9#O%%%$0$D / /?? &\9%- @ / / / /  (899999(899991 "!sf    A 
AA
B E 
D
#D<CD
CDC/D E D

;E 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C$*5Nr   c                    |                      |          }|j        j        }||k    rd S |                     |           d|_        	 t
          j        |         }n# t          $ r Y d S w xY wt          |dd           }|t          |d           	 	  |             nL# t          $ r?}t          |t                    r d|_        |                     ||d|           Y d }~nd }~ww xY w|j        rD	 t          j                     n/# t          $ r"}|                     ||d|           Y d }~nd }~ww xY wt          |d           d S # t          |d           w xY wd S )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   s   226::1N**F""6*** %*!	[/FF 	 	 	FF	fmT::"FN333:KKMMMM  K K K!&,77 04F-;;FA<I<IK K K K K K K K	K , OO-////$ O O O??@M@MO O O O O O O OO
  (899999(89999) #"sl   A 
A('A(
B E 
C$%5CE C$$
E /D E 
D/D*%E *D//E ENc                 F    | d| d}|                      ||||           d S )Nz ())_addClassOrModuleLevelException)r   rC   excmethod_namer   rh   	errorNames          r   rk   z,TestSuite._createClassOrModuleLevelException   s8    "//f///	,,VS)TJJJJJr   c                 6   t          |          }t          |dd           }|5t          |t          j                  r ||t          |                     d S |s)|                    |t          j                               d S |                    ||           d S )NaddSkip)	_ErrorHolderr   r&   r   SkipTestr=   addErrorrx   rr   )r   rC   	exceptionr   rh   errorr   s          r   r   z)TestSuite._addClassOrModuleLevelException   s    Y''&)T22:i#G#GGE3y>>***** -s|~~66666t,,,,,r   c                 |   |                      |          }|d S |j        rd S 	 t          j        |         }n# t          $ r Y d S w xY wt          |d           	 t          |dd           }|Q	  |             nE# t          $ r8}t          |t                    r | 
                    ||d|           Y d }~nd }~ww xY w	 t          j                     nE# t          $ r8}t          |t                    r | 
                    ||d|           Y d }~nd }~ww xY wt          |d           d S # 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::!F$ 	F	[0FF 	 	 	FF	 	///	6$V-=tDDN)L"N$$$$  L L L!&,77 ;;FA<L<JL L L L L L L LLH%'''' H H Hfl33 778H8FH H H H H H H HH F$455555OF$45555so   7 
AAD) -
A8 7D) 8
B:.B50D) 5B::D) >C D) 
D.D
D) DD) )D;c                    t          |dd           }|j        }||k    s|d S t          |dd          rd S t          |dd          rd S t          |dd          rd S t          |dd           }t          |dd           }||d S t          |d           	 |e	  |             nY# t          $ rL}t	          |t
                    r t          j        |          }|                     ||d|           Y d }~nd }~ww xY w|e |             |j	        D ]S}	t	          |t
                    r|	d	         t          j        |          }|                     ||	d	         d||	
           Tt          |d           d S # 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  s%   (<dCC~=((M,AF="5u== 	F6/77 	F="5u== 	FEE!-1BDII _%<F///	6(G!MOOOO  G G G!&,77  $m < <I;;FA<K<EG G G G G G G G	G *!!! - A K KH!&,77 *&qk) $m < <I;;FHQK<K<EAI < K K K K
 F$455555OF$45555s8   E5 
B# "E5 #
C9-AC4/E5 4C99A*E5 5F)Fr	   )rP   rQ   rR   rS   rE   rO   r\   ru   r[   rk   r   r^   rZ   r
   r   r   r   r   \   s            B  ,: ,: ,:\  #: #: #:L 9=K K K K .2
- 
- 
- 
-!6 !6 !6F(6 (6 (6 (6 (6r   c                   F    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S )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                     || _         d S 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                     d S r	   r
   r#   s    r   shortDescriptionz_ErrorHolder.shortDescriptionZ  s    tr   c                     d| j         dS )Nz<ErrorHolder description=r   r   r#   s    r   r$   z_ErrorHolder.__repr__]  s     151A1A1ACCr   c                 *    |                                  S r	   )r   r#   s    r   __str__z_ErrorHolder.__str__`  s    wwyyr   c                     d S r	   r
   r   rC   s     r   rE   z_ErrorHolder.runc  s	     	r   c                 ,    |                      |          S r	   rI   r   s     r   rL   z_ErrorHolder.__call__h  s    xxr   c                     dS r   r
   r#   s    r   r.   z_ErrorHolder.countTestCasesk  s    qr   )rP   rQ   rR   rS   failureExceptionr   r   r   r$   r   rE   rL   r.   r
   r   r   r   r   H  s          ' ' '       D D D    
         r   r   c                 J    	 t          |            n# t          $ r Y dS w xY wdS )z?A crude way to tell apart testcases and suites with duck-typingTF)r+   r3   )r0   s    r   rY   rY   n  s;    T



   tt5s    
  c                       e Zd ZdZdZdZdZdS )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IJJJr   ra   )rS   rx    r   r   
__unittestr   objectr   r   r   rY   ra   r
   r   r   <module>r      s    



            
  
I I I I IF I I IXi6 i6 i6 i6 i6 i6 i6 i6X$ $ $ $ $6 $ $ $L      6     r   