a
    &Rî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r¤e ¡  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.24/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 s°0    Y  W d   ƒ n1 sÐ0    Y  |  	|
j
jd¡ q¸q
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"      