Ë
    òT•j×.  ã                   ó€   — d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 dZ
dZdZd	Zd
„ Zd„ Zd„ Z G d„ de«      ZeZy)zUnittest main programé    Né   )ÚloaderÚrunner)ÚinstallHandlerTé   a  Examples:
  %(prog)s test_module               - run tests from test_module
  %(prog)s module.TestClass          - run tests from module.TestClass
  %(prog)s module.Class.test_method  - run specified test method
  %(prog)s path/to/test_file.py      - run tests from test_file.py
aF  Examples:
  %(prog)s                           - run default set of tests
  %(prog)s MyTestSuite               - run suite 'MyTestSuite'
  %(prog)s MyTestCase.testSomething  - run MyTestCase.testSomething
  %(prog)s MyTestCase                - run all 'test*' test methods
                                       in MyTestCase
c                 ó,  — t         j                  j                  | «      rô| j                  «       j	                  d«      rÕt         j                  j                  | «      rtt         j                  j                  | t        j                  «       «      }t         j                  j                  |«      s|j                  t         j                  «      r| S |} t         j                  j                  | «      d d j                  dd«      j                  dd«      S | S )Nz.pyéýÿÿÿú\ú.ú/)ÚosÚpathÚisfileÚlowerÚendswithÚisabsÚrelpathÚgetcwdÚ
startswithÚpardirÚnormpathÚreplace)ÚnameÚrel_paths     ú$/usr/lib/python3.12/unittest/main.pyÚ_convert_namer      s¹   € ô
 
‡w�w‡~�~�dÔ §
¡
£× 5Ñ 5°eÔ <Ü�7‰7�=‰=˜ÔÜ—w‘w—‘ t¬R¯Y©Y«[Ó9ˆHÜ�w‰w�}‰}˜XÔ&¨(×*=Ñ*=¼b¿i¹iÔ*HØ�ØˆDô �w‰w×Ñ Ó% c rÐ*×2Ñ2°4¸Ó=×EÑEÀcÈ3ÓOÐOØ€Kó    c                 ó>   — | D �cg c]  }t        |«      ‘Œ c}S c c}w ©N)r   )Únamesr   s     r   Ú_convert_namesr!   /   s   € Ø,1Ö2 DŒM˜$ÕÒ2Ð2ùÒ2s   …c                 ó   — d| vrd| z  } | S )NÚ*z*%s*© )Úpatterns    r   Ú_convert_select_patternr&   3   s   € Ø�'‰>Ø˜7Ñ"ˆØ€Nr   c                   ó°   — e Zd ZdZdZdZdxZxZxZxZ	xZ
ZdZddddej                  ddddddfdddœd„Zdd	„Zd
„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zy)ÚTestProgramzA command-line program that runs a set of tests; this is primarily
       for making test modules conveniently executable.
    Nr   Ú__main__TF)Ú	tb_localsÚ	durationsc                ó>  — t        |t        «      rEt        |«      | _        |j	                  d«      dd  D ]  }t        | j                  |«      | _        Œ n|| _        |€t        j                  }|| _        || _	        |	| _
        || _        |
| _        || _        || _        |€t        j                  sd| _        n|| _        || _        || _        || _        t(        j*                  j-                  |d   «      | _        | j1                  |«       | j3                  «        y )Nr   r   Údefaultr   )Ú
isinstanceÚstrÚ
__import__ÚmoduleÚsplitÚgetattrÚsysÚargvÚexitÚfailfastÚ
catchbreakÚ	verbosityÚbufferr*   r+   ÚwarnoptionsÚwarningsÚdefaultTestÚ
testRunnerÚ
testLoaderr   r   ÚbasenameÚprogNameÚ	parseArgsÚrunTests)Úselfr1   r=   r5   r>   r?   r6   r9   r7   r8   r:   r<   r*   r+   Úparts                  r   Ú__init__zTestProgram.__init__C   sö   € ô
 �fœcÔ"Ü$ VÓ,ˆDŒKØŸ™ SÓ)¨!¨"Ð-ò 9�Ü% d§k¡k°4Ó8�•ñ9ð !ˆDŒKØˆ<Ü—8‘8ˆDàˆŒ	Ø ˆŒØ$ˆŒØ"ˆŒØˆŒØ"ˆŒØ"ˆŒØÐ¤C§O¢Oð &ˆD�Mð %ˆDŒMØ&ˆÔØ$ˆŒØ$ˆŒÜŸ™×(Ñ(¨¨a©Ó1ˆŒØ�‰�tÔØ�‰�r   c                 óÔ   — t        j                  dt        «       |rt        |«       | j                  €| j                  «        | j                  «        t        j                  d«       y )NzHTestProgram.usageExit() is deprecated and will be removed in Python 3.13é   )	r<   ÚwarnÚDeprecationWarningÚprintÚ_discovery_parserÚ_initArgParsersÚ_print_helpr4   r6   )rD   Úmsgs     r   Ú	usageExitzTestProgram.usageExitk   sP   € Ü�‰ð 0Ü1Cô	EáÜ�#ŒJØ×!Ñ!Ð)Ø× Ñ Ô"Ø×ÑÔÜ�‰��r   c                 óV  — | j                   €\t        | j                  j                  «       «       t        t        d| j
                  iz  «       | j                  j                  «        y t        | j                  j                  «       «       t        t        d| j
                  iz  «       y )NÚprog)	r1   rK   Ú_main_parserÚformat_helpÚMAIN_EXAMPLESrA   rL   Ú
print_helpÚMODULE_EXAMPLES)rD   ÚargsÚkwargss      r   rN   zTestProgram._print_helpu   sx   € Ø�;‰;ÐÜ�$×#Ñ#×/Ñ/Ó1Ô2Ü”- 6¨4¯=©=Ð"9Ñ9Ô:Ø×"Ñ"×-Ñ-Õ/ä�$×#Ñ#×/Ñ/Ó1Ô2Ü”/ V¨T¯]©]Ð$;Ñ;Õ<r   c                 óª  — | j                  «        | j                  €vt        |«      dkD  r+|d   j                  «       dk(  r| j	                  |dd  «       y | j
                  j                  |dd  | «       | j                  s1| j	                  g «       y | j
                  j                  |dd  | «       | j                  r+t        | j                  «      | _	        t        dk(  rcd | _        n[| j                  €d | _	        nGt        | j                  t        «      r| j                  f| _	        nt        | j                  «      | _	        | j                  «        y )Nr   ÚdiscoverrH   r)   )rM   r1   Úlenr   Ú_do_discoveryrS   Ú
parse_argsÚtestsr!   Ú	testNamesÚ__name__r=   r.   r/   ÚlistÚcreateTests)rD   r5   s     r   rB   zTestProgram.parseArgs~   s  € Ø×ÑÔØ�;‰;ÐÜ�4‹y˜1Š}  a¡§¡£°JÒ!>Ø×"Ñ" 4¨¨ 8Ô,ØØ×Ñ×(Ñ(¨¨a¨b¨°4Ô8Ø—:’:ð ×"Ñ" 2Ô&Øà×Ñ×(Ñ(¨¨a¨b¨°4Ô8à�:Š:Ü+¨D¯J©JÓ7ˆDŒNÜ˜:Ò%à"�•Ø×ÑÐ%à!ˆD�NÜ˜×(Ñ(¬#Ô.Ø"×.Ñ.Ð0ˆD�Nä! $×"2Ñ"2Ó3ˆDŒNØ×ÑÕr   c                 óÈ  — | j                   r| j                   | j                  _         |rM|€| j                  n |«       } |j                  | j                  | j                  | j
                  «      | _        y | j                  €+| j                  j                  | j                  «      | _        y | j                  j                  | j                  | j                  «      | _        y r   )ÚtestNamePatternsr?   r[   Ústartr%   ÚtopÚtestr`   ÚloadTestsFromModuler1   ÚloadTestsFromNames)rD   Úfrom_discoveryÚLoaderr   s       r   rc   zTestProgram.createTests›   s›   € Ø× Ò Ø/3×/DÑ/DˆD�O‰OÔ,ÙØ(.¨�T—_’_¹F»HˆFØ'˜Ÿ™¨¯
©
°D·L±LÀ$Ç(Á(ÓKˆD�IØ�^‰^Ð#ØŸ™×;Ñ;¸D¿K¹KÓHˆD�IàŸ™×:Ñ:¸4¿>¹>Ø;?¿;¹;óHˆD�Ir   c                 ó|   — | j                  «       }| j                  |«      | _        | j                  |«      | _        y r   )Ú_getParentArgParserÚ_getMainArgParserrS   Ú_getDiscoveryArgParserrL   )rD   Úparent_parsers     r   rM   zTestProgram._initArgParsers§   s6   € Ø×0Ñ0Ó2ˆØ ×2Ñ2°=ÓAˆÔØ!%×!<Ñ!<¸]Ó!KˆÕr   c                 ó>  — t        j                  d¬«      }|j                  dddddd¬	«       |j                  d
ddddd¬	«       |j                  dddd¬«       |j                  ddt        d dd¬«       | j                  €|j                  ddddd¬«       d| _        | j
                  €|j                  ddddd¬«       d| _        | j                  €|j                  d d!d"dd#¬«       d| _        | j                  €!|j                  d$d%d&t        d'¬(«       g | _        |S ))NF)Úadd_helpz-vz	--verboser9   Ústore_constrH   zVerbose output)ÚdestÚactionÚconstÚhelpz-qz--quietr   zQuiet outputz--localsr*   Ú
store_truez"Show local variables in tracebacks)ru   rv   rx   z--durationsr+   ÚNz+Show the N slowest test cases (N=0 for all))ru   Útyper-   Úmetavarrx   z-fz
--failfastr7   zStop on first fail or errorz-cz--catchr8   z'Catch Ctrl-C and display results so farz-bz--bufferr:   z%Buffer stdout and stderr during testsz-kre   Úappendz.Only run tests which match the given substring)ru   rv   r{   rx   )	ÚargparseÚArgumentParserÚadd_argumentÚintr7   r8   r:   re   r&   )rD   Úparsers     r   rn   zTestProgram._getParentArgParser¬   sr  € Ü×(Ñ(°%Ô8ˆà×Ñ˜D +°KØ#0¸Ø!1ð 	ô 	3ð 	×Ñ˜D )°+Ø#0¸Ø!/ð 	ô 	1ð 	×Ñ˜J¨[Ø#/Ø!Eð 	ô 	Gð 	×Ñ˜M°Ä#Ø$(°#Ø!Nð 	ô 	Pð �=‰=Ð Ø×Ñ  l¸Ø'3Ø%Bð  ô Dð "ˆDŒMØ�?‰?Ð"Ø×Ñ  i°lØ'3Ø%Nð  ô Pð $ˆDŒOØ�;‰;ÐØ×Ñ  j°xØ'3Ø%Lð  ô Nð  ˆDŒKØ× Ñ Ð(Ø×Ñ Ð+=Ø'/Ô6MØ%Uð  ô Wð %'ˆDÔ!àˆr   c                 ó    — t        j                  |g¬«      }| j                  |_        | j                  |_        |j                  ddd¬«       |S )N©Úparentsr_   r#   z?a list of any number of test modules, classes and test methods.)Únargsrx   )r~   r   rA   rR   rN   rV   r€   )rD   Úparentr‚   s      r   ro   zTestProgram._getMainArgParserÒ   sP   € Ü×(Ñ(°&°Ô:ˆØ—m‘mˆŒØ ×,Ñ,ˆÔà×Ñ˜G¨3ð"8ð 	ô 	9ð ˆr   c                 óX  — t        j                  |g¬«      }d| j                  z  |_        d|_        |j                  dddd¬«       |j                  d	d
dd¬«       |j                  dddd¬«       dD ]3  }|j                  |dt         j                  t         j                  ¬«       Œ5 |S )Nr„   z%s discoverzcFor test discovery all test modules must be importable from the top level directory of the project.z-sz--start-directoryrf   z*Directory to start discovery ('.' default))ru   rx   z-pz	--patternr%   z+Pattern to match tests ('test*.py' default)z-tz--top-level-directoryrg   z<Top level directory of project (defaults to start directory))rf   r%   rg   ú?)r†   r-   rx   )r~   r   rA   rR   Úepilogr€   ÚSUPPRESS)rD   r‡   r‚   Úargs       r   rp   z"TestProgram._getDiscoveryArgParserÝ   sÊ   € Ü×(Ñ(°&°Ô:ˆØ# d§m¡mÑ3ˆŒð$ˆŒð 	×Ñ˜DÐ"5¸GØ!Mð 	ô 	Oà×Ñ˜D +°IØ!Nð 	ô 	Pà×Ñ˜DÐ"9Àð"4ð 	ô 	5ð /ò 	8ˆCØ×Ñ ¨3Ü(0×(9Ñ(9Ü%-×%6Ñ%6ð  õ 8ð	8ð
 ˆr   c                 óÈ   — d| _         d| _        d | _        |�8| j                  €| j	                  «        | j                  j                  || «       | j                  d|¬«       y )Nr   ztest*.pyT)rk   rl   )rf   r%   rg   rL   rM   r^   rc   )rD   r5   rl   s      r   r]   zTestProgram._do_discoveryò   s^   € ØˆŒ
Ø!ˆŒØˆŒØÐà×%Ñ%Ð-à×$Ñ$Ô&Ø×"Ñ"×-Ñ-¨d°DÔ9à×Ñ¨°VÐÕ<r   c                 óÒ  — | j                   r
t        «        | j                  €t        j                  | _        t        | j                  t        «      rV	 	 | j                  | j                  | j                  | j                  | j                  | j                  | j                  ¬«      }n| j                  }|j                  | j                  «      | _        | j"                  r›| j                   j$                  dk(  r<t'        | j                   j(                  «      dk(  rt+        j"                  t,        «       y | j                   j/                  «       rt+        j"                  d«       y t+        j"                  d«       y y # t        $ rA | j                  | j                  | j                  | j                  | j                  ¬«      }Y �Œw xY w# t        $ r | j                  «       }Y �Œ1w xY w)N)r9   r7   r:   r<   r*   r+   )r9   r7   r:   r<   r   r   )r8   r   r>   r   ÚTextTestRunnerr.   r{   r9   r7   r:   r<   r*   r+   Ú	TypeErrorÚrunrh   Úresultr6   ÚtestsRunr\   Úskippedr4   Ú_NO_TESTS_EXITCODEÚwasSuccessful)rD   r>   s     r   rC   zTestProgram.runTestsÿ   sa  € Ø�?Š?ÜÔØ�?‰?Ð"Ü$×3Ñ3ˆDŒOÜ�d—o‘o¤tÔ,ð/ðIØ!%§¡¸4¿>¹>Ø:>¿-¹-Ø8<¿¹Ø:>¿-¹-Ø;?¿>¹>Ø;?¿>¹>ð "1ó "K�Jøð" Ÿ™ˆJØ —n‘n T§Y¡YÓ/ˆŒØ�9Š9Ø�{‰{×#Ñ# qÒ(¬S°·±×1DÑ1DÓ-EÈÒ-JÜ—‘Ô+Õ,Ø—‘×*Ñ*Ô,Ü—‘˜•ä—‘˜•ð øô !ò Ià!%§¡¸4¿>¹>Ø:>¿-¹-Ø8<¿¹Ø:>¿-¹-ð "1ó "I“JðIûô ò /à!Ÿ_™_Ó.“
ð/ús,   ÁAE< Å<AGÇG	 ÇGÇG	 Ç	G&Ç%G&r   )FN)ra   Ú
__module__Ú__qualname__Ú__doc__r1   r9   r7   r8   r:   rA   r<   re   rL   r   ÚdefaultTestLoaderrF   rP   rN   rB   rc   rM   rn   ro   rp   r]   rC   r$   r   r   r(   r(   9   s¡   „ ñð €FØ€IØNRÐR€HÐRˆzÐR˜FÐR XÐR°Ð;KØÐà(°dÀØ#°×0HÑ0HØ¨°TÀdØ¨$ð&ð >CØ"ô	&óPò=òó:
HòLò
$òL	òó*=ó!r   r(   )r™   r4   r~   r   r<   Ú r   r   Úsignalsr   Ú
__unittestr•   rU   rW   r   r!   r&   Úobjectr(   Úmainr$   r   r   ú<module>r       sX   ðÙ ã 
Û Û 	Û ç Ý #à€
ØÐ ð€ð€òò 3òôg�&ô gðT �r   