a
    "h<                     @   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re  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 B/opt/python-3.9.21/usr/lib/python3.9/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$   s    z3Test_TestProgram.testNoExit.<locals>.FakeRunner.runN__name__
__module____qualname__r    r   r   r   r   
FakeRunner#   s   r%   c                      s    t j_d S r   )r   TestProgram	parseArgsr   )oldParseArgsr   r   restoreParseArgs+   s    z5Test_TestProgram.testNoExit.<locals>.restoreParseArgsc                  W   s   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   s    z/Test_TestProgram.testNoExit.<locals>.removeTestF   )
testRunnerexit	verbosity)	objectr   r&   r'   
addCleanupr   r   r   r1   )r
   r   r%   runnerr)   r-   programr   )r(   r   r   
testNoExit   s    

zTest_TestProgram.testNoExitc                   @   s   e Zd Zdd Zdd ZdS )zTest_TestProgram.FooBarc                 C   s   d S r   r   r
   r   r   r   testPass<   s    z Test_TestProgram.FooBar.testPassc                 C   s   t d S r   )AssertionErrorr7   r   r   r   testFail>   s    z Test_TestProgram.FooBar.testFailN)r"   r#   r$   r8   r:   r   r   r   r   FooBar;   s   r;   c                   @   s   e Zd Zdd Zdd ZdS )zTest_TestProgram.FooBarLoaderc                 C   s   |  | tjgS r   Z
suiteClassZloadTestsFromTestCaser   r;   )r
   moduler   r   r   loadTestsFromModuleC   s    z1Test_TestProgram.FooBarLoader.loadTestsFromModulec                 C   s   |  | tjgS r   r<   )r
   namesr=   r   r   r   loadTestsFromNamesG   s    z0Test_TestProgram.FooBarLoader.loadTestsFromNamesN)r"   r#   r$   r>   r@   r   r   r   r   FooBarLoaderA   s   rA   c                 C   sR   G dd dt }tj}dgt_| }tj|dd|  d}|t_| d|j d S )Nc                   @   s   e Zd Zdd ZdS )zATest_TestProgram.test_defaultTest_with_string.<locals>.FakeRunnerc                 S   s
   || _ dS r   r   r   r   r   r   r    M   s    zETest_TestProgram.test_defaultTest_with_string.<locals>.FakeRunner.runNr!   r   r   r   r   r%   L   s   r%   faketestFr   r/   r0   defaultTest
testLoader)r   r2   sysargvr   r&   rA   r   	testNamesr
   r%   Zold_argvr4   r5   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                   @   s   e Zd Zdd ZdS )zCTest_TestProgram.test_defaultTest_with_iterable.<locals>.FakeRunnerc                 S   s
   || _ dS r   r   r   r   r   r   r    \   s    zGTest_TestProgram.test_defaultTest_with_iterable.<locals>.FakeRunner.runNr!   r   r   r   r   r%   [   s   r%   rB   Fr   zunittest.test2rC   rF   rJ   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)r0   rH   r/   rE   r   
FAIL: testFail 

FAILED (failures=1)
)
r   r   mainTextTestRunnerrA   r   hasattrassertIngetvalueendswith)r
   rO   r5   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 )NrM   rN   T)rH   r/   r0   rE   rP   rQ   r   assertRaises
SystemExitr   rR   rS   rA   rU   rV   r   rW   r
   rO   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 )NrM   rN   )rH   r/   rE   rP   rQ   rY   r\   r   r   r   test_ExitAsDefault   s    
z#Test_TestProgram.test_ExitAsDefaultN)r"   r#   r$   r   r6   r   TestCaser;   r   rA   rK   rL   rX   r]   r^   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   s   d S r   r   )r
   r*   r   r   r   __init__   s    zInitialisableProgram.__init__)r"   r#   r$   r0   r   r1   rD   	tb_localsr/   r   ZdefaultTestLoaderrE   r=   ZprogNamer   rc   r   r   r   r   r`      s   r`   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 )Nra   )r%   initArgs
raiseError	TypeError)r
   kwargsr   r   r   rc      s    zFakeRunner.__init__c                 C   s
   |t _tS r   )r%   r   RESULTr   r   r   r   r       s    zFakeRunner.run)r"   r#   r$   re   r   rf   rc   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   s   d S r   r   r   r   r   r   r+      r,   z+TestCommandLineArgs.setUp.<locals>.<lambda>r   )r`   r5   createTestsr%   re   r   rf   r7   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 q6d S )N)z-qz--quietra   r   )z-vz	--verboser.   )r5   r1   r'   r   )r
   r5   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 ]0}t||d  |d |g | t||d t||d t J}	| t}
|d |g W d    n1 s00    Y  W d    n1 sP0    Y  | 	|
j
jd t||d t J}	| t}
|d |g W d    n1 s0    Y  W d    n1 s0    Y  | 	|
j
jd qq
d S )	N))bufferro   )failfastrp   )Zcatch
catchbreakF*   z-%sr   z--%sT)r.   )r5   setattrr'   assertIsgetattrr   Zcaptured_stderrrZ   r[   r   	exceptionr*   )r
   r5   argattrZfalsetrueZ	short_optZlong_optrm   stderrcmr   r   r   testBufferCatchFailfast   sB    
N
Nz+TestCommandLineArgs.testBufferCatchFailfastc              
   C   s   G dd dt j}tjd d  }zxg 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 < n|tjd d < 0 d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z/TestCommandLineArgs.testWarning.<locals>.FakeTPc                 _   s   d S r   r   r
   r*   kwr   r   r   r'      r,   z9TestCommandLineArgs.testWarning.<locals>.FakeTP.parseArgsc                 _   s   d S r   r   r}   r   r   r   runTests   r,   z8TestCommandLineArgs.testWarning.<locals>.FakeTP.runTestsN)r"   r#   r$   r'   r   r   r   r   r   FakeTP   s   r   defaultignore)warningsZ	somevalue)r   r&   rG   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 )Nr1   rp   ro   r   F)r1   rp   ro   rd   r   r   )r5   r%   r/   r1   rp   ro   r   r   r   re   r   rt   r   ri   r
   r5   r   r   r   testRunTestsRunnerClass   s    
z+TestCommandLineArgs.testRunTestsRunnerClassc                 C   sH   | j }t |_d t_|  | tj | tjd | |j	t
 d S )Nr   )r5   r%   r/   re   r   ZassertIsNoner   r   rt   r   ri   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--localsTFra   )ro   rp   rd   r1   r   )r5   r%   r/   r'   r   rd   r   re   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 )Nr.   r1   rp   ro   r   )r5   r%   rf   r/   r1   rp   ro   r   r   r   re   rt   r   ri   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   )r=   originalr   r   restoreE  s    zBTestCommandLineArgs.testCatchBreakInstallsHandler.<locals>.restoreFc                      s
   d _ d S r   )	installedr   r7   r   r   fakeInstallHandlerJ  s    zMTestCommandLineArgs.testCatchBreakInstallsHandler.<locals>.fakeInstallHandlerT)rG   modulesr   r3   r   r5   rq   r%   r/   r   r   )r
   r   r   r5   r   )r=   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   )r?   r   r   isfileW  s    z1TestCommandLineArgs._patch_isfile.<locals>.isfilec                      s    t j_d S r   )r   r   r   r   )r   r   r   r   [  s    z2TestCommandLineArgs._patch_isfile.<locals>.restore)r   r   r   r3   )r
   r?   existsr   r   r   )r?   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   s   d S r   r   r   r   r   r   r+   f  r,   z<TestCommandLineArgs.testParseArgsFileNames.<locals>.<lambda>)foobarZbazr   r5   r   rk   r'   r   rI   r
   r5   rH   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   s   d S r   r   r   r   r   r   r+   t  r,   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   s   d S r   r   r   r   r   r   r+     r,   zCTestCommandLineArgs.testParseArgsNonExistentFiles.<locals>.<lambda>ra   r   r
   r5   rH   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   s   d S r   r   r   r   r   r   r+     r,   zRTestCommandLineArgs.testParseArgsAbsolutePathsThatCanBeConverted.<locals>.<lambda>r   r   )r   getcwdr5   r   rk   r'   r   rI   )r
   r5   r   rH   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   s   d S r   r   r   r   r   r   r+     r,   zUTestCommandLineArgs.testParseArgsAbsolutePathsThatCannotBeConverted.<locals>.<lambda>ra   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   s   d S r   r   r   r   r   r   r+     r,   zDTestCommandLineArgs.testParseArgsSelectedTestNames.<locals>.<lambda>)z*foo*z*bar*r   )r5   rk   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   sb   t jtjddg|  t jt jtjt	d}| |
 \}}W d    n1 sP0    Y  | S )Nz-mr   )stdoutrz   cwd)
subprocessPopenrG   
executableDEVNULLPIPEr   r   r   r   communicatedecode)r*   p_rz   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*)rU   )r
   r   r   r   r   r   #testSelectedTestNamesFunctionalTest  s    z7TestCommandLineArgs.testSelectedTestNamesFunctionalTestN)T)r"   r#   r$   rl   rn   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rj      s"   &


	rj   rb   )ior   rG   r   r   r   r   Zunittest.testZunittest.test.test_resultr   r_   r   r&   r`   r2   ri   r%   rj   r"   rR   r   r   r   r   <module>   s"      