o
    KXh<                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 G dd dej
ZG dd dejZe ZG dd	 d	eZG d
d dej
ZedkrTe  dS dS )    N)support)BufferedWriterc                   @   sh   e Zd Zdd Zdd ZG dd dejZG dd dejZ	d	d
 Z
dd Zdd Zdd Zdd ZdS )Test_TestProgramc                    sj   t  }gtjtjt jj d_ fdd}||_	|
d}j |j d S )NFc                    s   d_ |   S NT)wasRunassertEqual)Z	start_dirpatternZexpectedPathselfZtests D/opt/python-3.10.19/usr/lib/python3.10/unittest/test/test_program.py_find_tests   s   zETest_TestProgram.test_discovery_from_dotted_path.<locals>._find_testsunittest.test)unittest
TestLoaderospathabspathdirnametest__file__r   r   discover
assertTruer   Z_tests)r
   loaderr   Zsuiter   r	   r   test_discovery_from_dotted_path   s   
z0Test_TestProgram.test_discovery_from_dotted_pathc                    s   t  t  }G fdddt }| }tjj  fdd}dd tj_| | dd }|tj_| | tj|d	d
d}| |j | |j| | |jd
 d S )Nc                       s   e Zd Z fddZdS )z/Test_TestProgram.testNoExit.<locals>.FakeRunnerc                    s
   || _  S Nr   r
   r   resultr   r   run$      z3Test_TestProgram.testNoExit.<locals>.FakeRunner.runN__name__
__module____qualname__r    r   r   r   r   
FakeRunner#   s    r&   c                          t j_d S r   )r   TestProgram	parseArgsr   )oldParseArgsr   r   restoreParseArgs+      z5Test_TestProgram.testNoExit.<locals>.restoreParseArgsc                  W      d S r   r   )argsr   r   r   <lambda>-       z-Test_TestProgram.testNoExit.<locals>.<lambda>c                   S   s
   t j`d S r   )r   r(   r   r   r   r   r   
removeTest0      
z/Test_TestProgram.testNoExit.<locals>.removeTestF   )
testRunnerexit	verbosity)	objectr   r(   r)   
addCleanupr   r   r   r6   )r
   r   r&   runnerr+   r1   programr   )r*   r   r   
testNoExit   s   

zTest_TestProgram.testNoExitc                   @      e Zd Zdd Zdd ZdS )zTest_TestProgram.FooBarc                 C   r-   r   r   r
   r   r   r   testPass<      z Test_TestProgram.FooBar.testPassc                 C   s   t r   )AssertionErrorr=   r   r   r   testFail>   r?   z Test_TestProgram.FooBar.testFailN)r#   r$   r%   r>   rA   r   r   r   r   FooBar;   s    rB   c                   @   s   e Zd Z	 dd Zdd ZdS )zTest_TestProgram.FooBarLoaderc                 C      |  | tjgS r   Z
suiteClassZloadTestsFromTestCaser   rB   )r
   moduler   r   r   loadTestsFromModuleC      z1Test_TestProgram.FooBarLoader.loadTestsFromModulec                 C   rC   r   rD   )r
   namesrE   r   r   r   loadTestsFromNamesG   rG   z0Test_TestProgram.FooBarLoader.loadTestsFromNamesN)r#   r$   r%   rF   rI   r   r   r   r   FooBarLoaderA   s    rJ   c                 C   sR   G dd dt }tj}dgt_| }tj|dd|  d}|t_| d|j d S )Nc                   @      e Zd Zdd ZdS )zATest_TestProgram.test_defaultTest_with_string.<locals>.FakeRunnerc                 S   
   || _ dS r   r   r   r   r   r   r    M   r!   zETest_TestProgram.test_defaultTest_with_string.<locals>.FakeRunner.runNr"   r   r   r   r   r&   L       r&   faketestFr   r4   r5   defaultTest
testLoader)r   r7   sysargvr   r(   rJ   r   	testNamesr
   r&   Zold_argvr9   r:   r   r   r   test_defaultTest_with_stringK   s   z-Test_TestProgram.test_defaultTest_with_stringc                 C   sZ   G dd dt }tj}dgt_| }tj|dddg|  d}|t_| ddg|j d S )Nc                   @   rK   )zCTest_TestProgram.test_defaultTest_with_iterable.<locals>.FakeRunnerc                 S   rL   r   r   r   r   r   r   r    \   r!   zGTest_TestProgram.test_defaultTest_with_iterable.<locals>.FakeRunner.runNr"   r   r   r   r   r&   [   rM   r&   rN   Fr   zunittest.test2rO   rR   rV   r   r   r   test_defaultTest_with_iterableZ   s   
z/Test_TestProgram.test_defaultTest_with_iterablec                 C   s^   t  }tjddgtj|d|  d}| t|d | d|  | | 	d d S )NFfoobarstream)r5   rT   r4   rQ   r   
FAIL: testFail 

FAILED (failures=1)
)
r   r   mainTextTestRunnerrJ   r   hasattrassertIngetvalueendswith)r
   r[   r:   r   r   r   test_NonExitk   s   
zTest_TestProgram.test_NonExitc                 C   sT   t  }| jttjdgtj|dd|  d | d|  | 	| 
d d S )NrY   rZ   T)rT   r4   r5   rQ   r\   r]   r   assertRaises
SystemExitr   r^   r_   rJ   ra   rb   r   rc   r
   r[   r   r   r   	test_Exitv   s   
zTest_TestProgram.test_Exitc                 C   sR   t  }| jttjdgtj|d|  d | d|  | 	| 
d d S )NrY   rZ   )rT   r4   rQ   r\   r]   re   rh   r   r   r   test_ExitAsDefault   s   
z#Test_TestProgram.test_ExitAsDefaultN)r#   r$   r%   r   r;   r   TestCaserB   r   rJ   rW   rX   rd   ri   rj   r   r   r   r   r      s    
r   c                   @   s>   e Zd ZdZdZdZdZdZdZe	j
ZdZdZdZdd ZdS )InitialisableProgramFN   __main__r   c                 G   r-   r   r   )r
   r.   r   r   r   __init__   r?   zInitialisableProgram.__init__)r#   r$   r%   r5   r   r6   rP   	tb_localsr4   r   ZdefaultTestLoaderrQ   rE   ZprogNamer   ro   r   r   r   r   rl      s    rl   c                   @   s(   e Zd ZdZdZdZdd Zdd ZdS )r&   Nr   c                 K   s"   |t _t jrt  jd8  _td S )Nrm   )r&   initArgs
raiseError	TypeError)r
   kwargsr   r   r   ro      s
   zFakeRunner.__init__c                 C   s
   |t _tS r   )r&   r   RESULTr   r   r   r   r       r!   zFakeRunner.run)r#   r$   r%   rq   r   rr   ro   r    r   r   r   r   r&      s    r&   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zd%ddZdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )&TestCommandLineArgsc                 C   s*   t  | _dd | j_d t_d t_dt_d S )Nc                   S   r-   r   r   r   r   r   r   r/      r0   z+TestCommandLineArgs.setUp.<locals>.<lambda>r   )rl   r:   createTestsr&   rq   r   rr   r=   r   r   r   setUp   s
   
zTestCommandLineArgs.setUpc                 C   sb   | j }dD ]}d|_|d |g | |jd qdD ]}d|_|d |g | |jd qd S )N)z-qz--quietrm   r   )z-vz	--verboser3   )r:   r6   r)   r   )r
   r:   optr   r   r   testVerbosity   s   z!TestCommandLineArgs.testVerbosityc                 C   s  | j }dD ]\}}t||d  |d g | t||d g }t||| |d g | t||| dg}t||| |d g | t||| d|d  }d| }||fD ]}t||d  |d |g | t||d t||d t $}	| t}
|d |g W d    n1 sw   Y  W d    n1 sw   Y  | 	|
j
jd t||d t $}	| t}
|d |g W d    n1 sw   Y  W d    n1 sw   Y  | 	|
j
jd q[qd S )	N))bufferr{   )failfastr|   )Zcatch
catchbreakF*   z-%sr   z--%sT)r3   )r:   setattrr)   assertIsgetattrr   Zcaptured_stderrrf   rg   r   	exceptionr.   )r
   r:   argattrZfalsetrueZ	short_optZlong_optry   stderrcmr   r   r   testBufferCatchFailfast   sR   
 
 z+TestCommandLineArgs.testBufferCatchFailfastc              
   C   s   	 G dd dt j}tjd d  }z=g tjd d < | | jd | |ddjd dgtjd d < | | jd  | |ddjd W |tjd d < d S |tjd d < w )Nc                   @   r<   )z/TestCommandLineArgs.testWarning.<locals>.FakeTPc                 _   r-   r   r   r
   r.   kwr   r   r   r)      r0   z9TestCommandLineArgs.testWarning.<locals>.FakeTP.parseArgsc                 _   r-   r   r   r   r   r   r   runTests   r0   z8TestCommandLineArgs.testWarning.<locals>.FakeTP.runTestsN)r#   r$   r%   r)   r   r   r   r   r   FakeTP   s    r   defaultignore)warningsZ	somevalue)r   r(   rS   warnoptionsr   r   )r
   r   r   r   r   r   testWarning   s   "zTestCommandLineArgs.testWarningc              	   C   sf   | j }t|_d|_d|_d|_d|_|  | tj	dddddd | tj
d | |jt d S )Nr6   r|   r{   r   F)r6   r|   r{   rp   r   r   )r:   r&   r4   r6   r|   r{   r   r   r   rq   r   r   r   ru   r
   r:   r   r   r   testRunTestsRunnerClass   s   
z+TestCommandLineArgs.testRunTestsRunnerClassc                 C   sH   | j }t |_d t_|  | tj | tjd | |j	t
 d S )Nr   )r:   r&   r4   rq   r   ZassertIsNoner   r   r   r   ru   r   r   r   r   testRunTestsRunnerInstance  s   z.TestCommandLineArgs.testRunTestsRunnerInstancec              	   C   sN   | j }t|_|d dg | d|j |  | tjddddd d d S )Nz--localsTFrm   )r{   r|   rp   r6   r   )r:   r&   r4   r)   r   rp   r   rq   r   r   r   r   test_locals!  s   
zTestCommandLineArgs.test_localsc                 C   s`   | j }dt_t|_d|_d|_d|_d|_|  | 	tj
i  | 	tjd | |jt d S )Nr3   r6   r|   r{   r   )r:   r&   rr   r4   r6   r|   r{   r   r   r   rq   r   r   ru   r   r   r   r   testRunTestsOldRunnerClass.  s   z.TestCommandLineArgs.testRunTestsOldRunnerClassc                    sj   t jd   j fdd}| d_fdd}| _j}d|_t|_|	  
j d S )Nzunittest.mainc                      s
    _ d S r   )installHandlerr   )rE   originalr   r   restoreE  r2   zBTestCommandLineArgs.testCatchBreakInstallsHandler.<locals>.restoreFc                      s
   d _ d S r   )	installedr   r=   r   r   fakeInstallHandlerJ  r2   zMTestCommandLineArgs.testCatchBreakInstallsHandler.<locals>.fakeInstallHandlerT)rS   modulesr   r8   r   r:   r}   r&   r4   r   r   )r
   r   r   r:   r   )rE   r   r
   r   testCatchBreakInstallsHandlerB  s   

z1TestCommandLineArgs.testCatchBreakInstallsHandlerTc                    s6    fdd}t jj|t j_fdd}| | d S )Nc                    s   |  v S r   r   )r   )rH   r   r   isfileW  s   z1TestCommandLineArgs._patch_isfile.<locals>.isfilec                      r'   r   )r   r   r   r   )r   r   r   r   [  r,   z2TestCommandLineArgs._patch_isfile.<locals>.restore)r   r   r   r8   )r
   rH   existsr   r   r   )rH   r   r   _patch_isfileV  s
   z!TestCommandLineArgs._patch_isfilec                 C   sF   | j }g d}| | dd |_|| g d}| |j| d S )N)prognamezfoo.pyzbar.Pyzbaz.PYwing.txtc                   S   r-   r   r   r   r   r   r   r/   f  r0   z<TestCommandLineArgs.testParseArgsFileNames.<locals>.<lambda>)foobarZbazr   r:   r   rw   r)   r   rU   r
   r:   rT   expectedr   r   r   testParseArgsFileNames`  s   


z*TestCommandLineArgs.testParseArgsFileNamesc                 C   sF   | j }g d}| | dd |_|| ddg}| |j| d S )Nr   foo/bar/baz.pygreen\red.pyc                   S   r-   r   r   r   r   r   r   r/   t  r0   z<TestCommandLineArgs.testParseArgsFilePaths.<locals>.<lambda>foo.bar.baz	green.redr   r   r   r   r   testParseArgsFilePathso  s   


z*TestCommandLineArgs.testParseArgsFilePathsc                 C   sF   | j }g d}| g  dd |_|| | |j|dd   d S )Nr   c                   S   r-   r   r   r   r   r   r   r/     r0   zCTestCommandLineArgs.testParseArgsNonExistentFiles.<locals>.<lambda>rm   r   r
   r:   rT   r   r   r   testParseArgsNonExistentFiles{  s   


z1TestCommandLineArgs.testParseArgsNonExistentFilesc                    sd   t   | j} fdd}d|d|dg}| | dd |_|| dd	g}| |j| d S )
Nc                    s   t j | S r   )r   r   join)nameZcur_dirr   r   _join  s   zOTestCommandLineArgs.testParseArgsAbsolutePathsThatCanBeConverted.<locals>._joinr   r   r   c                   S   r-   r   r   r   r   r   r   r/     r0   zRTestCommandLineArgs.testParseArgsAbsolutePathsThatCanBeConverted.<locals>.<lambda>r   r   )r   getcwdr:   r   rw   r)   r   rU   )r
   r:   r   rT   r   r   r   r   ,testParseArgsAbsolutePathsThatCanBeConverted  s   


z@TestCommandLineArgs.testParseArgsAbsolutePathsThatCanBeConvertedc                 C   sF   | j }g d}| | dd |_|| | |j|dd   d S )N)r   z/foo/bar/baz.pyz/green/red.pyc                   S   r-   r   r   r   r   r   r   r/     r0   zUTestCommandLineArgs.testParseArgsAbsolutePathsThatCannotBeConverted.<locals>.<lambda>rm   r   r   r   r   r   /testParseArgsAbsolutePathsThatCannotBeConverted  s   


zCTestCommandLineArgs.testParseArgsAbsolutePathsThatCannotBeConvertedc                 C   s8   | j }g d}dd |_|| | |jg d d S )N)r   -kr   r   r   r   *pat*c                   S   r-   r   r   r   r   r   r   r/     r0   zDTestCommandLineArgs.testParseArgsSelectedTestNames.<locals>.<lambda>)z*foo*z*bar*r   )r:   rw   r)   r   ZtestNamePatternsr   r   r   r   testParseArgsSelectedTestNames  s
   

z2TestCommandLineArgs.testParseArgsSelectedTestNamesc                 C   s   dd }d}|  d||g |  d|dd|g |  d|g d |  d|dd	|g |  d|dd
|g |  d|dd|g |  d|dd|g |  d|dd|g d S )Nc                 S   sh   t jtjddg|  t jt jtjt	d}| |
 \}}W d    | S 1 s+w   Y  | S )Nz-mr   )stdoutr   cwd)
subprocessPopenrS   
executableDEVNULLPIPEr   r   r   r   communicatedecode)r.   p_r   r   r   r   run_unittest  s   
zMTestCommandLineArgs.testSelectedTestNamesFunctionalTest.<locals>.run_unittestZ_test_warningszRan 7 testsr   TestWarnings)r   z-pz*_test*r   r   zRan 2 testsftzRan 3 testsz*tz*test_warnings.*Warning*z
Ran 1 testz*test_warnings.*warning*)ra   )r
   r   r   r   r   r   #testSelectedTestNamesFunctionalTest  s   z7TestCommandLineArgs.testSelectedTestNamesFunctionalTestN)T)r#   r$   r%   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rv      s$    &


	rv   rn   )ior   rS   r   r   r   r   Zunittest.testZunittest.test.test_resultr   rk   r   r(   rl   r7   ru   r&   rv   r#   r^   r   r   r   r   <module>   s&       