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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.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Zdd„ Zdd„ ZdS )zTest_TestProgram.FooBarLoaderz3Test loader that returns a suite containing FooBar.c                 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$   Ú__doc__r>   r@   r   r   r   r   ÚFooBarLoaderA   s   rB   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&   rB   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%   rC   Fr   zunittest.test2rD   rG   rK   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   rI   r/   rF   r   ú
FAIL: testFail ú

FAILED (failures=1)
)
r   r   ÚmainÚTextTestRunnerrB   r   ÚhasattrÚassertInÚgetvalueÚendswith)r
   rP   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 )NrN   rO   T)rI   r/   r0   rF   rQ   rR   ©r   ÚassertRaisesÚ
SystemExitr   rS   rT   rB   rV   rW   r   rX   ©r
   rP   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 )NrN   rO   )rI   r/   rF   rQ   rR   rZ   r]   r   r   r   Útest_ExitAsDefaultƒ   s    
ûz#Test_TestProgram.test_ExitAsDefaultN)r"   r#   r$   r   r6   r   ÚTestCaser;   r   rB   rL   rM   rY   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   rE   Ú	tb_localsr/   r   ZdefaultTestLoaderrF   r=   ZprogNamer   rd   r   r   r   r   ra      s   ra   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 )Nrb   )r%   ÚinitArgsÚ
raiseErrorÚ	TypeError)r
   Úkwargsr   r   r   rd   ¤   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$   rf   r   rg   rd   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   )ra   r5   ÚcreateTestsr%   rf   r   rg   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--quietrb   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))Úbufferrp   )Úfailfastrq   )ZcatchÚ
catchbreakFé*   z-%sr   z--%sT)r.   )r5   Úsetattrr'   ÚassertIsÚgetattrr   Zcaptured_stderrr[   r\   r   Ú	exceptionr*   )r
   r5   ÚargÚattrZfalseÚtrueZ	short_optZlong_optrn   Ú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 )zTest the warnings argumentc                   @   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   NÚdefaultÚignore)ÚwarningsZ	somevalue)r   r&   rH   Ú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   rq   rp   r„   F)r1   rq   rp   re   r„   r   )r5   r%   r/   r1   rq   rp   r„   r€   r   rf   r   ru   r   rj   ©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/   rf   r€   ZassertIsNoner   r   ru   r   rj   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--localsTFrb   )rp   rq   re   r1   r„   )r5   r%   r/   r'   r   re   r€   rf   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   rq   rp   r   )r5   r%   rg   r/   r1   rq   rp   r   r€   r   rf   ru   r   rj   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)rH   ÚmodulesrŒ   r3   r   r5   rr   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•   rl   r'   r   rJ   ©r
   r5   rI   Ú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>rb   rš   ©r
   r5   rI   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•   rl   r'   r   rJ   )r
   r5   r©   rI   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>rb   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   rl   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   )Ústdoutr{   Úcwd)Ú
subprocessÚPopenrH   Ú
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*)rV   )r
   r»   r¾   r   r   r   Ú#testSelectedTestNamesFunctionalTest®  s    z7TestCommandLineArgs.testSelectedTestNamesFunctionalTestN)T)r"   r#   r$   rm   ro   r}   r†   rˆ   r‰   rŠ   r‹   r’   r•   r   r£   r¥   r«   r¬   r¯   r¿   r   r   r   r   rk   ¯   s"   &


	rk   rc   )Úior   rH   r²   r   r   r   Zunittest.testZunittest.test.test_resultr   r`   r   r&   ra   r2   rj   r%   rk   r"   rS   r   r   r   r   Ú<module>   s"      