ó
    àÅŸg7 ã                   ó`  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSK J!r!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*J+r+J,r,J-r-  SS	K.J/r/J0r0J1r1J2r2  SS
K3J4r4J5r5J6r6J7r7J8r8J9r9  SSK:J;r;J<r<J=r=J>r>  SSK?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrR  SSKSJTrT  SSKUJVrVJWrW  SSKXJYrYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrc  SSKdJereJfrfJgrgJhrhJiriJjrjJkrkJlrl  SSKmJnrnJoroJprpJqrq  SSKrJsrs   " S S\_5      rtSS jrug)z+Test suite for the `humanfriendly` package.é    N)ÚInvalidDateÚInvalidLengthÚInvalidSizeÚInvalidTimespanÚTimerÚcoerce_booleanÚcoerce_patternÚformat_lengthÚformat_numberÚformat_pathÚformat_sizeÚformat_timespanÚ
parse_dateÚparse_lengthÚ
parse_pathÚ
parse_sizeÚparse_timespanÚpromptsÚround_number)ÚCaseInsensitiveDictÚCaseInsensitiveKey)Úmain)ÚStringIO©Úcached)ÚDeprecationProxyÚdefine_aliasesÚdeprecated_argsÚget_aliases)ÚTooManyInvalidRepliesÚprompt_for_confirmationÚprompt_for_choiceÚprompt_for_input)Údeprecation_note_callbackÚman_roleÚ	pypi_roleÚsetupÚspecial_methods_callbackÚusage_message_callback)Úformat_pretty_tableÚformat_robust_tableÚformat_rst_tableÚformat_smart_table)ÚANSI_CSIÚANSI_ERASE_LINEÚANSI_HIDE_CURSORÚ
ANSI_RESETÚANSI_SGRÚANSI_SHOW_CURSORÚ
ansi_stripÚ
ansi_styleÚ
ansi_widthÚ	ansi_wrapÚclean_terminal_outputÚconnected_to_terminalÚfind_terminal_sizeÚget_pager_commandÚmessageÚoutputÚ
show_pagerÚterminal_supports_colorsÚwarning©Úhtml_to_ansi)ÚAutomaticSpinnerÚSpinner)ÚCallableTimedOutÚCaptureOutputÚMockedProgramÚPatchedAttributeÚPatchedItemÚTemporaryDirectoryÚTestCaseÚretryÚrun_cliÚskip_on_raiseÚtouch)ÚcompactÚcompact_empty_linesÚconcatenateÚdedentÚgenerate_slugÚ	pluralizeÚrandom_stringÚtrim_empty_lines)Úfind_meta_variablesÚformat_usageÚparse_usageÚrender_usage)Ú	MagicMockc                   óÎ  • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<S; r=S< r>S= r?S> r@S? rAS@ rBSA rCSB rDSC rESD rFSE rGSF rHSG rISH rJSI rKSJ rLSK rMSLrNgM)NÚHumanFriendlyTestCaseé�   z-Container for the `humanfriendly` test suite.c           	      óT  • [        [        SS/5      5      S:X  d   e[        [        SS/SSS95      S	:X  d   e[        [        [        SSS
95      5      S:X  d   e[        [        [        SSS9SSS95      S	:X  d   e[        [        SSSS95      S	:X  d   e[        R                  " / SQ5      n[        U5      S	:X  d   e[        SS9nUR	                  S5      S:X  d   e[        SS9nUR                  S5      S:X  d   e[        U5      S:X  d   e[        SS9nUR                  S5      S:X  d   eUR                  SS5        US   S:X  d   e[        SS9nSU;   d   e[        SS9nUS	 [        U5      S:X  d   e[        SS9nUS   S:X  d   e[        SS9nSUS'   US   S:X  d   eg)z#Test the CaseInsensitiveDict class.)ÚkeyT)ÚKEYFé   )ÚoneT)ÚONEFFT)rd   Útwoé   )ra   rb   )rd   re   )rd   re   rf   )ÚOnerd   re   ÚTworf   ÚTWOé*   )Úexisting_keyÚExisting_Keyr   Ú	other_keyé   Ú	Other_Keyrl   N)Úlenr   ÚdictÚfromkeysÚgetÚpopÚ
setdefault)ÚselfÚobjs     ÚT/var/www/blue/EV-Temp_rev04/venv/lib/python3.13/site-packages/humanfriendly/tests.pyÚtest_case_insensitive_dictÚ0HumanFriendlyTestCase.test_case_insensitive_dict…   sÜ  € ô Ô&¨°~Ð'FÓGÓHÈAÓMÐMÐMäÔ&¨°~Ð'FÈEÐW[Ñ\Ó]ÐabÓbÐbÐbäÔ&¤t°¸%Ñ'@ÓAÓBÀaÓGÐGÐGäÔ&¤t°¸%Ñ'@ÀeÐQUÑVÓWÐ[\Ó\Ð\Ð\äÔ&¨4°UÀÑEÓFÈ!ÓKÐKÐKä!×*Ò*Ò+UÓVˆÜ�3‹x˜1‹}Ðˆ}ä!¨rÑ2ˆØ�w‰w�~Ó&¨"Ó,Ð,Ð,ä!¨rÑ2ˆØ�w‰w�~Ó&¨"Ó,Ð,Ð,Ü�3‹x˜1‹}Ðˆ}ä!¨rÑ2ˆØ�~‰~˜nÓ-°Ó3Ð3Ð3Ø�‰�{ BÔ'Ø�;Ñ 2Ó%Ð%Ð%ä!¨rÑ2ˆØ Ó$Ð$Ð$ä!¨rÑ2ˆØ�ÐÜ�3‹x˜1‹}Ðˆ}ä!¨rÑ2ˆØ�>Ñ" bÓ(Ð(Ð(ä!¨rÑ2ˆØ ˆˆNÑØ�>Ñ" bÓ(Ð(Ñ(ó    c                 ót   • [        S5      n[        S5      nX:X  d   e0 nSX1'   SX2'   [        U5      S:X  d   eg)z"Test the CaseInsensitiveKey class.zPlease don't shoutzPLEASE DON'T SHOUTrc   rg   N)r   rq   )rw   ÚpoliteÚrudeÚmappings       ry   Útest_case_insensitive_keyÚ/HumanFriendlyTestCase.test_case_insensitive_key¯   sI   € ô $Ð$8Ó9ˆÜ!Ð"6Ó7ˆØ‹~Ðˆ~àˆØˆ‰Øˆ‰Ü�7‹|˜qÓ Ð Ñ r|   c                 óN  • [        5        n[        R                  R                  S5        [        R                  R                  S5        UR                  R                  5       S/:X  d   eUR                  R                  5       S/:X  d   e SSS5        g! , (       d  f       g= f)zTest the CaptureOutput class.zSomething for stdout.
zAnd for stderr.
zSomething for stdout.zAnd for stderr.N)rF   ÚsysÚstdoutÚwriteÚstderrÚ	get_lines)rw   Úcapturers     ry   Útest_capture_outputÚ)HumanFriendlyTestCase.test_capture_output»   sw   € äŒ_ Ü�J‰J×ÑÐ6Ô7Ü�J‰J×ÑÐ0Ô1Ø—?‘?×,Ñ,Ó.Ð3JÐ2KÓKÐKÐKØ—?‘?×,Ñ,Ó.Ð3DÐ2EÓEÐEÑE÷	 �_Ž_ús   ‹BBÂ
B$c                 ó¤   • S n[        [        5      nU" U5      nU R                  [        U5        U R                  [        R                  U5        g)z#Test the skip_on_raise() decorator.c                  ó   • [        5       e©N)ÚNotImplementedError© r|   ry   Útest_fnÚ9HumanFriendlyTestCase.test_skip_on_raise.<locals>.test_fnÅ   s   € Ü%Ó'Ð'r|   N)rN   r�   ÚassertRaisesÚunittestÚSkipTest)rw   r‘   Údecorator_fnÚdecorated_fns       ry   Útest_skip_on_raiseÚ(HumanFriendlyTestCase.test_skip_on_raiseÃ   sC   € ò	(ä$Ô%8Ó9ˆÙ# GÓ,ˆØ×ÑÔ-¨wÔ7Ø×Ñœ(×+Ñ+¨\Õ:r|   c                 ó¬   ^• U4S jm[        T5      S:X  d   eS nU R                  [        5         [        USS9  SSS5        g! , (       d  f       g= f)zFTest :func:`~humanfriendly.testing.retry()` based on assertion errors.c                  óF   >• [        T S5      (       d  [        T SS5         eg)NÚ
was_calledTÚyes©ÚhasattrÚsetattr©Úsuccess_helpers   €ry   r¢   Ú>HumanFriendlyTestCase.test_retry_raise.<locals>.success_helperÐ   s$   ø€ Ü˜>¨<×8Ñ8Ü˜¨°dÔ;Ø�uàr|   r�   c                  ó   •  erŽ   r�   r�   r|   ry   Úfailure_helperÚ>HumanFriendlyTestCase.test_retry_raise.<locals>.failure_helperÙ   s   € Ø�5r|   rc   ©ÚtimeoutN)rL   r“   ÚAssertionError)rw   r¥   r¢   s     @ry   Útest_retry_raiseÚ&HumanFriendlyTestCase.test_retry_raiseÌ   sF   ø€ õ	ô �^Ó$¨Ó-Ð-Ð-ò	à×Ñœ~Õ.Ü�.¨!Ò,÷ /×.Ö.ús   ±AÁ
Ac                 ó¨   ^• U4S jm[        T5      S:X  d   eU R                  [        5         [        S SS9  SSS5        g! , (       d  f       g= f)zCTest :func:`~humanfriendly.testing.retry()` based on return values.c                  óD   >• [        T S5      (       d  [        T SS5        gg)Nrœ   TFrk   rž   r¡   s   €ry   r¢   Ú?HumanFriendlyTestCase.test_retry_return.<locals>.success_helperâ   s$   ø€ Ü˜>¨<×8Ñ8ä˜¨°dÔ;Øð r|   rk   c                  ó   • g)NFr�   r�   r|   ry   Ú<lambda>Ú9HumanFriendlyTestCase.test_retry_return.<locals>.<lambda>ì   s   € ˜%r|   rc   r§   N)rL   r“   rE   )rw   r¢   s    @ry   Útest_retry_returnÚ'HumanFriendlyTestCase.test_retry_returnÞ   sB   ø€ õ	ô �^Ó$¨Ó*Ð*Ð*Ø×ÑÔ/Õ0Ü‘-¨Ò+÷ 1×0Ö0ús   ®AÁ
Ac                 ó4  • [        5       n[        S5      n[        USUS9 n[        R                  R                  U5      (       d   e[        R                  R                  [        R                  R                  X15      5      (       d   e[        R                  " U[        R                  [        R                  [        R                  S9nUR                  SS9u  pVUR                  S:X  d   eUS:X  d   eUS:X  d   e S	S	S	5        g	! , (       d  f       g	= f)
z2Test :class:`humanfriendly.testing.MockedProgram`.zˆ
            # This goes to stdout.
            tr a-z A-Z
            # This goes to stderr.
            echo Fake warning >&2
        rk   )ÚnameÚ
returncodeÚscript)Ústdinr…   r‡   s   hello world
©Úinputs   HELLO WORLD
s   Fake warning
N)rV   rS   rG   ÚosÚpathÚisdirÚisfileÚjoinÚ
subprocessÚPopenÚPIPEÚcommunicater¶   )rw   rµ   r·   Ú	directoryÚprogramr…   r‡   s          ry   Útest_mocked_programÚ)HumanFriendlyTestCase.test_mocked_programî   sá   € ä‹ˆÜð ó ˆô  °¸FÒCÀyÜ—7‘7—=‘= ×+Ñ+Ð+Ð+Ü—7‘7—>‘>¤"§'¡'§,¡,¨yÓ"?×@Ñ@Ð@Ð@Ü ×&Ò& t´:·?±?Ì:Ï?É?Ôcm×crÑcrÑsˆGØ$×0Ñ0Ð7GÐ0ÐH‰NˆFØ×%Ñ%¨Ó+Ð+Ð+ØÐ-Ó-Ð-Ð-ØÐ.Ó.Ð.Ñ.÷ D×CÖCús   ¡CD	Ä	
Dc                 óÞ  • [        5        n[        R                  R                  U5      (       d   e[        R                  R	                  US5      n[        US5       nUR                  S5        SSS5        SSS5        [        R                  R                  W5      (       a   e[        R                  R                  W5      (       a   eg! , (       d  f       Nc= f! , (       d  f       Nl= f)z7Test :class:`humanfriendly.testing.TemporaryDirectory`.z	some-fileÚwzHello world!N)rJ   r»   r¼   r½   r¿   Úopenr†   Úexists)rw   rÄ   Útemporary_fileÚhandles       ry   Útest_temporary_directoryÚ.HumanFriendlyTestCase.test_temporary_directory   s¢   € äÔ! YÜ—7‘7—=‘= ×+Ñ+Ð+Ð+ÜŸW™WŸ\™\¨)°[ÓAˆNÜ�n cÔ*¨fØ—‘˜^Ô,÷ +÷ "ô
 —7‘7—>‘> .×1Ñ1Ð1Ð1Ü—7‘7—>‘> )×,Ñ,Ð,Ð,Ð,÷ +Õ*ú÷ "Õ!ús$   ‹ACÁCÁ0CÃ
C	ÃCÃ
C,c                 ó\  • [        5        n[        R                  R                  U[	        5       5      n[        R                  R                  U5      (       a   e[        U5        [        R                  R                  U5      (       d   e[        R                  R                  U[	        5       [	        5       5      n[        R                  R                  U5      (       a   e[        U5        [        R                  R                  U5      (       d   e SSS5        g! , (       d  f       g= f)z+Test :func:`humanfriendly.testing.touch()`.N)rJ   r»   r¼   r¿   rV   r¾   rO   )rw   rÄ   Úfilenames      ry   Ú
test_touchÚ HumanFriendlyTestCase.test_touch
  s¸   € äÔ! Yä—w‘w—|‘| I¬}«Ó?ˆHÜ—w‘w—~‘~ h×/Ñ/Ð/Ð/Ü�(ŒOÜ—7‘7—>‘> (×+Ñ+Ð+Ð+ä—w‘w—|‘| I¬}«ÄÃÓPˆHÜ—w‘w—~‘~ h×/Ñ/Ð/Ð/Ü�(ŒOÜ—7‘7—>‘> (×+Ñ+Ð+Ñ+÷ "×!Ö!ús   ‹DDÄ
D+c                 óø   •  " S S[         5      nU" 5       nUR                  S:X  d   e[        USS5       nX2L d   eUR                  S:X  d   e SSS5        UR                  S:X  d   eg! , (       d  f       N!= f)z5Test :class:`humanfriendly.testing.PatchedAttribute`.c                   ó   • \ rS rSrSrSrg)Ú;HumanFriendlyTestCase.test_patch_attribute.<locals>.Subjecti  rk   r�   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úmy_attributeÚ__static_attributes__r�   r|   ry   ÚSubjectrÖ     s   † Ø‹Lr|   rÝ   rk   rÛ   é   N)ÚobjectrÛ   rH   )rw   rÝ   ÚinstanceÚreturn_values       ry   Útest_patch_attributeÚ*HumanFriendlyTestCase.test_patch_attribute  s{   € ô	”fô 	á“9ˆØ×$Ñ$¨Ó*Ð*Ð*Ü˜h¨¸Ô;¸|ØÒ+Ð+Ð+Ø×(Ñ(¨BÓ.Ð.Ñ.÷ <ð ×$Ñ$¨Ó*Ð*Ñ*÷ <Õ;ús   ¶A+Á+
A9c                 ó®   • [        SS9nUS   SL d   e[        USS5       nX!L d   eUS   SL d   e SSS5        US   SL d   eg! , (       d  f       N= f)z0Test :class:`humanfriendly.testing.PatchedItem`.T)Úmy_itemrå   FN)rr   rI   )rw   rà   rá   s      ry   Útest_patch_itemÚ%HumanFriendlyTestCase.test_patch_item#  so   € ä Ñ%ˆØ˜	Ñ" dÒ*Ð*Ð*Ü˜ 9¨eÔ4¸ØÒ+Ð+Ð+Ø˜IÑ&¨%Ò/Ð/Ñ/÷ 5ð ˜	Ñ" dÒ*Ð*Ñ*÷ 5Õ4ús   ¡AÁ
Ac                 óD   • [        S 5      u  pU R                  US5        g)z*Test that run_cli() intercepts SystemExit.c                  ó.   • [         R                  " S5      $ )Nrk   )r„   Úexitr�   r|   ry   r°   ÚDHumanFriendlyTestCase.test_run_cli_intercepts_exit.<locals>.<lambda>.  s   € ¬S¯XªX°b¬\r|   rk   N)rM   ÚassertEqual©rw   r¶   r=   s      ry   Útest_run_cli_intercepts_exitÚ2HumanFriendlyTestCase.test_run_cli_intercepts_exit,  s    € ä$Ñ%9Ó:Ñˆ
Ø×Ñ˜ RÕ(r|   c                 óV   • [        U R                  5      u  pU R                  US5        g)z*Test that run_cli() intercepts exceptions.rc   N)rM   Úrun_cli_raise_otherrì   rí   s      ry   Útest_run_cli_intercepts_errorÚ3HumanFriendlyTestCase.test_run_cli_intercepts_error1  s%   € ä$ T×%=Ñ%=Ó>Ñˆ
Ø×Ñ˜ QÕ'r|   c                 ó   • [        5       e)z*run_cli() sample that raises an exception.)Ú
ValueError©rw   s    ry   rñ   Ú)HumanFriendlyTestCase.run_cli_raise_other6  s
   € ä‹lÐr|   c                 óŠ   ^• [        5       S-   m[        U4S j5      u  pU R                  US5        U R                  UT5        g)z&Test that run_cli() intercepts output.Ú
c                  óB   >• [         R                  R                  T 5      $ rŽ   )r„   r…   r†   )Úexpected_outputs   €ry   r°   ÚFHumanFriendlyTestCase.test_run_cli_intercepts_output.<locals>.<lambda>=  s   ø€ ¬S¯Z©Z×-=Ñ-=¸oÔ-Nr|   r   N)rV   rM   rì   )rw   r¶   r=   rû   s      @ry   Útest_run_cli_intercepts_outputÚ4HumanFriendlyTestCase.test_run_cli_intercepts_output:  s=   ø€ ä'›/¨DÑ0ˆÜ$Ô%NÓOÑˆ
Ø×Ñ˜ QÔ'Ø×Ñ˜ Õ1r|   c                 ó    • [        S 5      n[        S 5      nU" 5       U" 5       :X  d   eU" 5       U" 5       :X  d   eU" 5       U" 5       :w  d   eg)zTest the caching decorator.c                  ó,   • [         R                   " 5       $ rŽ   ©Úrandomr�   r|   ry   r°   Ú>HumanFriendlyTestCase.test_caching_decorator.<locals>.<lambda>D  ó
   € œ6Ÿ=š=œ?r|   c                  ó,   • [         R                   " 5       $ rŽ   r  r�   r|   ry   r°   r  E  r  r|   Nr   )rw   ÚaÚbs      ry   Útest_caching_decoratorÚ,HumanFriendlyTestCase.test_caching_decoratorA  sJ   € ô Ñ*Ó+ˆÜÑ*Ó+ˆÙ‹s‘a“c‹zÐˆzÙ‹s‘a“c‹zÐˆzá‹s‘a“c‹zÐ‰zr|   c                 ój   • [        S5      S:X  d   e[        SS5      S:X  d   e[        SSS9S	:X  d   eg
)z*Test :func:`humanfriendly.text.compact()`.z a 

 b za bz*
            %s template notation
        ÚSimplezSimple template notationz3
            More {type} template notation
        Úreadable)ÚtypezMore readable template notationN)rP   rö   s    ry   Útest_compactÚ"HumanFriendlyTestCase.test_compactK  s^   € ä�|Ó$¨Ó-Ð-Ð-Üð àóà4ó5ð 	5ð 5ô ð àñà!BóCð 	Cñ Cr|   c                 óò   • [        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   eg)	z6Test :func:`humanfriendly.text.compact_empty_lines()`.Úfooz	fooúfoo
barzfoo

barz	foo


barz
foo



barzfoo




barN)rQ   rö   s    ry   Útest_compact_empty_linesÚ.HumanFriendlyTestCase.test_compact_empty_linesU  s‹   € ô # 5Ó)¨UÓ2Ð2Ð2ä" 7Ó+¨wÓ6Ð6Ð6ä" :Ó.°*Ó<Ð<Ð<ä" <Ó0°LÓ@Ð@Ð@ä" >Ó2°lÓBÐBÐBÜ"Ð#3Ó4¸ÓDÐDÐDÜ"Ð#5Ó6¸,ÓFÐFÑFr|   c                 ój   • [        S5      S:X  d   e[        SS5      S:X  d   e[        SSS9S	:X  d   eg
)z)Test :func:`humanfriendly.text.dedent()`.z
 line 1
  line 2

zline 1
 line 2
z'
            Dedented, %s text
        ÚinterpolatedzDedented, interpolated text
z)
            Dedented, {op} text
        Ú	formatted)ÚopzDedented, formatted text
N)rS   rö   s    ry   Útest_dedentÚ!HumanFriendlyTestCase.test_dedentd  s`   € äÐ/Ó0Ð4GÓGÐGÐGÜð àóà ?ó@ð 	@ð @ô ð àñà <ó=ð 	=ñ =r|   c                 ó˜   • [        SS5      S:X  d   e[        SS5      S:X  d   e[        SSS5      S:X  d   e[        SSS5      S	:X  d   eg
)z,Test :func:`humanfriendly.text.pluralize()`.rc   Úwordz1 wordrg   z2 wordsÚboxÚboxesz1 boxz2 boxesN)rU   rö   s    ry   Útest_pluralizationÚ(HumanFriendlyTestCase.test_pluralizationn  sZ   € ä˜˜FÓ# xÓ/Ð/Ð/Ü˜˜FÓ# yÓ0Ð0Ð0Ü˜˜E 7Ó+¨wÓ6Ð6Ð6Ü˜˜E 7Ó+¨yÓ8Ð8Ñ8r|   c                 óX  • U R                  S[        S5      5        U R                  S[        S5      5        U R                  [        5         [        S5        SSS5        U R                  [        5         [        S5        SSS5        g! , (       d  f       N8= f! , (       d  f       g= f)z0Test :func:`humanfriendly.text.generate_slug()`.zsome-random-textzSome Random Text!Ú NÚ-)rì   rT   r“   rõ   rö   s    ry   Útest_generate_slugÚ(HumanFriendlyTestCase.test_generate_slugu  s{   € ð 	×ÑÐ+¬]Ð;NÓ-OÔPà×ÑÐ+¬]Ð;MÓ-NÔOà×ÑœzÕ*Ü˜#Ô÷ +à×ÑœzÕ*Ü˜#Ô÷ +Ð*÷ +Õ*úç*Õ*ús   ÁB
Á5BÂ

BÂ
B)c                 ó  • S H  nU R                  S[        U5      5        M      S H  nU R                  S[        U5      5        M      U R                  [        5         [        S5        SSS5        g! , (       d  f       g= f)z,Test :func:`humanfriendly.coerce_boolean()`.)TÚTRUEÚTrueÚtrueÚonr�   Ú1T)FÚFALSEÚFalseÚfalseÚoffÚnoÚ0Fznot a booleanN)rì   r   r“   rõ   )rw   Úvalues     ry   Útest_boolean_coercionÚ+HumanFriendlyTestCase.test_boolean_coercion�  sd   € ãEˆEØ×Ñ˜T¤>°%Ó#8Ö9ñ FãIˆEØ×Ñ˜U¤N°5Ó$9Ö:ñ Jà×ÑœzÕ*Ü˜?Ô+÷ +×*Ö*ús   ÁA3Á3
Bc                 ór  • [         R                  " S5      n[        [        S5      [	        U5      5      (       d   eU[        U5      L d   e[        S[         R
                  5      nUR                  S5      (       d   eU R                  [        5         [        / 5        SSS5        g! , (       d  f       g= f)z,Test :func:`humanfriendly.coerce_pattern()`.Ú ÚfoobarÚFOOBARN)	ÚreÚcompileÚ
isinstancer	   r  Ú
IGNORECASEÚmatchr“   rõ   )rw   Úempty_patternÚpatterns      ry   Útest_pattern_coercionÚ+HumanFriendlyTestCase.test_pattern_coercionŠ  s†   € äŸ
š
 2›ˆäœ.¨Ó2´D¸Ó4G×HÑHÐHÐHà¤¨}Ó =Ò=Ð=Ð=ä  ¬2¯=©=Ó9ˆØ�}‰}˜X×&Ñ&Ð&Ð&à×ÑœzÕ*Ü˜2Ô÷ +×*Ö*ús   ÂB(Â(
B6c                 ó\  • SnUS-  nUS-  nUS-  nUS-  nS[        SSS9:X  d   eS	[        S
SS9:X  d   eS[        SSS9:X  d   eS[        SSS9:X  d   eS[        SSS9:X  d   eS[        SSS9:X  d   eS[        SSS9:X  d   eS[        S5      :X  d   eS[        S5      :X  d   eS[        S5      :X  d   eS[        [        R                  5      :X  d   eS[        U5      :X  d   eS[        S5      :X  d   eS[        US -  5      :X  d   eS![        U5      :X  d   eS"[        US -  5      :X  d   eS#[        U5      :X  d   eS$[        US -  5      :X  d   eS%[        U5      :X  d   eS&[        US -  5      :X  d   eS'[        U5      :X  d   eS([        US -  5      :X  d   eS)[        US*-  US+-  -   US,-  -   US--  -   US -  -   S-   SS9:X  d   eS.[        XTS -  -   US--  -   US/-  -   5      :X  d   eS0[        S1SS9:X  d   eS2[        S1SS9:X  d   eS3[        S45      :X  d   eS5[        S65      :X  d   eS7[        S8SS9:X  d   eS9[        S:SS9:X  d   eS;[        S<SS9:X  d   e[        R                  R	                  5       nU[        R
                  " S=S>9-
  nS?[        Xg-
  5      :X  d   eg@)Az-Test :func:`humanfriendly.format_timespan()`.é<   é   é   é4   z1 nanosecondç•Ö&è.>T)Údetailedz500 nanosecondsg�íµ ÷Æ >z1 microsecondç�íµ ÷Æ°>z500 microsecondsgü©ñÒMb@?ú1 millisecondçü©ñÒMbP?ú500 millisecondsç      à?ú0.5 secondsFz	0 secondsr   z0.54 secondsgn†ðùaá?ú1 secondrc   z3.14 secondsú1 minutez1 minute and 20 secondséP   ú	2 minutesrg   ú1 hourú2 hoursú1 dayú2 daysú1 weekú2 weeksz1 yearz2 yearszA6 years, 5 weeks, 4 days, 3 hours, 2 minutes and 500 millisecondsé   é   é   é   z1 year, 2 weeks and 3 daysé   z'1 minute, 1 second and 100 millisecondsgÍÌÌÌÌŒN@z1 minute and 1.1 secondsz1 minute and 0.3 secondsgfffff&N@z5 minutes and 0.3 secondsgÍÌÌÌÌÄr@z1 second and 15 millisecondsg=
×£p=ð?z10 seconds and 15 millisecondsgHáz®$@z 1 microsecond and 50 nanosecondsgÓ‹5·�±>é   )Úhoursz23 hoursN)r   ÚmathÚpiÚdatetimeÚnowÚ	timedelta)rw   ÚminuteÚhourÚdayÚweekÚyearrc  Úthens           ry   Útest_format_timespanÚ*HumanFriendlyTestCase.test_format_timespan˜  sN  € àˆØ˜‰{ˆØ�R‰iˆØ�Q‰wˆØ�b‰yˆØ¤°ÀtÑ!LÓLÐLÐLØ ¤O°IÈÑ$MÓMÐMÐMØ¤/°(ÀTÑ"JÓJÐJÐJØ!¤_°VÀdÑ%KÓKÐKÐKØ¤/°%À$Ñ"GÓGÐGÐGØ!¤_°SÀ4Ñ%HÓHÐHÐHØ¤°¸eÑ DÓDÐDÐDØœo¨aÓ0Ó0Ð0Ð0Ø¤°Ó!9Ó9Ð9Ð9Øœ_¨QÓ/Ó/Ð/Ð/Ø¤´·±Ó!9Ó9Ð9Ð9Øœ_¨VÓ4Ó4Ð4Ð4Ø(¬O¸BÓ,?Ó?Ð?Ð?Øœo¨f°q©jÓ9Ó9Ð9Ð9Øœ?¨4Ó0Ó0Ð0Ð0ØœO¨D°1©HÓ5Ó5Ð5Ð5Øœ/¨#Ó.Ó.Ð.Ð.Øœ?¨3°©7Ó3Ó3Ð3Ð3Øœ?¨4Ó0Ó0Ð0Ð0ØœO¨D°1©HÓ5Ó5Ð5Ð5Øœ?¨4Ó0Ó0Ð0Ð0ØœO¨D°1©HÓ5Ó5Ð5Ð5ØRÜ˜D 1™H t¨a¡xÑ/°#¸±'Ñ9¸DÀ1¹HÑDÀvÐPQÁzÑQÐTWÑWÐbfÑgóhð 	hð hà+Ü˜D¨!¡8™O¨c°A©gÑ5¸¸r¹	ÑAÓBóCð 	Cð Cð 9¼OÈEÐ\`Ñ<aÓaÐaÐaØ)¬_¸UÈUÑ-SÓSÐSÐSð *¬_¸VÓ-DÓDÐDÐDØ*¬o¸gÓ.FÓFÐFÐFØ-´ÀÐQUÑ1VÓVÐVÐVØ/´?À6ÐTXÑ3YÓYÐYÐYØ1´_ÀZÐZ^Ñ5_Ó_Ð_Ð_ô ×Ñ×#Ñ#Ó%ˆØ”X×'Ò'¨bÑ1Ñ1ˆØœ_¨S©ZÓ8Ó8Ð8Ñ8r|   c                 ó  • U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S	5      5        U R                  S
[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S 5      5        U R                  S![        S"5      5        U R                  S![        S#5      5        U R                  [        5         [        S$5        S%S%S%5        g%! , (       d  f       g%= f)&z,Test :func:`humanfriendly.parse_timespan()`.r   r1  Ú0srG  Ú1nsgýåýùbak>Ú51nsrI  Ú1usg¢'eRC?Ú52usrK  Ú1msrJ  rM  rL  rN  rZ  Ú5sz	5 secondséx   Ú2mrR  é´   z3 minz3 minsi0*  z3 hz3 hoursi F Ú4dz4 daysi€$. z5 wz5 weeksÚ1zN)rì   r   r“   r   rö   s    ry   Útest_parse_timespanÚ)HumanFriendlyTestCase.test_parse_timespanÊ  s÷  € à×Ñ˜œN¨3Ó/Ô0Ø×Ñ˜œN¨4Ó0Ô1Ø×Ñ˜¤n°UÓ&;Ô<Ø×Ñ˜¤n°VÓ&<Ô=Ø×Ñ˜¤>°%Ó#8Ô9Ø×Ñ˜¤>°&Ó#9Ô:Ø×Ñ˜¤¨uÓ 5Ô6Ø×Ñ˜¤¨Ó ?Ô@Ø×Ñ˜œnÐ-?Ó@ÔAØ×Ñ˜œn¨]Ó;Ô<Ø×Ñ˜œN¨4Ó0Ô1Ø×Ñ˜œN¨;Ó7Ô8Ø×Ñ˜¤°Ó!5Ô6Ø×Ñ˜¤°Ó!<Ô=Ø×Ñ˜¤°Ó!8Ô9Ø×Ñ˜¤°Ó!9Ô:Ø×Ñ˜¤n°UÓ&;Ô<Ø×Ñ˜¤n°YÓ&?Ô@Ø×ÑÐ)¬>¸$Ó+?Ô@Ø×ÑÐ)¬>¸(Ó+CÔDØ×ÑÐ-¬~¸eÓ/DÔEØ×ÑÐ-¬~¸iÓ/HÔIØ×ÑœÕ/Ü˜4Ô ÷ 0×/Ö/ús   É(I=É=
Jc                 ó  • U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  [        5         [        S5        SSS5        g! , (       d  f       g= f)	z(Test :func:`humanfriendly.parse_date()`.)éÝ  rY  é   r   r   r   z
2013-06-17)r}  rY  r~  rg   é/   rk   z2013-06-17 02:47:42)ià  ro   é   r   r  r~  z2016-11-30 00:47:17z
2013-06-XYN)rì   r   r“   r   rö   s    ry   Útest_parse_dateÚ%HumanFriendlyTestCase.test_parse_dateå  sh   € à×ÑÐ/´¸LÓ1IÔJØ×ÑÐ1´:Ð>SÓ3TÔUØ×ÑÐ2´JÐ?UÓ4VÔWØ×Ñœ{Õ+Ü�|Ô$÷ ,×+Ö+ús   Á'A<Á<
B
c                 ób  • U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S	[        S
5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        SSS95        U R                  S[        SSS95        U R                  S[        SSS95        U R                  S[        S SS95        U R                  S![        S"SS95        U R                  S#[        S$SS95        U R                  S%[        S&SS95        U R                  S'[        S(SS95        U R                  S)[        S*5      5        U R                  S+[        S,5      5        g-).z)Test :func:`humanfriendly.format_size()`.z0 bytesr   z1 byterc   z42 bytesrk   ú1 KBéè  z1 MBé@B ú1 GBé Êš;ú1 TBì    J)£ú1 PBì     �Iú5 ú1 EBì     ÈNÎZoú1 ZBì     @=7M.cú1 YBì      B¶3v^!< z1 KiBé   T©Úbinaryz1 MiBé   z1 GiBi   @z1 TiBl        z1 PiBl           z1 EiBl            z1 ZiBl            z1 YiBl               z45 KBiÈ¯  z2.9 TBg  @Â«…BN)rì   r   rö   s    ry   Útest_format_sizeÚ&HumanFriendlyTestCase.test_format_sizeí  sÈ  € à×Ñ˜¤K°£NÔ3Ø×Ñ˜¤;¨q£>Ô2Ø×Ñ˜¤[°£_Ô5Ø×Ñ˜¤¨YÓ!7Ô8Ø×Ñ˜¤¨YÓ!7Ô8Ø×Ñ˜¤¨YÓ!7Ô8Ø×Ñ˜¤¨YÓ!7Ô8Ø×Ñ˜¤¨YÓ!7Ô8Ø×Ñ˜¤¨YÓ!7Ô8Ø×Ñ˜¤¨YÓ!7Ô8Ø×Ñ˜¤¨YÓ!7Ô8Ø×Ñ˜¤+¨iÀÑ"EÔFØ×Ñ˜¤+¨iÀÑ"EÔFØ×Ñ˜¤+¨iÀÑ"EÔFØ×Ñ˜¤+¨iÀÑ"EÔFØ×Ñ˜¤+¨iÀÑ"EÔFØ×Ñ˜¤+¨iÀÑ"EÔFØ×Ñ˜¤+¨iÀÑ"EÔFØ×Ñ˜¤+¨iÀÑ"EÔFØ×Ñ˜¤+¨iÓ"8Ô9Ø×Ñ˜¤;¨Ó#?Õ@r|   c                 ó~  • U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        SS	S
95        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        SS	S
95        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  [        5         [        S5        S S S 5        U R                  [        5         [        S!5        S S S 5        g ! , (       d  f       N8= f! , (       d  f       g = f)"z(Test :func:`humanfriendly.parse_size()`.r   Ú0Brk   Ú42Ú42Br…  Ú1kr“  Tr”  r„  z
1 kilobytei@Ûz69 MBrˆ  r‡  rŠ  r‰  rŒ  r‹  rŽ  r�  r�  r�  r’  r‘  g   ÀZÖAz1.5 GBg      øDz1.5 YiBÚ1qNr  )rì   r   r“   r   rö   s    ry   Útest_parse_sizeÚ%HumanFriendlyTestCase.test_parse_size  s³  € à×Ñ˜œJ tÓ,Ô-Ø×Ñ˜œZ¨Ó-Ô.Ø×Ñ˜œZ¨Ó.Ô/Ø×Ñ˜œz¨$Ó/Ô0Ø×Ñ˜œz¨$°tÑ<Ô=Ø×Ñ˜œz¨&Ó1Ô2Ø×Ñ˜œz¨,Ó7Ô8Ø×Ñ˜œz¨,¸tÑDÔEØ×Ñ˜¬°GÓ)<Ô=Ø×Ñ˜¤J¨vÓ$6Ô7Ø×Ñ˜¤J¨vÓ$6Ô7Ø×Ñ˜¤J¨vÓ$6Ô7Ø×Ñ˜¤J¨vÓ$6Ô7Ø×Ñ˜¤J¨vÓ$6Ô7Ø×Ñ˜¤J¨vÓ$6Ô7Ø×Ñ˜¬*°XÓ*>Ô?Ø×Ñ˜¬*°YÓ*?Ô@Ø×Ñœ{Õ+Ü�tÔ÷ ,à×Ñœ{Õ+Ü�sŒO÷ ,Ð+÷ ,Õ+úç+Õ+ús   ÇHÈH.È
H+È.
H<c                 ó´  • U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S	[        S
5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        g)z+Test :func:`humanfriendly.format_length()`.z0 metresr   z1 metrerc   z	42 metresrk   z1 kmr…  ú15.3 cmç/Ý$�•Ã?z1 cmç{®Gáz„?z1 mmrK  z1 nmrG  N)rì   r
   rö   s    ry   Útest_format_lengthÚ(HumanFriendlyTestCase.test_format_length  sª   € à×Ñ˜¤]°1Ó%5Ô6Ø×Ñ˜¤M°!Ó$4Ô5Ø×Ñ˜¤m°BÓ&7Ô8Ø×Ñ˜¤¨xÓ!8Ô9Ø×Ñ˜¤M°%Ó$8Ô9Ø×Ñ˜¤¨uÓ!5Ô6Ø×Ñ˜¤¨uÓ!5Ô6Ø×Ñ˜¤¨uÓ!5Õ6r|   c                 óÒ  • U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S	5      5        U R                  S
[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  [        5         [        S5        SSS5        U R                  [        5         [        S5        SSS5        g! , (       d  f       N8= f! , (       d  f       g= f)z*Test :func:`humanfriendly.parse_length()`.r   Ú0mrk   r›  ç      ø?ú1.5Ú42mr…  Ú1kmr£  r¢  r¤  Ú1cmrK  Ú1mmrG  Ú1nmry  Nr  )rì   r   r“   r   rö   s    ry   Útest_parse_lengthÚ'HumanFriendlyTestCase.test_parse_length(  s  € à×Ñ˜œL¨Ó.Ô/Ø×Ñ˜œ\¨$Ó/Ô0Ø×Ñ˜œl¨5Ó1Ô2Ø×Ñ˜œ\¨%Ó0Ô1Ø×Ñ˜œ|¨EÓ2Ô3Ø×Ñ˜¤¨YÓ 7Ô8Ø×Ñ˜¤¨UÓ 3Ô4Ø×Ñ˜¤¨UÓ 3Ô4Ø×Ñ˜¤¨UÓ 3Ô4Ø×Ñœ}Õ-Ü˜Ô÷ .à×Ñœ}Õ-Ü˜Ô÷ .Ð-÷ .Õ-úç-Õ-ús   Ä	EÄ2EÅ
EÅ
E&c                 óî  • U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        SS5      5        U R                  S	[        S
5      5        U R                  S	[        SS5      5        U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        S5      5        g)z+Test :func:`humanfriendly.format_number()`.r+  rc   rª  r©  z1.56gg›Óù?z1.567r\  z1,000r…  g)\�Âõ@�@r   z	1,000,000r†  z1,000,000.42gq=
×€„.Az-285.67g…ëQ¸ÚqÀN)rì   r   rö   s    ry   Útest_format_numberÚ(HumanFriendlyTestCase.test_format_number8  sÃ   € à×Ñ˜œm¨AÓ.Ô/Ø×Ñ˜¤¨cÓ 2Ô3Ø×Ñ˜¤¨wÓ!7Ô8Ø×Ñ˜¤-°¸Ó";Ô<Ø×Ñ˜¤-°Ó"5Ô6Ø×Ñ˜¤-°¸Ó";Ô<Ø×Ñ˜¤m°GÓ&<Ô=Ø×Ñ˜¬°zÓ)BÔCà×Ñ˜¤M°'Ó$:Õ;r|   c                 óÚ   • U R                  S[        S5      5        U R                  S[        S5      5        U R                  S[        SSS95        U R                  S[        S5      5        g	)
z*Test :func:`humanfriendly.round_number()`.r+  rc   g      ð?ú1.00T©Ú
keep_widthz3.14g-DTû!	@N)rì   r   rö   s    ry   Útest_round_numberÚ'HumanFriendlyTestCase.test_round_numberE  sX   € à×Ñ˜œl¨1›oÔ.Ø×Ñ˜œl¨3Ó/Ô0Ø×Ñ˜¤¨a¸DÑ!AÔBØ×Ñ˜¤Ð.?Ó!@ÕAr|   c                 óÜ   • [         R                  R                  SS5      n[         R                  R                  [         R                  S   S5      nU R	                  U[        U5      5        g)z)Test :func:`humanfriendly.format_path()`.Ú~ú.vimrcÚHOMEN)r»   r¼   r¿   Úenvironrì   r   ©rw   Úfriendly_pathÚabsolute_paths      ry   Útest_format_pathÚ&HumanFriendlyTestCase.test_format_pathL  sH   € äŸ™Ÿ™ S¨(Ó3ˆÜŸ™Ÿ™¤R§Z¡Z°Ñ%7¸ÓBˆØ×Ñ˜¬°MÓ(BÕCr|   c                 óÜ   • [         R                  R                  SS5      n[         R                  R                  [         R                  S   S5      nU R	                  U[        U5      5        g)z(Test :func:`humanfriendly.parse_path()`.r¼  r½  r¾  N)r»   r¼   r¿   r¿  rì   r   rÀ  s      ry   Útest_parse_pathÚ%HumanFriendlyTestCase.test_parse_pathR  sH   € äŸ™Ÿ™ S¨(Ó3ˆÜŸ™Ÿ™¤R§Z¡Z°Ñ%7¸ÓBˆØ×Ñ˜¬
°=Ó(AÕBr|   c                 ó°  • S//n[        U5      [        S5      R                  5       :X  d   e/ SQ/ SQ/n[        U5      [        S5      R                  5       :X  d   e/ SQn/ SQ/ SQ/n[        [        X5      5      [        S5      R                  5       :X  d   eSS	/nS
S/SS//n[        [        X5      5      [        S5      R                  5       :X  d   eg)z8Test :func:`humanfriendly.tables.format_pretty_table()`.zJust one columnzi
            -------------------
            | Just one column |
            -------------------
        ©rh   ri   ÚThree©r+  Ú2Ú3z‘
            ---------------------
            | One | Two | Three |
            | 1   | 2   | 3     |
            ---------------------
        ©r  r  ÚcúÕ
            ---------------------
            | One | Two | Three |
            ---------------------
            | 1   | 2   | 3     |
            | a   | b   | c     |
            ---------------------
        zJust a labelzImportant numberszRow oneÚ15zRow twoÚ300a/  
            ------------------------------------
            | Just a label | Important numbers |
            ------------------------------------
            | Row one      |                15 |
            | Row two      |               300 |
            ------------------------------------
        N)r*   rS   Ústripr4   )rw   ÚdataÚcolumn_namess      ry   Útest_pretty_tablesÚ(HumanFriendlyTestCase.test_pretty_tablesX  s  € ð #Ð#Ð$ˆÜ" 4Ó(¬Fð 4ó -÷ ‰U‹Wó	ð 	ð ò (ªÐ9ˆÜ" 4Ó(¬Fð 4ó -÷
 ‰U‹Wóð 	ð ò /ˆÚ¢Ð1ˆÜÔ-¨dÓAÓBÄfð Nó G÷ ‰U‹Wóð 	ð ð 'Ð(;Ð<ˆØ˜DÐ! I¨uÐ#5Ð6ˆÜÔ-¨dÓAÓBÄfð Nó G÷ ‰U‹Wóð 	ñ r|   c                 óø   • / SQn/ SQ/ SQ/n[        [        X!5      5      [        S5      R                  5       :X  d   e/ SQn/ SQ/ SQ/n[        [        X!5      5      [        S5      R                  5       :X  d   eg)z8Test :func:`humanfriendly.tables.format_robust_table()`.rÉ  rË  rÎ  z¾
            --------
            One: 1
            Two: 2
            Three: 3
            --------
            One: a
            Two: b
            Three: c
            --------
        ©r  r  zHere comes a
multi line column!á  
            ------------------
            One: 1
            Two: 2
            Three: 3
            ------------------
            One: a
            Two: b
            Three:
            Here comes a
            multi line column!
            ------------------
        N)r4   r+   rS   rÓ  ©rw   rÕ  rÔ  s      ry   Útest_robust_tablesÚ(HumanFriendlyTestCase.test_robust_tables€  s‹   € â.ˆÚ¢Ð1ˆÜÔ-¨dÓAÓBÄfð 
Nó 
G÷ ‰U‹Wó
ð 
	ð 
ò /ˆÚÒ!OÐPˆÜÔ-¨dÓAÓBÄfð Nó G÷ ‰U‹Wóð 	ñ r|   c                 óø   • / SQn/ SQ/ SQ/n[        [        X!5      5      [        S5      R                  5       :X  d   e/ SQn/ SQ/ SQ/n[        [        X!5      5      [        S5      R                  5       :X  d   eg)z7Test :func:`humanfriendly.tables.format_smart_table()`.rÉ  rË  rÎ  rÐ  rÙ  rÚ  N)r4   r-   rS   rÓ  rÛ  s      ry   Útest_smart_tablesÚ'HumanFriendlyTestCase.test_smart_tablesŸ  s‹   € â.ˆÚ¢Ð1ˆÜÔ,¨TÓ@ÓAÄVð Mó F÷ ‰U‹Wóð 	ð ò /ˆÚÒ!OÐPˆÜÔ,¨TÓ@ÓAÄVð Mó F÷ ‰U‹Wóð 	ñ r|   c                 óô   • / SQn/ SQ/ SQ/nU R                  [        X!5      [        S5      R                  5       5        / SQ/ SQ/nU R                  [        U5      [        S5      R                  5       5        g)z5Test :func:`humanfriendly.tables.format_rst_table()`.rÉ  rË  rÎ  zÅ
                ===  ===  =====
                One  Two  Three
                ===  ===  =====
                1    2    3
                a    b    c
                ===  ===  =====
            zm
                =  =  =
                1  2  3
                a  b  c
                =  =  =
            N)rì   r,   rS   ÚrstriprÛ  s      ry   Útest_rst_tablesÚ%HumanFriendlyTestCase.test_rst_tables»  sw   € ò /ˆÚ¢Ð1ˆØ×ÑÜ˜TÓ0Üð ó ÷ ‘“ô
	
ò  ¢Ð1ˆØ×ÑÜ˜TÓ"Üð ó ÷
 ‘“õ	
r|   c                 óÞ   • [        / 5      S:X  d   e[        S/5      S:X  d   e[        SS/5      S:X  d   e[        / SQ5      S:X  d   e[        / SQSS9S	:X  d   e[        / SQS
S9S:X  d   eg)z.Test :func:`humanfriendly.text.concatenate()`.r6  rd   rf   zone and two)rd   rf   Úthreezone, two and threeÚor)Úconjunctionzone, two or threeT)Úserial_commazone, two, and threeN©rR   rö   s    ry   Útest_concatenateÚ&HumanFriendlyTestCase.test_concatenate×  sƒ   € ä˜2‹ "Ó$Ð$Ð$Ü˜E˜7Ó# uÓ,Ð,Ð,Ü˜E 5˜>Ó*¨mÓ;Ð;Ð;ÜÒ2Ó3Ð7KÓKÐKÐKäÒ2ÀÑEÐI\Ó\Ð\Ð\äÒ2ÀÑFÐJ_Ó_Ð_Ñ_r|   c                 ó  • SSK Jn  U R                  U" S5      / 5        U R                  U" S5      S/5        U R                  U" S5      SS/5        U R                  U" S5      / SQ5        U R                  U" S	5      / SQ5        g
)z(Test :func:`humanfriendly.text.split()`.r   )Úsplitr6  r  zfoo, barÚbarzfoo, bar, baz©r  rï  Úbazzfoo,bar,bazN)Úhumanfriendly.textrî  rì   )rw   rî  s     ry   Ú
test_splitÚ HumanFriendlyTestCase.test_splitâ  st   € å,Ø×Ñ™˜r› BÔ'Ø×Ñ™˜u›¨ wÔ/Ø×Ñ™˜zÓ*¨U°E¨NÔ;Ø×Ñ™˜Ó/Ò1FÔGØ×Ñ™˜}Ó-Ò/DÕEr|   c                 ó   • S Hh  u  p[        [        R                  " 5       U-
  5      nU R                  [        UR                  SS9SU-  5        U R                  [        U5      U5        Mj     [        [        R                  " 5       S-
  5      nU R                  UR                  S5        [        5       n[        R                  " S5        U R                  [        UR                  S5      S	5        [        SS
9n[        S5       H$  nU   [        R                  " S5        SSS5        M&     U R                  [        UR                  S5      S5        [        SS
9 nUc   e SSS5        g! , (       d  f       Mv  = f! , (       d  f       g= f)z!Test :func:`humanfriendly.Timer`.)
)rc   rO  )rg   ú	2 seconds)rC  rP  )ru  rR  )i  rS  )i   rT  )i€Q rU  )i £ rV  )i€:	 rW  )i u rX  Tr·  z%i.00gš™™™™™@rö  rc   r   r¶  )Ú	resumablerg   Nz2.00)
r   Útimerì   r   Úelapsed_timeÚstrÚroundedÚsleepÚnormalize_timestampÚrange)rw   ÚsecondsÚtextÚtÚautomatic_timerÚresumable_timerÚiÚtimers           ry   Ú
test_timerÚ HumanFriendlyTestCase.test_timerë  s7  € ó	A‰MˆGô ”d—i’i“k GÑ+Ó,ˆAØ×Ñœ\¨!¯.©.ÀTÑJÈGÐV]ÑL]Ô^Ø×ÑœS ›V TÖ*ñ	Aô ”$—)’)“+ Ñ#Ó$ˆØ×Ñ˜Ÿ™ KÔ0ä›'ˆÜ�
Š
�1Œð
 	×ÑÔ,¨_×-IÑ-IÈ1ÓMÈvÔVä¨$Ñ/ˆÜ�q–ˆAÚ Ü—
’
˜1”÷ !‘ñ ð 	×ÑÔ,¨_×-IÑ-IÈ1ÓMÈvÔVä˜TÒ" eØÑ$Ð$Ñ$÷ #Ð"÷	 !–ú÷ #Õ"ús   ÄE-ÅE?Å-
E<	Å?
Fc                 óž  • [        5       n[        SSUSS9nS H(  nUR                  US9  [        R                  " S5        M*     UR                  5         UR                  5       nUR                  " [        S5      R                  [        S5      nUR                  " [        5       Vs/ sH  oU(       d  M  UPM     nnU R                  [        U5      S	:„  5        U R                  [        S
 U 5       5      5        U R                  [        S U 5       5      5        U R                  [!        [#        U5      5      [!        U5      5        gs  snf )z#Test :func:`humanfriendly.Spinner`.útest spinnerr[  T)ÚlabelÚtotalÚstreamÚinteractive)rc   rg   r\  r[  )Úprogressgš™™™™™É?r6  r   c              3   ó*   #   • U H
  nS U;   v •  M     g7f)r	  Nr�   ©Ú.0Úlines     ry   Ú	<genexpr>Ú5HumanFriendlyTestCase.test_spinner.<locals>.<genexpr>  s   é € ÐE¹u°t˜N¨dÖ2ºuùó   ‚c              3   ó*   #   • U H
  nS U;   v •  M     g7f)Ú%Nr�   r  s     ry   r  r    s   é € Ð:±E¨D˜C 4žK²Eùr  N)r   rD   Ústeprø  rü  ÚclearÚgetvalueÚreplacer3   r0   rî  r/   Ú
assertTruerq   Úallrì   ÚsortedÚset)rw   r  Úspinnerr  r=   r  Úliness          ry   Útest_spinnerÚ"HumanFriendlyTestCase.test_spinner  sû   € ä“ˆÜ °aÀÐTXÑYˆÛ$ˆHØ�L‰L (ˆLÑ+Ü�JŠJ�sŽOñ %ð 	�‰ŒØ—‘Ó"ˆØ—.’.Ô!1°2Ó6ß ™Ô!1°2Ó6ð 	à"(§,¢,¬Ô"?ÓHÑ"?˜$Ã4—Ñ"?ˆÐHØ�‰œ˜E›
 Q™Ô'Ø�‰œÑE¹uÓEÓEÔFØ�‰œÑ:±EÓ:Ó:Ô;Ø×Ñœ¤ E£
Ó+¬V°E«]Õ;ùò	 Is   Â(	E
Â5E
c                 óv   • [        SS9   [        R                  " S5        SSS5        g! , (       d  f       g= f)az  
Test :func:`humanfriendly.AutomaticSpinner`.

There's not a lot to test about the :class:`.AutomaticSpinner` class,
but by at least running it here we are assured that the code functions
on all supported Python versions. :class:`.AutomaticSpinner` is built
on top of the :class:`.Spinner` class so at least we also have the
tests for the :class:`.Spinner` class to back us up.
r	  )r
  rc   N)rC   rø  rü  rö   s    ry   Útest_automatic_spinnerÚ,HumanFriendlyTestCase.test_automatic_spinner   s#   € ô  NÓ3Ü�JŠJ�qŒM÷ 4×3Ö3ús   Š*ª
8c                 óê  ^• U R                  [        5         [        / 5        SSS5        [        [        R
                  5       n[        [        SU5         Sn[        U/5      U:X  d   e SSS5        SSS5        [        [        SS 5         [        SS/5      S:X  d   e SSS5        [        [        SS 5         [        SS/5      S:X  d   e SSS5        [        [        SS	 5         [        SS/5      S:X  d   e SSS5        [        [        SS
 5         [        SS/SS9S:X  d   e SSS5        / SQm[        [        SU4S j5         [        / SQ5      S:X  d   e SSS5        SS/m[        [        SU4S j5         [        / SQ5      S:X  d   e SSS5        SS/m[        [        SU4S j5         [        / SQ5      S:X  d   e SSS5        [        [        SS 5         U R                  [        5         [        / SQ5        SSS5        SSS5        g! , (       d  f       GN= f! , (       d  f       GNÍ= f! , (       d  f       GN×= f! , (       d  f       GNº= f! , (       d  f       GN�= f! , (       d  f       GN€= f! , (       d  f       GNd= f! , (       d  f       GN@= f! , (       d  f       GN= f! , (       d  f       N÷= f! , (       d  f       NÊ= f! , (       d  f       g= f)z7Test :func:`humanfriendly.prompts.prompt_for_choice()`.Nr¸   zonly one option (shortcut)Úinteractive_promptc                 ó   • g)Nr  r�   ©Úps    ry   r°   Ú>HumanFriendlyTestCase.test_prompt_for_choice.<locals>.<lambda>:  s   € Àur|   r  rï  c                 ó   • g)NÚfr�   r*  s    ry   r°   r,  =  ó   € Àsr|   c                 ó   • g)NrÌ  r�   r*  s    ry   r°   r,  @  r/  r|   c                 ó   • g©Nr6  r�   r*  s    ry   r°   r,  C  ó   € Àrr|   ©Údefault)r6  ÚqÚzc                 ó&   >• TR                  S5      $ ©Nr   ©ru   ©r+  Úrepliess    €ry   r°   r,  G  ó   ø€ ÀwÇ{Á{ÐSTÄ~r|   rð  rñ  r  r6  c                 ó&   >• TR                  S5      $ r9  r:  r;  s    €ry   r°   r,  K  r=  r|   )r  rï  rñ  Úquxr?  r›  rÌ  c                 ó&   >• TR                  S5      $ r9  r:  r;  s    €ry   r°   r,  O  r=  r|   c                 ó   • gr2  r�   r*  s    ry   r°   r,  R  r3  r|   rÎ  )
r“   rõ   r"   rÊ   r»   ÚdevnullrH   r„   r   r    )rw   rÍ   Úonly_optionr<  s      @ry   Útest_prompt_for_choiceÚ,HumanFriendlyTestCase.test_prompt_for_choice-  sP  ø€ ð ×ÑœzÕ*Ü˜bÔ!÷ +ô
 ”"—*‘*Ô Ü!¤# w°Õ7Ø:�Ü(¨+¨Ó7¸;ÓFÐFÑF÷ 8÷ ô
 œgÐ';¹_ÕMÜ$ e¨U ^Ó4¸Ó=Ð=Ñ=÷ Nô œgÐ';¹]ÕKÜ$ e¨U ^Ó4¸Ó=Ð=Ñ=÷ Lô œgÐ';¹]ÕKÜ$ e¨U ^Ó4¸Ó=Ð=Ñ=÷ Lô œgÐ';¹\ÕJÜ$ e¨U ^¸UÑCÀuÓLÐLÑL÷ Kò !ˆÜœgÐ';Ô=UÕVÜ$Ò%:Ó;¸uÓDÐDÑD÷ Wð ˜�*ˆÜœgÐ';Ô=UÕVÜ$Ò%AÓBÀeÓKÐKÑK÷ Wð ˜�+ˆÜœgÐ';Ô=UÕVÜ$Ò%:Ó;¸uÓDÐDÑD÷ Wô œgÐ';¹\ÕJØ×"Ñ"Ô#8Õ9Ü!¢/Ô2÷ :÷ KÐJ÷E +Ö*ú÷ 8Ö7ú÷ Öú÷
 NÖMú÷ LÖKú÷ LÖKú÷ KÖJú÷ WÖVú÷ WÖVú÷ WÕVú÷ :Õ9ú÷ KÕJús§   —H ÁIÁH2Á,IÂIÂ=I(Ã,I:ÄJÅJÆJ0Æ<KÇ+K$ÈKÈK$È 
H/È2
I	È<IÉ
IÉ
I%É(
I7É:
J	Ê
JÊ
J-Ê0
J?Ë
KË
K!	ËK$Ë$
K2c                 óˆ  ^^• S H2  m[        [        SU4S j5         [        S5      SL d   e SSS5        M4     S H2  m[        [        SU4S j5         [        S5      S	L d   e SSS5        M4     S
 H.  n[        [        SS 5         [        SUS9UL d   e SSS5        M0     SS/m[        [        SU4S j5         [        SS9 n[        S5      SL d   eSUR	                  5       ;   d   e SSS5        SSS5        [        [        SS 5         S H<  u  p4[        SS9 n[        SUS9SL d   eXBR	                  5       ;   d   e SSS5        M>     SSS5        [        [        SS 5         U R                  [        5         [        S5        SSS5        SSS5        g! , (       d  f       GM¯  = f! , (       d  f       GMŠ  = f! , (       d  f       GMe  = f! , (       d  f       Nñ= f! , (       d  f       Nú= f! , (       d  f       M÷  = f! , (       d  f       NÀ= f! , (       d  f       N•= f! , (       d  f       g= f)z=Test :func:`humanfriendly.prompts.prompt_for_confirmation()`.)r�   ÚYesÚYESÚyÚYr(  c                 ó   >• T$ rŽ   r�   ©r+  Úreplys    €ry   r°   ÚDHumanFriendlyTestCase.test_prompt_for_confirmation.<locals>.<lambda>Z  ó   ø€ É5r|   zAre you sure?TN)r0  ÚNoÚNOÚnÚNc                 ó   >• T$ rŽ   r�   rL  s    €ry   r°   rN  ^  rO  r|   F)TFc                 ó   • gr2  r�   r*  s    ry   r°   rN  b  s   € È2r|   r4  r6  rI  c                 ó&   >• TR                  S5      $ r9  r:  r;  s    €ry   r°   rN  f  r=  r|   ©Úmergedzthere's no default choicec                 ó   • g)NrI  r�   r*  s    ry   r°   rN  k  r/  r|   ))TzY/n)Fzy/N)Nzy/nc                 ó   • gr2  r�   r*  s    ry   r°   rN  q  r3  r|   )rH   r   r!   rF   Úget_textr“   r    )rw   Údefault_choicer‰   Údefault_valueÚexpected_textr<  rM  s        @@ry   Útest_prompt_for_confirmationÚ2HumanFriendlyTestCase.test_prompt_for_confirmationV  sè  ù€ ó 3ˆEÜ!¤'Ð+?ÄÕQÜ.¨Ó?À4ÒGÐGÑG÷ RÑQñ 3ó 0ˆEÜ!¤'Ð+?ÄÕQÜ.¨Ó?À5ÒHÐHÑH÷ RÑQñ 0ó *ˆNÜ!¤'Ð+?ÁÕNÜ.¨ÈÑWÐ[iÒiÐiÑi÷ OÑNñ *ð �s�)ˆÜœgÐ';Ô=UÕVÜ dÒ+¨xÜ.¨Ó?À4ÒGÐGÐGØ2°h×6GÑ6GÓ6IÓIÐIÑI÷ ,÷ Wô
 œgÐ';¹]ÕKÛ0\Ñ,�Ü"¨$Ò/°8Ü2°?ÈMÑZÐ^bÒbÐbÐbØ(×,=Ñ,=Ó,?Ó?Ð?Ñ?÷ 0Ñ/ñ 1]÷ Lô œgÐ';¹\ÕJØ×"Ñ"Ô#8Õ9Ü'¨Ô8÷ :÷ KÐJ÷/ R×Qú÷ R×Qú÷ O×Nú÷
 ,Õ+ú÷ WÕVú÷ 0Ö/ú÷ LÕKú÷ :Õ9ú÷ KÕJús�   �F$ÁF7Â
G
Ã 
G.Ã
'GÃ2G.ÄHÄ%%G?ÅHÅ1H3ÆH"ÆH3Æ$
F4	Æ7
G	Ç

G	Ç
G+	Ç'G.Ç.
G<Ç?
HÈ	HÈ
HÈ"
H0	È,H3È3
Ic                 óX  • [        [        R                  5       n[        [        SU5         Sn[        SUS9U:X  d   eU R                  [        5         [        S5        SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z6Test :func:`humanfriendly.prompts.prompt_for_input()`.r¸   zTo seek the holy grail!zWhat is your quest?r4  zWhat is your favorite color?N)rÊ   r»   rB  rH   r„   r#   r“   ÚEOFError)rw   rÍ   r]  s      ry   Útest_prompt_for_inputÚ+HumanFriendlyTestCase.test_prompt_for_inputu  s~   € ä”"—*‘*Ô Ü!¤# w°Õ7à 9�Ü'Ð(=À}ÑUÐYfÓfÐfÐfð ×&Ñ&¤xÕ0Ü$Ð%CÔD÷ 1÷ 8÷ Ð÷ 1Õ0ú÷ 8Õ7ú÷ Õús:   šB¬(B
ÁA9Á B
Á(BÁ9
BÂB
Â

B	ÂBÂ
B)c                 óî  • [        [        5      u  pSU;   d   e[        [        S5      u  pSU;   d   e[        [        S5      u  pUS:w  d   e[        [        S5      u  pUR                  " 5       S:X  d   e[        R                  " SS5      n[        [        S	U-  5      u  pUR                  " 5       [        U5      :X  d   e[        R                  " SS5      n[        [        S	U-  S
5      u  pUR                  " 5       [        USS9:X  d   e[        R                  " SS5      n[        [        SU-  5      u  pUR                  " 5       [        U5      :X  d   e[        U5      S-  n[        [        SU-  5      u  pUR                  " 5       [        U5      :X  d   e[        [        SSSS9u  pUR                  " 5       [        S5      R                  5       :X  d   e[        R                  " SS5      n[        [        SU-  5      u  pUR                  " 5       [        U5      :X  d   e[        [        S5      u  p[        U5      [        S5      :X  d   e[        [        S5      u  p[        U5      [        SSS9:X  d   e[        [        S5      u  p[        U5      [        S5      :X  d   e[        [        S5      u  p[        U5      [        S5      :X  d   e[        [        S S!S"S#5      u  pUS$:X  d   e[        [        S%5      u  pUS:X  d   eUR                  " 5        Vs/ sH  n[        U5      PM     nnS&U;   d   eS'U;   d   eS(U;   d   eS)U;   d   eS*U;   d   eS+U;   d   eS,U;   d   eg-s  snf ).z Test the command line interface.zUsage:z--helpz--unsupported-optionr   z--format-number=1234567z	1,234,567r“  r–  z--format-size=%iz--binaryTr”  z--format-length=%igÍÌÌÌÌÈ@z--format-length=%fz--format-tablez--delimiter=	z1	2	3
4	5	6
7	8	9r¹   z‹
            -------------
            | 1 | 2 | 3 |
            | 4 | 5 | 6 |
            | 7 | 8 | 9 |
            -------------
        rZ  iX  z--format-timespan=%iz--parse-size=5 KBz5 KBz--parse-size=5 YiBz5 YBz--parse-length=5 kmz5 kmz--parse-length=1.05 kmz1.05 kmz--run-commandÚbashz-czsleep 2 && exit 42rk   z--demozText styles:zForeground colors:zBackground colors:z!256 color mode (standard colors):z'256 color mode (high-intensity colors):z256 color mode (216 colors):z#256 color mode (gray scale colors):N)rM   r   rÓ  r  Úrandintr   r
   ÚfloatrS   r   Úintr   r   Ú
splitlinesr4   )rw   r¶   r=   Úrandom_byte_countÚ
random_lenÚrandom_timespanr  r!  s           ry   Útest_cliÚHumanFriendlyTestCase.test_cli�  sk  € ô %¤T›]Ñˆ
Ø˜6Ó!Ð!Ð!ä$¤T¨8Ó4Ñˆ
Ø˜6Ó!Ð!Ð!ä$¤TÐ+AÓBÑˆ
Ø˜Q‹Ðˆä$¤TÐ+DÓEÑˆ
Ø�|Š|‹~ Ó,Ð,Ð,ä"ŸNšN¨4°Ó=ÐÜ$¤TÐ+=Ð@QÑ+QÓRÑˆ
Ø�|Š|‹~¤Ð->Ó!?Ó?Ð?Ð?ä"ŸNšN¨4°Ó=ÐÜ$¤TÐ+=Ð@QÑ+QÐS]Ó^Ñˆ
Ø�|Š|‹~¤Ð->ÀtÑ!LÓLÐLÐLä—^’^ D¨+Ó6ˆ
Ü$¤TÐ+?À*Ñ+LÓMÑˆ
Ø�|Š|‹~¤¨zÓ!:Ó:Ð:Ð:Ü˜:Ó&¨Ñ0ˆ
Ü$¤TÐ+?À*Ñ+LÓMÑˆ
Ø�|Š|‹~¤¨zÓ!:Ó:Ð:Ð:ä$¤TÐ+;Ð=MÐUpÑqÑˆ
Ø�|Š|‹~¤ð )ó "÷ ‰U‹Wóð 	ð ô !Ÿ.š.¨¨CÓ0ˆÜ$¤TÐ+AÀOÑ+SÓTÑˆ
Ø�|Š|‹~¤°Ó!AÓAÐAÐAä$¤TÐ+>Ó?Ñˆ
Ü�6‹{œj¨Ó0Ó0Ð0Ð0ä$¤TÐ+?Ó@Ñˆ
Ü�6‹{œj¨¸Ñ=Ó=Ð=Ð=ä$¤TÐ+@ÓAÑˆ
Ü�6‹{œl¨6Ó2Ó2Ð2Ð2Ü$¤TÐ+CÓDÑˆ
Ü�V‹}¤¨YÓ 7Ó7Ð7Ð7ä$¤T¨?¸FÀDÐJ^Ó_Ñˆ
Ø˜RÓÐÐô %¤T¨8Ó4Ñˆ
Ø˜Q‹ÐˆØ.4×.?Ò.?Ô.AÓBÑ.A d”˜DÖ!Ñ.AˆÐBØ Ó&Ð&Ð&Ø# uÓ,Ð,Ð,Ø# uÓ,Ð,Ð,Ø2°eÓ;Ð;Ð;Ø8¸EÓAÐAÐAØ-°Ó6Ð6Ð6Ø4¸Ó=Ð=Ñ=ùò Cs   Ì#M2c                 ó¾  • [        SS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SS9[        < S	[        < 3:X  d   e[        SS
9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SSS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   e[        SS9[        < S[        < 3:X  d   eU R                  [        5         [        SS9  SSS5        g! , (       d  f       g= f) z1Test :func:`humanfriendly.terminal.ansi_style()`.T©Úboldr+  )ÚfaintrÌ  )ÚitalicrÍ  )Ú	underlineÚ4)ÚinverseÚ7)Ústrike_throughÚ9Úblue©ÚcolorÚ34)Ú
backgroundÚ44)r}  ÚbrightÚ94éÖ   z38;5;214z39;5;214)r   r   r   z
38;2;0;0;0)éÿ   r„  r„  z38;2;255;255;255)é2   éd   é–   z48;2;50;100;150ÚunknownN)r5   r.   r2   r“   rõ   rö   s    ry   Útest_ansi_styleÚ%HumanFriendlyTestCase.test_ansi_styleÊ  sy  € ä˜tÑ$·8¾XÐ(FÓFÐFÐFÜ Ñ%·H¾hÐ)GÓGÐGÐGÜ Ñ&·X¾xÐ*HÓHÐHÐHÜ DÑ)¿Æ(Ð-KÓKÐKÐKÜ $Ñ'·hÆÐ+IÓIÐIÐIÜ¨Ñ.¿XÆxÐ2PÓPÐPÐPÜ Ñ'·xÆÐ+JÓJÐJÐJÜ VÑ,¿HÆhÐ0OÓOÐOÐOÜ ¨tÑ4ÇHÎhÐ8WÓWÐWÐWÜ Ñ$¿(ÆHÐ(MÓMÐMÐMÜ SÑ)¿xÎÐ-RÓRÐRÐRÜ 	Ñ*Ç(ÎHÐ.UÓUÐUÐUÜ Ñ0ÏhÖX`Ð4aÓaÐaÐaÜ ^Ñ4×QYÖ[cÐ8dÓdÐdÐdØ×ÑœzÕ*Ü˜YÒ'÷ +×*Ö*ús   Æ;
GÇ
Gc                 óÆ   • Sn[        U5      [        U5      :X  d   e[        USS9nX!:w  d   e[        U5      [        U5      :”  d   e[        U5      [        U5      :X  d   eg)z1Test :func:`humanfriendly.terminal.ansi_width()`.ÚWhateverTrq  N)rq   r6   r7   )rw   r   Úwrappeds      ry   Útest_ansi_widthÚ%HumanFriendlyTestCase.test_ansi_widthÝ  sa   € àˆä�4‹yœJ tÓ,Ó,Ð,Ð,ä˜D tÑ,ˆà‹Ðˆä�7‹|œc $›iÓ'Ð'Ð'ä�4‹yœJ wÓ/Ó/Ð/Ñ/r|   c                 óº   • SnU[        U5      :X  d   e[        USS9R                  [        5      (       d   e[        USS9R                  [        5      (       d   eg)z0Test :func:`humanfriendly.terminal.ansi_wrap()`.rŒ  Trq  N)r7   Ú
startswithr.   Úendswithr1   ©rw   r   s     ry   Útest_ansi_wrapÚ$HumanFriendlyTestCase.test_ansi_wrapë  sU   € àˆà”y “Ó&Ð&Ð&ä˜ DÑ)×4Ñ4´X×>Ñ>Ð>Ð>ä˜ DÑ)×2Ñ2´:×>Ñ>Ð>Ñ>r|   c                 ó  • [        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S	5      S
:X  d   e[        S5      S
:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S :X  d   e[        S!5      S:X  d   eS" nS#[        S$US%9;  d   eS#[        S&US%9;   d   e[        S'5      (       d   eg())z@Test the :func:`humanfriendly.terminal.html_to_ansi()` function.zJust some plain textz+<a href="https://python.org">python.org</a>z=[0m[4;94mpython.org[0m ([0m[4;94mhttps://python.org[0m)z@<a href="mailto:peter@peterodding.com">peter@peterodding.com</a>z$[0m[4;94mpeter@peterodding.com[0mzLet's try <b>bold</b>zLet's try [0m[1mbold[0mz5Let's try <span style="font-weight: bold">bold</span>zLet's try <i>italic</i>zLet's try [0m[3mitalic[0mz8Let's try <span style="font-style: italic">italic</span>zLet's try <ins>underline</ins>zLet's try [0m[4munderline[0mzCLet's try <span style="text-decoration: underline">underline</span>zLet's try <s>strike-through</s>z$Let's try [0m[9mstrike-through[0mzKLet's try <span style="text-decoration: line-through">strike-through</span>z$Let's try <code>pre-formatted</code>z$Let's try [0m[33mpre-formatted[0mz6Let's try <span style="color: #AABBCC">text colors</s>z0Let's try [0m[38;2;170;187;204mtext colors[0mzOLet's try <span style="background-color: rgb(50, 50, 50)">background colors</s>z3Let's try [0m[48;2;50;50;50mbackground colors[0mz Let's try some<br>line<br>breakszLet's try some
line
breaksz&#38;Ú&z&amp;z&gt;Ú>z&lt;Ú<z&#x26;c                 ó&   • U R                  SS5      $ )Nú:wink:z;-))r  )r   s    ry   ÚcallbackÚ9HumanFriendlyTestCase.test_html_to_ansi.<locals>.callback'  s   € Ø—<‘< ¨%Ó0Ð0r|   r›  z<b>:wink:</b>)rœ  z<code>:wink:</code>a  
            Tweakers zit er idd nog steeds:<br><br>
            peter@peter-work&gt; curl -s <a href="tweakers.net">tweakers.net</a> | grep -i hosting<br>
            &lt;a href="<a href="http://www.true.nl/webhosting/">http://www.true.nl/webhosting/</a>"
                rel="external" id="true" title="Hosting door True"&gt;&lt;/a&gt;<br>
            Hosting door &lt;a href="<a href="http://www.true.nl/vps/">http://www.true.nl/vps/</a>"
                title="VPS hosting" rel="external"&gt;True</a>
        NrA   )rw   rœ  s     ry   Útest_html_to_ansiÚ'HumanFriendlyTestCase.test_html_to_ansiõ  sW  € äÐ2Ó3Ð7MÓMÐMÐMäÐIÓJØ]ó^ð 	^ð ^ô Ð^Ó_Ø;ó<ð 	<ð <ô Ð3Ó4Ð8]Ó]Ð]Ð]ÜÐUÓVØ1ó2ð 	2ð 2ô Ð5Ó6Ø3ó4ð 	4ð 4äÐXÓYØ3ó4ð 	4ð 4ô Ð<Ó=Ø6ó7ð 	7ð 7äÐcÓdØ6ó7ð 	7ð 7ô Ð=Ó>Ø;ó<ð 	<ð <äÐkÓlØ;ó<ð 	<ð <ô ÐBÓCØ;ó<ð 	<ð <ô ÐVÓWØGóHð 	Hð Hô ÐoÓpØJóKð 	Kð Kô Ð>Ó?Ø*ó+ð 	+ð +ô ˜GÓ$¨Ó+Ð+Ð+ä˜GÓ$¨Ó+Ð+Ð+Ü˜FÓ# sÓ*Ð*Ð*Ü˜FÓ# sÓ*Ð*Ð*ä˜HÓ%¨Ó,Ð,Ð,ò	1ð œ|¨OÀhÑOÓOÐOÐOàœ<Ð(=ÈÑQÓQÐQÐQô ð ÷ ñ ð 	ñ r|   c                 ó  • Sn[        SS9 n[        U5        U R                  U/UR                  R	                  5       5        U R                  / UR
                  R	                  5       5        SSS5        g! , (       d  f       g= f)z:Test the :func:`humanfriendly.terminal.output()` function.z%Standard output generated by output()FrW  N)rF   r=   rì   r…   rˆ   r‡   ©rw   r   r‰   s      ry   Útest_generate_outputÚ*HumanFriendlyTestCase.test_generate_output9  s`   € à6ˆÜ %Ò(¨HÜ�4ŒLØ×Ñ˜d˜V X§_¡_×%>Ñ%>Ó%@ÔAØ×Ñ˜R §¡×!:Ñ!:Ó!<Ô=÷ )×(Ö(úó   ŒA!A6Á6
Bc                 ó  • Sn[        SS9 n[        U5        U R                  / UR                  R	                  5       5        U R                  U/UR
                  R	                  5       5        SSS5        g! , (       d  f       g= f)z;Test the :func:`humanfriendly.terminal.message()` function.z%Standard error generated by message()FrW  N)rF   r<   rì   r…   rˆ   r‡   r¡  s      ry   Útest_generate_messageÚ+HumanFriendlyTestCase.test_generate_messageA  s`   € à6ˆÜ %Ò(¨HÜ�DŒMØ×Ñ˜R §¡×!:Ñ!:Ó!<Ô=Ø×Ñ˜d˜V X§_¡_×%>Ñ%>Ó%@ÔA÷ )×(Ö(úr¤  c                 ó&  • SSK Jn  SnU" SS9 n[        U5        U R                  / UR                  R                  5       5        U R                  [        USS9/U R                  UR                  5      5        SSS5        g! , (       d  f       g= f)	z;Test the :func:`humanfriendly.terminal.warning()` function.r   ©rF   z%Standard error generated by warning()FrW  Úredr|  N)	r‰   rF   r@   rì   r…   rˆ   r7   Úignore_coverage_warningr‡   )rw   rF   r   r‰   s       ry   Útest_generate_warningÚ+HumanFriendlyTestCase.test_generate_warningI  sp   € å*Ø6ˆÙ %Ò(¨HÜ�DŒMØ×Ñ˜R §¡×!:Ñ!:Ó!<Ô=Ø×Ñœi¨°EÑ:Ð;¸T×=YÑ=YÐZb×ZiÑZiÓ=jÔk÷ )×(Ö(ús   �A*BÂ
Bc                 ó\   • UR                  5        Vs/ sH  nSU;  d  M  UPM     sn$ s  snf )zÛ
Filter out coverage.py warning from standard error.

This is intended to remove the following line from the lines captured
on the standard error stream:

Coverage.py warning: No data was collected. (no-data-collected)
zno-data-collected)rˆ   )rw   r  r  s      ry   r«  Ú-HumanFriendlyTestCase.ignore_coverage_warningR  s0   € ð "(×!1Ñ!1Ô!3ÓWÑ!3˜Ð7JÐRVÑ7V—Ñ!3ÑWÐWùÒWs   “	) )c                 óâ   • [        S5      S/:X  d   e[        S5      SS/:X  d   e[        S5      SS/:X  d   e[        S5      S/:X  d   e[        S5      S/:X  d   e[        S	5      / S
Q:X  d   eg)z<Test :func:`humanfriendly.terminal.clean_terminal_output()`.r  r  rï  zfoobar
bazrñ  zaaaabÚabazaaabzfoo
bar
baz


rð  N)r8   rö   s    ry   Útest_clean_outputÚ'HumanFriendlyTestCase.test_clean_output]  s†   € ô % UÓ+°¨wÓ6Ð6Ð6ä$ ZÓ0°U¸E°NÓBÐBÐBä$ _Ó5¸%À¸ÓGÐGÐGä$ YÓ/°E°7Ó:Ð:Ð:ä$ ZÓ0°U°GÓ;Ð;Ð;ä$Ð%:Ó;Ò?TÓTÐTÑTr|   c                 ó¶  • [        5       u  pUS:”  d   eUS:”  d   e[        R                  n[        R                  n[        R                  n [        5       [        l        [        5       [        l        [        5       [        l        [        5       u  pUS:”  d   eUS:”  d   e[        R                  S   n S[        R                  S'   [        5       u  pUS:”  d   eUS:”  d   e U[        R                  S'    U[        l        U[        l        U[        l        g! U[        R                  S'   f = f! U[        l        U[        l        U[        l        f = f)z9Test :func:`humanfriendly.terminal.find_terminal_size()`.r   ÚPATHr6  N)r:   r„   r¸   r…   r‡   r   r»   r¿  )rw   r!  ÚcolumnsÚsaved_stdinÚsaved_stdoutÚsaved_stderrÚ
saved_paths          ry   Útest_find_terminal_sizeÚ-HumanFriendlyTestCase.test_find_terminal_sizel  s  € ä+Ó-‰ˆð �q‹yÐˆyØ˜‹{Ðˆ{ô
 —i‘iˆÜ—z‘zˆÜ—z‘zˆð	&ä ›
ŒCŒIÜ!›ŒCŒJÜ!›ŒCŒJô 0Ó1‰NˆEØ˜1“9Ð�9Ø˜Q“;Ð�;ô Ÿ™ FÑ+ˆJð0Ø%'”—
‘
˜6Ñ"ä!3Ó!5‘�Ø˜q“yÐ �yØ “{Ð"‘{à%/”—
‘
˜6Ò"à#ŒCŒIØ%ŒCŒJØ%ŒC�Jøð	 &0”—
‘
˜6Ò"ûà#ŒCŒIØ%ŒCŒJØ%ŒC�Jús%   ÁA(D5 Â7/D Ã'D5 ÄD2Ä2D5 Ä5#Ec                 óœ  • SSK Jn  [        [        4 H“  n[        R
                  [        R                  4 H#  nU" 5          U" U5      (       d   e SSS5        M%     [        [        R                  5       nU" U5      (       a   e SSS5        U" [        5       5      (       d  M“   e   g! , (       d  f       M„  = f! , (       d  f       N<= f)z8Test the functions that check for terminal capabilities.r   r©  N)r‰   rF   r9   r?   r„   r…   r‡   rÊ   r»   rB  rß   )rw   rF   Útest_streamr  rÍ   s        ry   Útest_terminal_capabilitiesÚ0HumanFriendlyTestCase.test_terminal_capabilities–  s›   € å*Ü0Ô2JÓJˆKô
 Ÿ*™*¤c§j¡jÓ0�Ù"•_Ù& v×.Ñ.Ð.Ñ.÷ %‘_ñ 1ô ”b—j‘jÔ! VÙ& v×.Ñ.Ð.Ð.Ð.÷ "ñ #¤6£8×,Ó,Ð,Ð,ò K÷ %–_ú÷ "Õ!ús   Á B+Á6B=Â+
B:Â=
C	c                 ó  • [         R                  R                  SS5      n S[         R                  S'   SR                  S [	        S5       5       5      n[        5        n[        U5        X#R                  5       ;   d   e SSS5        Ub  U[         R                  S'   g[         R                  R                  S5        g! , (       d  f       NE= f! Ub  U[         R                  S'   f [         R                  R                  S5        f = f)z1Test :func:`humanfriendly.terminal.show_pager()`.ÚPAGERNÚcatrù   c              3   ó6   #   • U H  n[        S 5      v •  M     g7f)é   N)rV   )r  r  s     ry   r  Ú8HumanFriendlyTestCase.test_show_pager.<locals>.<genexpr>°  s   é € Ð#I¹y¸!¤M°"×$5Ð$5ºyùs   ‚r…  )	r»   r¿  rt   r¿   rþ  rF   r>   r[  ru   )rw   Úoriginal_pagerÚrandom_textr‰   s       ry   Útest_show_pagerÚ%HumanFriendlyTestCase.test_show_pager§  sÇ   € äŸ™Ÿ™¨°Ó6ˆð	(ð #(ŒB�J‰J�wÑð Ÿ)™)Ñ#I¼uÀR¼yÓ#IÓIˆKä” HÜ˜;Ô'Ø"×&7Ñ&7Ó&9Ó9Ð9Ñ9÷ !ð Ñ)à&4”—
‘
˜7Ò#ô —
‘
—‘˜wÕ'÷ !•ûð Ñ)à&4”—
‘
˜7Ò#ô —
‘
—‘˜wÕ'ús#   ¢>C Á !CÂC Ã
CÃC Ã8D
c                 óR  ^• S[        S5      ;  d   eS[        [        SSS95      ;   d   eSS/nS H·  n[        R                  R	                  SS	5      n U[        R                  S'   [        5       mUS
:X  a  [        U4S jU 5       5      (       d   eO[        U4S jU 5       5      (       a   eUb  U[        R                  S'   M˜  [        R                  R                  S5        M¹     g	! Ub  U[        R                  S'   f [        R                  R                  S5        f = f)z8Test :func:`humanfriendly.terminal.get_pager_command()`.z--RAW-CONTROL-CHARSzUsage messageTrq  z	--no-initz--quit-if-one-screen)rÃ  ÚlessrÂ  NrÌ  c              3   ó*   >#   • U H	  oT;   v •  M     g 7frŽ   r�   ©r  ÚoptÚcommand_lines     €ry   r  Ú?HumanFriendlyTestCase.test_get_pager_command.<locals>.<genexpr>Î  s   øé € ÐWÑ>V°s lÖ2Ò>Vùó   ƒc              3   ó*   >#   • U H	  oT;   v •  M     g 7frŽ   r�   rÎ  s     €ry   r  rÑ  Ð  s   øé € Ð"[ÑBZ¸3¨,Ö#6ÒBZùrÒ  )r;   r7   r»   r¿  rt   r  Úanyru   )rw   Úoptions_specific_to_lessÚpagerrÇ  rÐ  s       @ry   Útest_get_pager_commandÚ,HumanFriendlyTestCase.test_get_pager_command½  s  ø€ ð %Ô,=¸oÓ,NÓNÐNÐNà$Ô(9¼)ÀOÐZ^Ñ:_Ó(`Ó`Ð`Ð`à$/Ð1GÐ#HÐ Û"ˆEÜŸZ™ZŸ^™^¨G°TÓ:ˆNð,à&+”—
‘
˜7Ñ#ä0Ó2�à˜F“?ÜÔWÑ>VÓW×WÑWÐWÑWä"Ô"[ÑBZÓ"[×[Ñ[Ð[Ð[à!Ñ-à*8”B—J‘J˜wÓ'ô —J‘J—N‘N 7Ö+ò% #øð "Ñ-à*8”B—J‘J˜wÒ'ô —J‘J—N‘N 7Õ+ús   ÁAC.Ã.8D&c                 óN   • [        [        S5      5      [        / SQ5      :X  d   eg)z7Test :func:`humanfriendly.usage.find_meta_variables()`.zå
            Here's one example: --format-number=VALUE
            Here's another example: --format-size=BYTES
            A final example: --format-timespan=SECONDS
            This line doesn't contain a META variable.
        )ÚVALUEÚBYTESÚSECONDSN)r  rX   rö   s    ry   Útest_find_meta_variablesÚ.HumanFriendlyTestCase.test_find_meta_variablesÙ  s1   € äÔ)ð +ó ó ô
 Ò5Ó6ó7ð 	7ñ 7r|   c                 óz   • U R                  S5      u  pSU;   d   eSU;   d   eSU;   d   eSU;   d   eSU;   d   eg)z?Test :func:`humanfriendly.usage.parse_usage()` (a simple case).z»
            Usage: my-fancy-app [OPTIONS]

            Boring description.

            Supported options:

              -h, --help

                Show this message and exit.
        úUsage: my-fancy-app [OPTIONS]zBoring description.úSupported options:z
-h, --helpzShow this message and exit.N©Úpreprocess_parse_result©rw   ÚintroductionÚoptionss      ry   Útest_parse_usage_simpleÚ-HumanFriendlyTestCase.test_parse_usage_simpleâ  sb   € à $× <Ñ <ð 
>ó 
!Ñˆð /°,Ó>Ð>Ð>Ø$¨Ó4Ð4Ð4Ø# |Ó3Ð3Ð3à˜wÓ&Ð&Ð&Ø,°Ó7Ð7Ñ7r|   c                 ó¼   • U R                  S5      u  pSU;   d   e[        S U 5       5      (       d   eSU;   d   eSU;   d   eSU;   d   eSU;   d   eSU;   d   eg	)
z?Test :func:`humanfriendly.usage.parse_usage()` (a tricky case).a<  
            Usage: my-fancy-app [OPTIONS]

            Here's the introduction to my-fancy-app. Some of the lines in the
            introduction start with a command line option just to confuse the
            parsing algorithm :-)

            For example
            --an-awesome-option
            is still part of the introduction.

            Supported options:

              -a, --an-awesome-option

                Explanation why this is an awesome option.

              -b, --a-boring-option

                Explanation why this is a boring option.
        rà  c              3   ó*   #   • U H
  nS U;   v •  M     g7f)zstill part of the introductionNr�   )r  r+  s     ry   r  Ú@HumanFriendlyTestCase.test_parse_usage_tricky.<locals>.<genexpr>  s   é € ÐOÁ,¸QÐ3°qÖ8Â,ùr  rá  z-a, --an-awesome-optionz*Explanation why this is an awesome option.z-b, --a-boring-optionz(Explanation why this is a boring option.N)rã  rÔ  rä  s      ry   Útest_parse_usage_trickyÚ-HumanFriendlyTestCase.test_parse_usage_tricky÷  s‡   € à $× <Ñ <ð >ó !Ñˆð, /°,Ó>Ð>Ð>ÜÑOÁ,ÓO×OÑOÐOÐOØ# |Ó3Ð3Ð3à(¨GÓ3Ð3Ð3Ø;¸wÓFÐFÐFØ&¨'Ó1Ð1Ð1Ø9¸WÓDÐDÑDr|   c                 óš   • U R                  S5      u  pSU;   d   eSU;   d   eSU;   d   eSU;   d   eSU;   d   eSU;   d   eSU;   d   eg	)
zWTest :func:`humanfriendly.usage.parse_usage()` against option labels containing commas.a<  
            Usage: my-fancy-app [OPTIONS]

            Some introduction goes here.

            Supported options:

              -f, --first-option

                Explanation of first option.

              -s, --second-option=WITH,COMMA

                This should be a separate option's description.
        rà  zSome introduction goes here.rá  z-f, --first-optionzExplanation of first option.z-s, --second-option=WITH,COMMAz/This should be a separate option's description.Nrâ  rä  s      ry   Útest_parse_usage_commasÚ-HumanFriendlyTestCase.test_parse_usage_commas  s~   € à $× <Ñ <ð >ó !Ñˆð  /°,Ó>Ð>Ð>Ø-°Ó=Ð=Ð=Ø# |Ó3Ð3Ð3à# wÓ.Ð.Ð.Ø-°Ó8Ð8Ð8Ø/°7Ó:Ð:Ð:Ø@ÀGÓKÐKÑKr|   c                 óJ   • [        S [        [        U5      5       5       5      $ )z:Ignore leading/trailing whitespace in usage parsing tests.c              3   óf   #   • U H#  o Vs/ sH  o"R                  5       PM     snv •  M%     g s  snf 7frŽ   )rÓ  )r  Úrr+  s      ry   r  Ú@HumanFriendlyTestCase.preprocess_parse_result.<locals>.<genexpr>5  s(   é € ÐOÑ5N°¨Ó+© A—g‘g–i©Ö+Ò5NùÒ+ùs   ‚1Š,¢1)ÚtuplerZ   rS   r“  s     ry   rã  Ú-HumanFriendlyTestCase.preprocess_parse_result3  s   € äÑO´[ÄÈÃÔ5NÓOÓOÐOr|   c                 ó„  • Sn[        U5      n[        U5      [        U5      :”  d   eUR                  S5      (       d   eSn[        U5      n[        U5      [        U5      :”  d   eX;   d   eUR                  U5      (       a   eSn[        U5      nUR                  5       n[        US   ;   d   e[        US   ;  d   eg)z0Test :func:`humanfriendly.usage.format_usage()`.zJust one --optionz	Just one zUsage: humanfriendly [OPTIONS]z^--valid-option=VALID_METAVAR
VALID_METAVAR is bogus
INVALID_METAVAR should not be highlighted
rc   rg   N)rY   rq   r‘  rj  r.   )rw   Ú
usage_textÚformatted_textÚformatted_liness       ry   Útest_format_usageÚ'HumanFriendlyTestCase.test_format_usage7  sÔ   € ð )ˆ
Ü% jÓ1ˆÜ�>Ó"¤S¨£_Ó4Ð4Ð4Ø×(Ñ(¨×5Ñ5Ð5Ð5à5ˆ
Ü% jÓ1ˆÜ�>Ó"¤S¨£_Ó4Ð4Ð4ØÓ+Ð+Ð+Ø!×,Ñ,¨Z×8Ñ8Ð8Ð8ð:ð 	ô
 & jÓ1ˆØ(×3Ñ3Ó5ˆä˜?¨1Ñ-Ó-Ð-Ð-ä˜¨qÑ1Ó1Ð1Ñ1r|   c                 ó®   • [        S5      S:X  d   e[        S5      S:X  d   eS[        [        S5      5      ;   d   e[        S S 5       5      (       d   eg	)
z0Test :func:`humanfriendly.usage.render_usage()`.zUsage: some-command WITH ARGSz#**Usage:** `some-command WITH ARGS`rá  z**Supported options:**z
code-blockz_
            Here comes a shell command:

              $ echo test
              test
        c              3   óN   #   • U H  nU[        [        S 5      5      ;   v •  M     g7f)zm
            Supported options:

              -n, --dry-run

                Don't change anything.
        N)r[   rS   )r  Útokens     ry   r  Ú:HumanFriendlyTestCase.test_render_usage.<locals>.<genexpr>[  s3   é € ð 4ñ 3�%ð œL¬ð 1ó *ó ö ò 3ùs   ‚#%)z`-n`z`--dry-run`N)r[   rS   r  rö   s    ry   Útest_render_usageÚ'HumanFriendlyTestCase.test_render_usageQ  sy   € äÐ;Ó<Ð@eÓeÐeÐeÜÐ0Ó1Ð5MÓMÐMÐMØœ|¬Fð 4ó -ó  ó ð 	ð ô ñ 4ñ 3ó4÷ 4ñ 4ð 	4ñ 4r|   c                 óH  • [        SS5      S 5       n[        5       n[        [        SU5         U" SS5      S:X  d   eU R	                  [
        5         U" SSS5        SSS5        SSS5        UR                  (       d   eg! , (       d  f       N*= f! , (       d  f       N3= f)z.Test the deprecated_args() decorator function.r  rï  c                  óH   • U S   S:X  d   eU R                  S5      S;   d   eg)Nr  rï  )Nrï  rk   )rt   )ræ  s    ry   Útest_functionÚAHumanFriendlyTestCase.test_deprecated_args.<locals>.test_functione  s.   € à˜5‘> UÓ*Ð*Ð*Ø—;‘;˜uÓ%¨Ó6Ð6Ð6Ør|   Úwarnrk   rñ  N)r   r\   rH   Úwarningsr“   Ú	TypeErrorrœ   )rw   r  Úfake_fns      ry   Útest_deprecated_argsÚ*HumanFriendlyTestCase.test_deprecated_argsc  sŒ   € ä	˜ Ó	&ñ	ó 
'ð	ô “+ˆÜœh¨°Õ8Ù  ¨Ó.°"Ó4Ð4Ð4Ø×"Ñ"¤9Õ-Ù˜e U¨EÔ2÷ .÷ 9ð ×!×!Ð!Ñ!÷ .Õ-ú÷ 9Õ8ús#   ®%BÁBÁBÂ
B	ÂBÂ
B!c                 ó  • [        5       n[        [        SU5         [        R                  [
           n[        SS9n[        X#5      nUR                  [        :X  d   e SSS5        UR                  (       d   eg! , (       d  f       N"= f)ú@Test that the DeprecationProxy class emits deprecation warnings.r  úhumanfriendly.text.concatenaterê  N)
r\   rH   r  r„   Úmodulesr×   rr   r   rR   rœ   )rw   r
  ÚmoduleÚaliasesÚproxys        ry   Ú$test_alias_proxy_deprecation_warningÚ:HumanFriendlyTestCase.test_alias_proxy_deprecation_warningq  sk   € ä“+ˆÜœh¨°Õ8Ü—[‘[¤Ñ*ˆFÜÐ'GÑHˆGÜ$ VÓ5ˆEØ×$Ñ$¬Ó3Ð3Ñ3÷	 9ð
 ×!×!Ð!Ñ!÷ 9Õ8ús   œAA;Á;
B	c                 ó*  • [        [        R                  S[        R                  " S5      5         [        [        SS9  S[        [        R                  [           5      ;   d   eS[        [        5      ;   d   e SSS5        g! , (       d  f       g= f)r  Úsphinxr  rê  rR   N)	rI   r„   r  ÚtypesÚ
ModuleTyper   r×   Údirr   rö   s    ry   Ú$test_alias_proxy_sphinx_compensationÚ:HumanFriendlyTestCase.test_alias_proxy_sphinx_compensation{  sd   € äœŸ™ h´×0@Ò0@ÀÓ0JÕKÜœ8Ð1QÒRØ ¤C¬¯©´HÑ(=Ó$>Ó>Ð>Ð>Ø ¤K´Ó$9Ó9Ð9Ñ9÷ L×KÖKús   °A
BÂ
Bc           	      óà   • [         R                  [           n[        [        SS9  UR                  R                  5       n[        SSSUSUS9  SR                  U5      UR                  :w  d   eg)z?Test that aliases can be injected into generated documentation.r  rê  N©ÚappÚwhatrµ   rx   ræ  r!  rù   )r„   r  r×   r   Ú__doc__rj  r$   r¿   )rw   r  r!  s      ry   Ú#test_alias_proxy_sphinx_integrationÚ9HumanFriendlyTestCase.test_alias_proxy_sphinx_integration‚  s\   € ä—‘œXÑ&ˆÜ”xÐ-MÒNØ—‘×)Ñ)Ó+ˆÜ! d°¸DÀfÐVZÐbgÒhà�y‰y˜Ó 6§>¡>Ó1Ð1Ñ1r|   c           	      óh  •  " S S[         5      nU" 5       n[        U5        [        UR                  S   :X  d   e[        UR                  S   :X  d   e[
        UR                  S   ;   d   e[        UR                  S   ;   d   e[        UR                  S   ;   d   e[        SSSUR                  SSS	9S
L d   e[        SSSUR                  SSS	9SL d   eSSKJnJn  U R                  U5      (       d   eU R                  U5      (       a   eU R                  UR                  5      (       a   eg)z,Test the :mod:`humanfriendly.sphinx` module.c                   ó8   • \ rS rSrS rS rS rS rS rS r	Sr
g	)
ÚAHumanFriendlyTestCase.test_sphinx_customizations.<locals>.FakeAppi�  c                 ó    • 0 U l         0 U l        g rŽ   ©Ú	callbacksÚrolesrö   s    ry   Ú__init__ÚJHumanFriendlyTestCase.test_sphinx_customizations.<locals>.FakeApp.__init__�  s   € Ø!#�”Ø�•
r|   c                 ó   • g)z%Documented unofficial special method.Nr�   rö   s    ry   Ú__documented_special_method__Ú_HumanFriendlyTestCase.test_sphinx_customizations.<locals>.FakeApp.__documented_special_method__“  ó   € àr|   c                 ó   • g rŽ   r�   rö   s    ry   Ú__undocumented_special_method__ÚaHumanFriendlyTestCase.test_sphinx_customizations.<locals>.FakeApp.__undocumented_special_method__—  r0  r|   c                 ó    • X R                   U'   g rŽ   )r*  )rw   rµ   rœ  s      ry   Úadd_roleÚJHumanFriendlyTestCase.test_sphinx_customizations.<locals>.FakeApp.add_role›  s   € Ø#+—
‘
˜4Ò r|   c                 óZ   • U R                   R                  U/ 5      R                  U5        g rŽ   )r)  rv   Úappend)rw   Úeventrœ  s      ry   ÚconnectÚIHumanFriendlyTestCase.test_sphinx_customizations.<locals>.FakeApp.connectž  s!   € Ø—‘×)Ñ)¨%°Ó4×;Ñ;¸HÕEr|   c                 ó   • g)z.Usage: This is not supposed to be reformatted!Nr�   rö   s    ry   Úbogus_usageÚMHumanFriendlyTestCase.test_sphinx_customizations.<locals>.FakeApp.bogus_usage¡  r0  r|   r(  N)r×   rØ   rÙ   rÚ   r+  r.  r2  r5  r:  r=  rÜ   r�   r|   ry   ÚFakeAppr&  �  s!   † ò òòò,òFõr|   r?  ÚmanÚpypizautodoc-process-docstringzautodoc-skip-memberNT)r  r   rµ   rx   Úskipræ  Fr   )Úclir  )rß   r'   r%   r*  r&   r$   r)  r(   r)   r.  r2  ÚhumanfriendlyrC  r  Údocstring_is_reformattedr=  )rw   r?  Úfake_apprC  r  s        ry   Útest_sphinx_customizationsÚ0HumanFriendlyTestCase.test_sphinx_customizations‹  sW  € ô	”fô 	ñ2 “9ˆÜˆhŒÜ˜8Ÿ>™>¨%Ñ0Ó0Ð0Ð0Ü˜HŸN™N¨6Ñ2Ó2Ð2Ð2Ü(¨H×,>Ñ,>Ð?ZÑ,[Ó[Ð[Ð[Ü'¨8×+=Ñ+=Ð>SÑ+TÓTÐTÐTÜ%¨×);Ñ);Ð<WÑ)XÓXÐXÐXä'Ø˜4 dØ×5Ñ5Ø˜tñ
ð ò	ð 	ð ô (Ø˜4 dØ×7Ñ7Ø˜tñ
ð ò	ð 	ð ÷ 	.ð ×,Ñ,¨S×1Ñ1Ð1Ð1ð ×0Ñ0°×8Ñ8Ð8Ð8ð ×0Ñ0°×1EÑ1E×FÑFÐFÐFÐFr|   c           	      ó‚   • [        UR                  5      R                  5       n[        U5      n[	        SSSUSUS9  X#:g  $ )zOCheck whether :func:`.usage_message_callback()` reformats a module's docstring.Nr  )rW   r!  rj  Úlistr)   )rw   Úentityr!  Úsaved_liness       ry   rE  Ú.HumanFriendlyTestCase.docstring_is_reformattedÅ  sC   € ä  §¡Ó0×;Ñ;Ó=ˆÜ˜5“kˆÜØ˜4 dØ ¨Eò	
ð Ñ#Ð#r|   r�   N)Or×   rØ   rÙ   rÚ   r!  rz   r�   rŠ   r˜   rª   r²   rÆ   rÎ   rÒ   râ   ræ   rî   rò   rñ   rý   r  r  r  r  r  r$  r3  r@  rk  rz  r�  r—  rŸ  r¥  r°  r³  r¹  rÃ  rÆ  rÖ  rÜ  rß  rã  rë  ró  r  r"  r%  rD  r_  rc  rn  r‰  rŽ  r”  rž  r¢  r¦  r¬  r«  r²  r»  r¿  rÉ  r×  rÝ  rç  rì  rï  rã  rû  r  r  r  r  r"  rG  rE  rÜ   r�   r|   ry   r^   r^   �   s�  † á7ò()òT
!òFò;ò-ò$,ò /ò$-ò,ò	+ò+ò)ò
(ò
ò2òòCòGò=ò9ò
ò,òò09òd!ò6%òAò0ò0	7òò <òBòDòCò&òPò>ò8
ò8	`òFò"%òH<ò"ò'3òR9ò>
EòG>òR(ò&0ò?òBòH>òBòlò	XòUò(&òT-ò"(ò,,ò87ò8ò*EòBLò6Pò2ò44ò$"ò"ò:ò2ò8Gõt$r|   r^   c                 ó.   • S[        [        U 5      US9-  $ )z§
Round timestamps to the given number of digits.

This helps to make the test suite less sensitive to timing issues caused by
multitasking, processor scheduling, etc.
z%.2f)Úndigits)Úroundrh  )r2  rO  s     ry   rý  rý  Ð  s   € ð ”Eœ% ›,°Ñ8Ñ8Ð8r|   )rc   )vr!  rb  r`  r»   r  r9  rÀ   r„   rø  r  r”   r  rD  r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Úhumanfriendly.caser   r   Úhumanfriendly.clir   Úhumanfriendly.compatr   Úhumanfriendly.decoratorsr   Úhumanfriendly.deprecationr   r   r   r   Úhumanfriendly.promptsr    r!   r"   r#   Úhumanfriendly.sphinxr$   r%   r&   r'   r(   r)   Úhumanfriendly.tablesr*   r+   r,   r-   Úhumanfriendly.terminalr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   Úhumanfriendly.terminal.htmlrB   Úhumanfriendly.terminal.spinnersrC   rD   Úhumanfriendly.testingrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rò  rP   rQ   rR   rS   rT   rU   rV   rW   Úhumanfriendly.usagerX   rY   rZ   r[   Úmockr\   r^   rý  r�   r|   ry   Ú<module>r_     sê   ðñ 2ó Û Û 	Û Û 	Û Û 
Û Û Û Û ÷÷ ÷ ÷ ÷ ñ ÷* GÝ "Ý )Ý +ß dÓ d÷ó ÷÷ ÷ó ÷÷ ÷ ÷ ÷ ñ õ* 5ß E÷÷ ÷ ñ ÷	÷ 	ó 	÷ó õ ôL$˜Hô L$õ^*9r|   