Ë
    oj[  ã                   ó  — d Z ddlmZ ddlmZ  G d„ dej
                  «      Z G d„ dej                  «      Z G d„ d	ej
                  «      Z	 G d
„ dej                  «      Z
 G d„ dej
                  «      Z G d„ dej
                  «      Z G d„ dej                  «      Z G d„ dej                  «      Z G d„ dej
                  «      Z G d„ dej
                  «      Z G d„ dej
                  «      Z G d„ dej                  «      Z G d„ dej                  «      Z G d„ dej                  «      Z G d „ d!ej                  «      Z G d"„ d#ej                  «      Z G d$„ d%ej                  «      Z G d&„ d'ej                  «      Zy())zK
Tests for L{twisted.python.usage}, a command line option parsing library.
é    )Úusage)Úunittestc                   óD   — e Zd Zg d¢g d¢g d¢g d¢gZg d¢ddggZd„ Zd	„ Zy
)ÚWellBehaved)ÚlongÚwÚdefaultzand a docstring)ÚanotherÚnzno docstring)ÚlongonlyNÚnoshort)Ú	shortlessNÚexceptzthis one got docstring)ÚaflagÚfzO

                 flagallicious docstringness for this here

                 ÚfloutÚoc                 ó"   — d| j                   d<   y )NúPONY!Úmyflag©Úopts©Úselfs    ú9/usr/lib/python3/dist-packages/twisted/test/test_usage.pyÚ
opt_myflagzWellBehaved.opt_myflag!   s   € Ø%ˆ�	‰	�(Òó    c                 ó(   — |› d�| j                   d<   y )Nz WITH A PONY!Úmyparamr   ©r   Úvalues     r   Úopt_myparamzWellBehaved.opt_myparam$   s   € Ø"' ¨Ð6ˆ�	‰	�)Òr   N)Ú__name__Ú
__module__Ú__qualname__ÚoptParametersÚoptFlagsr   r"   © r   r   r   r      s4   „ â3Ú(Ú%Ú?ð	€Mò	
ð 
�#ˆð€Hò&ó7r   r   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚParseCorrectnessTestszZ
    Test L{usage.Options.parseOptions} for correct values under
    good conditions.
    c                 ó–   — dj                  «       | _        t        «       | _        | j                  j	                  | j                  «       y)zL
        Instantiate and parseOptions a well-behaved Options class.
        úA--long Alpha -n Beta --shortless Gamma -f --myflag --myparam TofuN)ÚsplitÚniceArgVr   ÚniceÚparseOptionsr   s    r   ÚsetUpzParseCorrectnessTests.setUp.   s7   € ð Vß
‰%‹'ð 	Œô  “MˆŒ	à�	‰	×Ñ˜tŸ}™}Õ-r   c                 óL  — | j                  | j                  j                  d   d«       | j                  | j                  j                  d   d«       | j                  | j                  j                  d   d«       | j                  | j                  j                  d   d«       y	)
z1
        Parameters have correct values.
        r   ÚAlphar
   ÚBetar   r   r   ÚGammaN©ÚassertEqualr/   r   r   s    r   Útest_checkParametersz*ParseCorrectnessTests.test_checkParameters;   sx   € ð 	×Ñ˜Ÿ™Ÿ™¨Ñ/°Ô9Ø×Ñ˜Ÿ™Ÿ™¨	Ñ2°FÔ;Ø×Ñ˜Ÿ™Ÿ™¨
Ñ3°YÔ?Ø×Ñ˜Ÿ™Ÿ™¨Ñ4°gÕ>r   c                 ó¨   — | j                  | j                  j                  d   d«       | j                  | j                  j                  d   d«       y)z,
        Flags have correct values.
        r   é   r   r   Nr6   r   s    r   Útest_checkFlagsz%ParseCorrectnessTests.test_checkFlagsD   s>   € ð 	×Ñ˜Ÿ™Ÿ™¨Ñ0°!Ô4Ø×Ñ˜Ÿ™Ÿ™¨Ñ0°!Õ4r   c                 ó¨   — | j                  | j                  j                  d   d«       | j                  | j                  j                  d   d«       y)zB
        Custom flags and parameters have correct values.
        r   r   r   zTofu WITH A PONY!Nr6   r   s    r   Útest_checkCustomsz'ParseCorrectnessTests.test_checkCustomsK   s?   € ð 	×Ñ˜Ÿ™Ÿ™¨Ñ1°7Ô;Ø×Ñ˜Ÿ™Ÿ™¨	Ñ2Ð4GÕHr   N)r#   r$   r%   Ú__doc__r1   r8   r;   r=   r(   r   r   r*   r*   (   s   „ ñò
.ò?ò5óIr   r*   c                   óJ   — e Zd Zddddegddddegdddd	egd
dddeggZd„ ZeZy)ÚTypedOptionsÚfoointNéˆ  zFoo intÚfoofloatçìQ¸…ë@z	Foo floatÚeggintzEgg int without defaultÚeggfloatzEgg float without defaultc                 ó   — || _         y)zg
        This option has an underscore in its name to exercise the _ to -
        translation.
        N)ÚunderscoreValuer    s     r   Úopt_under_scorezTypedOptions.opt_under_score[   s   € ð
  %ˆÕr   )r#   r$   r%   ÚintÚfloatr&   rI   Úopt_ur(   r   r   r@   r@   S   sO   „ à	�4˜˜i¨Ð-Ø	�T˜4 ¨eÐ4Ø	�4˜Ð8¸#Ð>Ø	�T˜4Ð!<¸eÐDð	€Mò%ð �Er   r@   c                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	Ú
TypedTestszK
    Test L{usage.Options.parseOptions} for options with forced types.
    c                 ó"   — t        «       | _        y ©N)r@   r   r   s    r   r1   zTypedTests.setUpj   s   € Ü!“^ˆ�
r   c                 ó6  — g }| j                   j                  |«       | j                  | j                   j                  d   d«       | j	                  | j                   j                  d   t
        «       | j                  | j                   j                  d   d«       | j	                  | j                   j                  d   t        «       | j                  | j                   j                  d   «       | j                  | j                   j                  d   «       y)z,
        Default values are parsed.
        rA   rB   rC   rD   rE   rF   N)r   r0   r7   r   ÚassertIsInstancerJ   rK   ÚassertIsNone©r   ÚargVs     r   Útest_defaultValueszTypedTests.test_defaultValuesm   sÅ   € ð ˆØ�
‰
×Ñ Ô%Ø×Ñ˜Ÿ™Ÿ™¨Ñ2°CÔ8Ø×Ñ˜dŸj™jŸo™o¨hÑ7¼Ô=Ø×Ñ˜Ÿ™Ÿ™¨Ñ4°dÔ;Ø×Ñ˜dŸj™jŸo™o¨jÑ9¼5ÔAØ×Ñ˜$Ÿ*™*Ÿ/™/¨(Ñ3Ô4Ø×Ñ˜$Ÿ*™*Ÿ/™/¨*Ñ5Õ6r   c                 ó
  — dj                  «       }| j                  j                  |«       | j                  | j                  j                  d   d«       | j                  | j                  j                  d   t        «       | j                  | j                  j                  d   d«       | j                  | j                  j                  d   t        «       | j                  | j                  j                  d   d«       | j                  | j                  j                  d   t        «       | j                  | j                  j                  d   d	«       | j                  | j                  j                  d   t        «       y
)z2
        int and float values are parsed.
        z8--fooint 912 --foofloat -823.1 --eggint 32 --eggfloat 21rA   i�  rC   gÍÌÌÌÌ¸‰ÀrE   é    rF   g      5@N)r-   r   r0   r7   r   rR   rJ   rK   rT   s     r   Útest_parsingValueszTypedTests.test_parsingValuesz   s  € ð N×TÑTÓVˆØ�
‰
×Ñ Ô%Ø×Ñ˜Ÿ™Ÿ™¨Ñ2°CÔ8Ø×Ñ˜dŸj™jŸo™o¨hÑ7¼Ô=Ø×Ñ˜Ÿ™Ÿ™¨Ñ4°fÔ=Ø×Ñ˜dŸj™jŸo™o¨jÑ9¼5ÔAØ×Ñ˜Ÿ™Ÿ™¨Ñ2°BÔ7Ø×Ñ˜dŸj™jŸo™o¨hÑ7¼Ô=Ø×Ñ˜Ÿ™Ÿ™¨Ñ4°dÔ;Ø×Ñ˜dŸj™jŸo™o¨jÑ9¼5ÕAr   c                 óŠ   — | j                   j                  ddg«       | j                  | j                   j                  d«       y)zw
        A dash in an option name is translated to an underscore before being
        dispatched to a handler.
        z--under-scoreÚfooN©r   r0   r7   rH   r   s    r   Útest_underscoreOptionz TypedTests.test_underscoreOption‰   s5   € ð
 	�
‰
×Ñ °%Ð 8Ô9Ø×Ñ˜Ÿ™×3Ñ3°UÕ;r   c                 óŠ   — | j                   j                  ddg«       | j                  | j                   j                  d«       y)zE
        An option name with a dash in it can have an alias.
        z-uÚbarNr\   r   s    r   Útest_underscoreOptionAliasz%TypedTests.test_underscoreOptionAlias‘   s4   € ð 	�
‰
×Ñ  u Ô.Ø×Ñ˜Ÿ™×3Ñ3°UÕ;r   c                 óŽ   — dj                  «       }| j                  t        j                  | j                  j                  |«       y)z7
        Passing wrong values raises an error.
        z--fooint eggN)r-   ÚassertRaisesr   Ú
UsageErrorr0   rT   s     r   Útest_invalidValueszTypedTests.test_invalidValues˜   s4   € ð ×#Ñ#Ó%ˆØ×Ñœ%×*Ñ*¨D¯J©J×,CÑ,CÀTÕJr   N)
r#   r$   r%   r>   r1   rV   rY   r]   r`   rd   r(   r   r   rN   rN   e   s'   „ ñò$ò7òBò<ò<óKr   rN   c                   ó   — e Zd Zg d¢gZy)ÚWrongTypedOptions)ÚbarwrongNNzBar with wrong coerceÚheN)r#   r$   r%   r&   r(   r   r   rf   rf       s
   „ ÚLÐM�Mr   rf   c                   ó4   — e Zd Zd„ Zd„ ZddddegddddeggZy)ÚWeirdCallableOptionsc                 ó   — t        d«      ‚)NÚOuch)ÚRuntimeError©r!   s    r   Ú_barzWeirdCallableOptions._bar¥   s   € Ü˜6Ó"Ð"r   c                 ó   — t        d«      ‚)NÚYay)Ú
ValueErrorrn   s    r   Ú_foozWeirdCallableOptions._foo¨   s   € Ü˜ÓÐr   rg   NzBar with strange callableÚfoowrongzFoo with strange callable)r#   r$   r%   ro   rs   r&   r(   r   r   rj   rj   ¤   s3   „ ò#ò ð 
�T˜4Ð!<¸dÐCØ	�T˜4Ð!<¸dÐCð�Mr   rj   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚWrongTypedTestszF
    Test L{usage.Options.parseOptions} for wrong coerce options.
    c                 óz   — t        «       }dj                  «       }| j                  t        |j                  |«       y)z2
        Using a non-callable type fails.
        z--barwrong eggN)rf   r-   rb   Ú	TypeErrorr0   ©r   ÚusrU   s      r   Útest_nonCallablez WrongTypedTests.test_nonCallable¶   s0   € ô Ó ˆØ×%Ñ%Ó'ˆØ×Ñœ) R§_¡_°dÕ;r   c                 ó>   — t        «       }g }|j                  |«       y)zP
        The coerce functions are not called if no values are provided.
        N)rj   r0   ry   s      r   Útest_notCalledInDefaultz'WrongTypedTests.test_notCalledInDefault¾   s   € ô "Ó#ˆØˆØ
�‰˜Õr   c                 ó:  — t        «       }dj                  «       }| j                  t        j                  |j
                  |«      }| j                  t        |«      d«       t        «       }dj                  «       }| j                  t        |j
                  |«       y)zI
        Errors raised by coerce functions are handled properly.
        z--foowrong blahz&Parameter type enforcement failed: Yayz--barwrong blahN)	rj   r-   rb   r   rc   r0   r7   Ústrrm   )r   rz   rU   Úes       r   Útest_weirdCallablez"WrongTypedTests.test_weirdCallableÆ   sy   € ô "Ó#ˆØ ×&Ñ&Ó(ˆà×Ñœe×.Ñ.°·±ÀÓFˆØ×Ñœ˜Q›Ð!IÔJä!Ó#ˆØ ×&Ñ&Ó(ˆà×Ñœ,¨¯©¸Õ>r   N)r#   r$   r%   r>   r{   r}   r�   r(   r   r   rv   rv   ±   s   „ ñò<òó?r   rv   c                   ó   — e Zd Zd„ Zy)ÚOutputTestsc                 ó¦   — t        «       }| j                  t        j                  |j                  dg«      }| j                  t        |«      d«       y)zF
        Error output case adjustment does not mangle options
        z-Zzoption -Z not recognizedN)r   rb   r   rc   r0   r7   r   )r   Úoptr€   s      r   Útest_uppercasingzOutputTests.test_uppercasing×   sB   € ô ‹mˆØ×Ñœe×.Ñ.°×0@Ñ0@À4À&ÓIˆØ×Ñœ˜Q›Ð!;Õ<r   N)r#   r$   r%   r†   r(   r   r   rƒ   rƒ   Ö   s   „ ó=r   rƒ   c                   ó   — e Zd ZdgZdgZy)ÚInquisitionOptions)Úexpectr€   )útorture-deviceÚtúcomfy-chairzset preferred torture deviceN)r#   r$   r%   r'   r&   r(   r   r   rˆ   rˆ   à   s   „ àð€Hð 	Oð�Mr   rˆ   c                   ó   — e Zd ZddgZy)ÚHolyQuestOptions)Ú	horsebackÚhzuse a horse)ú	for-grailÚgN)r#   r$   r%   r'   r(   r   r   rŽ   rŽ   é   s   „ à)Øð�Hr   rŽ   c                   ó*   — e Zd ZdgZddedfddedfgZy)	ÚSubCommandOptions)úeuropian-swallowNz$set default swallow type to EuropianÚinquisitionÚinquestzPerform an inquisitionÚ	holyquestÚquestzEmbark upon a holy questN)r#   r$   r%   r'   rˆ   rŽ   ÚsubCommandsr(   r   r   r”   r”   ð   s1   „ àJð€Hð 
˜	Ð#5Ð7OÐPØ	�gÐ/Ð1KÐLð�Kr   r”   c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚSubCommandTestszJ
    Test L{usage.Options.parseOptions} for options with subcommands.
    c                 óX  — t        «       }|j                  ddg«       | j                  |d   «       | j                  |j                  d«       | j                  |j                  t        «       | j                  |j                  d   «       | j                  |j                  d   d«       y)z-
        A subcommand is recognized.
        ú--europian-swallowr–   r•   r‰   rŠ   rŒ   N)	r”   r0   Ú
assertTruer7   Ú
subCommandrR   Ú
subOptionsrˆ   ÚassertFalse©r   r   s     r   Útest_simpleSubcommandz%SubCommandTests.test_simpleSubcommandÿ   sŠ   € ô ÓˆØ	�‰Ð,¨mÐ<Ô=Ø�‰˜Ð,Ñ-Ô.Ø×Ñ˜Ÿ™ }Ô5Ø×Ñ˜aŸl™lÔ,>Ô?Ø×Ñ˜Ÿ™ hÑ/Ô0Ø×Ñ˜Ÿ™Ð&6Ñ7¸ÕGr   c                 óX  — t        «       }|j                  g d¢«       | j                  |d   «       | j                  |j                  d«       | j                  |j                  t        «       | j                  |j                  d   «       | j                  |j                  d   d«       y)zA
        Flags and options of a subcommand are assigned.
        )r–   ú--expectú--torture-device=featherr•   r–   r‰   rŠ   ÚfeatherN©	r”   r0   r¢   r7   r    rR   r¡   rˆ   rŸ   r£   s     r   Ú"test_subcommandWithFlagsAndOptionsz2SubCommandTests.test_subcommandWithFlagsAndOptions  s…   € ô ÓˆØ	�‰ÒNÔOØ×Ñ˜Ð-Ñ.Ô/Ø×Ñ˜Ÿ™ }Ô5Ø×Ñ˜aŸl™lÔ,>Ô?Ø�‰˜Ÿ™ XÑ.Ô/Ø×Ñ˜Ÿ™Ð&6Ñ7¸ÕCr   c                 óX  — t        «       }|j                  g d¢«       | j                  |d   «       | j                  |j                  d«       | j                  |j                  t        «       | j                  |j                  d   «       | j                  |j                  d   d«       y)zG
        Flags and options of a subcommand alias are assigned.
        )r—   r¦   r§   r•   r–   r‰   rŠ   r¨   Nr©   r£   s     r   Ú'test_subcommandAliasWithFlagsAndOptionsz7SubCommandTests.test_subcommandAliasWithFlagsAndOptions  s…   € ô ÓˆØ	�‰ÒJÔKØ×Ñ˜Ð-Ñ.Ô/Ø×Ñ˜Ÿ™ }Ô5Ø×Ñ˜aŸl™lÔ,>Ô?Ø�‰˜Ÿ™ XÑ.Ô/Ø×Ñ˜Ÿ™Ð&6Ñ7¸ÕCr   c                 óV  — t        «       }|j                  ddg«       | j                  |d   «       | j                  |j                  d«       | j                  |j                  t        «       | j                  |j                  d   «       | j                  |j                  d   «       y)zG
        Flags and options of another subcommand are assigned.
        r˜   z--for-grailr•   r�   r‘   N)	r”   r0   r¢   r7   r    rR   r¡   rŽ   rŸ   r£   s     r   Ú)test_anotherSubcommandWithFlagsAndOptionsz9SubCommandTests.test_anotherSubcommandWithFlagsAndOptions#  s†   € ô ÓˆØ	�‰˜ ]Ð3Ô4Ø×Ñ˜Ð-Ñ.Ô/Ø×Ñ˜Ÿ™ {Ô3Ø×Ñ˜aŸl™lÔ,<Ô=Ø×Ñ˜Ÿ™ kÑ2Ô3Ø�‰˜Ÿ™ [Ñ1Õ2r   c                 óÐ   — t        «       }|j                  dg«       | j                  |d   «       | j                  |j                  «       | j                  t        |d«      «       y)z€
        If no subcommand is specified and no default subcommand is assigned,
        a subcommand will not be implied.
        rž   r•   r¡   N)r”   r0   rŸ   rS   r    r¢   Úhasattrr£   s     r   Útest_noSubcommandz!SubCommandTests.test_noSubcommand/  sU   € ô
 ÓˆØ	�‰Ð,Ð-Ô.Ø�‰˜Ð,Ñ-Ô.Ø×Ñ˜!Ÿ,™,Ô'Ø×Ñœ  LÓ1Õ2r   c                 ód  — t        «       }d|_        |j                  dg«       | j                  |d   «       | j	                  |j
                  d«       | j                  |j                  t        «       | j                  |j                  d   «       | j	                  |j                  d   d«       y)	zK
        Flags and options in the default subcommand are assigned.
        r—   rž   r•   r–   r‰   rŠ   rŒ   N)
r”   ÚdefaultSubCommandr0   rŸ   r7   r    rR   r¡   rˆ   r¢   r£   s     r   Útest_defaultSubcommandz&SubCommandTests.test_defaultSubcommand:  s�   € ô ÓˆØ'ˆÔØ	�‰Ð,Ð-Ô.Ø�‰˜Ð,Ñ-Ô.Ø×Ñ˜Ÿ™ }Ô5Ø×Ñ˜aŸl™lÔ,>Ô?Ø×Ñ˜Ÿ™ hÑ/Ô0Ø×Ñ˜Ÿ™Ð&6Ñ7¸ÕGr   c                 ó6  ‡—  G d„ dt         j                  «      Š G ˆfd„dt         j                  «      } |«       }|j                  dg«       | j                  t	        |j
                  d«      «       | j                  |j
                  j                  |«       y)zw
        The parseOptions method from the Options object specified for the
        given subcommand is called.
        c                   ó   — e Zd Zd„ Zy)úDSubCommandTests.test_subCommandParseOptionsHasParent.<locals>.SubOptc                 ól   — | j                   | _        t        j                  j                  | g|¢­i |¤Ž y rP   )ÚparentÚ	sawParentr   ÚOptionsr0   )r   ÚaÚkws      r   r0   zQSubCommandTests.test_subCommandParseOptionsHasParent.<locals>.SubOpt.parseOptionsN  s)   € Ø!%§¡�”Ü—‘×*Ñ*¨4Ð:°!Ò:°rÓ:r   N)r#   r$   r%   r0   r(   r   r   ÚSubOptr·   M  s   „ ó;r   r¾   c                   ó   •— e Zd ZddW ° dfgZy)úASubCommandTests.test_subCommandParseOptionsHasParent.<locals>.Optr[   r   r_   N©r#   r$   r%   rš   ©r¾   s   €r   ÚOptrÀ   R  s   ø„ à˜™V UÐ+ð‰Kr   rÃ   r[   rº   N)r   r»   r0   rŸ   r°   r¡   r7   rº   )r   rÃ   r   r¾   s      @r   Ú$test_subCommandParseOptionsHasParentz4SubCommandTests.test_subCommandParseOptionsHasParentG  sk   ø€ ô	;”U—]‘]ô 	;ö
	”%—-‘-ô 	ñ
 ‹EˆØ	�‰˜�wÔØ�‰œ §¡¨kÓ:Ô;Ø×Ñ˜Ÿ™×/Ñ/°Õ3r   c                 ó4  ‡—  G d„ dt         j                  «      Š G ˆfd„dt         j                  «      } G ˆfd„dt         j                  «      } |«       }|j                  dg«        |«       }|j                  dg«       | j                  t	        |j
                  d	«      «       | j                  t	        |j
                  d	«      «       | j                  |j
                  j                  |«       | j                  |j
                  j                  |«       y
)zh
        The .parent pointer is correct even when the same Options class is
        used twice.
        c                   ó   — e Zd Zy)ú:SubCommandTests.test_subCommandInTwoPlaces.<locals>.SubOptN)r#   r$   r%   r(   r   r   r¾   rÇ   b  s   „ Ør   r¾   c                   ó   •— e Zd ZddW ° dfgZy)ú:SubCommandTests.test_subCommandInTwoPlaces.<locals>.OptFoor[   r   ÚquuxNrÁ   rÂ   s   €r   ÚOptFoorÉ   e  ó   ø„ à˜™V VÐ,ð‰Kr   rË   c                   ó   •— e Zd ZddW ° dfgZy)ú:SubCommandTests.test_subCommandInTwoPlaces.<locals>.OptBarr_   ÚbrÊ   NrÁ   rÂ   s   €r   ÚOptBarrÎ   j  rÌ   r   rÐ   r[   r_   r¹   N)r   r»   r0   rŸ   r°   r¡   ÚfailUnlessIdenticalr¹   )r   rË   rÐ   ÚoFooÚoBarr¾   s        @r   Útest_subCommandInTwoPlacesz*SubCommandTests.test_subCommandInTwoPlaces\  sÅ   ø€ ô	”U—]‘]ô 	ö	”U—]‘]ô 	ö
	”U—]‘]ô 	ñ
 ‹xˆØ×Ñ˜5˜'Ô"Ù‹xˆØ×Ñ˜5˜'Ô"Ø�‰œ §¡°Ó:Ô;Ø�‰œ §¡°Ó:Ô;Ø× Ñ  §¡×!7Ñ!7¸Ô>Ø× Ñ  §¡×!7Ñ!7¸Õ>r   N)r#   r$   r%   r>   r¤   rª   r¬   r®   r±   r´   rÄ   rÔ   r(   r   r   rœ   rœ   ú   s3   „ ñò
Hò
Dò
Dò
3ò	3òHò4ó*?r   rœ   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚHelpStringTestsz&
    Test generated help strings.
    c                 óL   — dj                  «       | _        t        «       | _        y)z;
        Instantiate a well-behaved Options class.
        r,   N)r-   r.   r   r/   r   s    r   r1   zHelpStringTests.setUp~  s!   € ð Vß
‰%‹'ð 	Œô  “Mˆ�	r   c                 óˆ   — 	 | j                   j                  «        y# t        $ r}| j                  |«       Y d}~yd}~ww xY w)z,
        __str__ shouldn't go boom.
        N)r/   Ú__str__Ú	ExceptionÚfail)r   r€   s     r   Útest_noGoBoomzHelpStringTests.test_noGoBoom‰  s4   € ð	Ø�I‰I×ÑÕøÜò 	Ø�I‰I�a�L‰Lûð	ús   ‚ �	A¦<¼Ac                 ó  — t        | j                  «      j                  «       D �cg c]  }|j                  d«      dk\  sŒ|‘Œ }}| j	                  t        |«      dkD  «       | j	                  |d   j                  d«      dk\  «       yc c}w )zK
        Extra whitespace in flag and parameters docs is stripped.
        r   r   ÚflagalliciousN)r   r/   Ú
splitlinesÚfindrŸ   Úlen)r   ÚsÚliness      r   Ú&test_whitespaceStripFlagsAndParametersz6HelpStringTests.test_whitespaceStripFlagsAndParameters’  so   € ô   §	¡	›N×5Ñ5Ó7ÖP�q¸1¿6¹6À'»?ÈaÓ;O’ÐPˆÐPØ�‰œ˜E›
 Q™Ô'Ø�‰˜˜a™Ÿ™ oÓ6¸!Ñ;Õ<ùò Qs   ¦B
Á B
N)r#   r$   r%   r>   r1   rÜ   rä   r(   r   r   rÖ   rÖ   y  s   „ ñò	"òó=r   rÖ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚPortCoerceTestsz3
    Test the behavior of L{usage.portCoerce}.
    c                 óâ   — | j                  dt        j                  d«      «       | j                  dt        j                  d«      «       | j                  dt        j                  d«      «       y)z4
        Test the answers with valid input.
        r   Ú0iŠ  Ú3210iÿÿ  Ú65535N)r7   r   Ú
portCoercer   s    r   Útest_validCoercez PortCoerceTests.test_validCoerce¢  sU   € ð 	×Ñ˜œE×,Ñ,¨SÓ1Ô2Ø×Ñ˜œu×/Ñ/°Ó7Ô8Ø×Ñ˜¤× 0Ñ 0°Ó 9Õ:r   c                 ó,  — | j                  t        t        j                  d«       | j                  t        t        j                  d«       | j                  t        t        j                  d«       | j                  t        t        j                  d«       y)z"
        Test error path.
        Ú z-21Ú212189r[   N)rb   rr   r   rë   r   s    r   Útest_errorCoercez PortCoerceTests.test_errorCoerceª  sd   € ð 	×Ñœ*¤e×&6Ñ&6¸Ô;Ø×Ñœ*¤e×&6Ñ&6¸Ô>Ø×Ñœ*¤e×&6Ñ&6¸ÔAØ×Ñœ*¤e×&6Ñ&6¸Õ>r   N)r#   r$   r%   r>   rì   rð   r(   r   r   ræ   ræ   �  s   „ ñò;ó?r   ræ   c                   óL   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚZshCompleterTestsz‹
    Test the behavior of the various L{twisted.usage.Completer} classes
    for producing output usable by zsh tab-completion system.
    c                 ó"  — t        j                  «       }|j                  dt         j                  «      }| j	                  |d«       t        j                  dd¬«      }|j                  dt         j                  «      }| j	                  |d«       y)zX
        Completer produces zsh shell-code that produces no completion matches.
        úsome-optionz:some-option:úsome actionT©ÚdescrÚrepeatú*:some action:N)r   Ú	CompleterÚ
_shellCodeÚ_ZSHr7   ©r   ÚcÚgots      r   Útest_completerz ZshCompleterTests.test_completerº  si   € ô �O‰OÓˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜˜oÔ.ä�O‰O -¸Ô=ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð.Õ/r   c                 ó²  — t        j                  «       }|j                  dt         j                  «      }| j	                  |d«       t        j                  d«      }|j                  dt         j                  «      }| j	                  |d«       t        j                  ddd¬«      }|j                  dt         j                  «      }| j	                  |d«       y	)
zn
        CompleteFiles produces zsh shell-code that completes file names
        according to a glob.
        rô   z:some-option (*):_files -g "*"z*.pyz$:some-option (*.py):_files -g "*.py"rõ   Trö   z%*:some action (*.py):_files -g "*.py"N)r   ÚCompleteFilesrû   rü   r7   rý   s      r   Ú
test_fileszZshCompleterTests.test_filesÆ  s¥   € ô
 ×ÑÓ!ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð>Ô?ä×Ñ Ó'ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜ÐDÔEä×Ñ ¨mÀDÔIˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜ÐEÕFr   c                 ó"  — t        j                  «       }|j                  dt         j                  «      }| j	                  |d«       t        j                  dd¬«      }|j                  dt         j                  «      }| j	                  |d«       y)zV
        CompleteDirs produces zsh shell-code that completes directory names.
        rô   z:some-option:_directoriesrõ   Trö   z*:some action:_directoriesN)r   ÚCompleteDirsrû   rü   r7   rý   s      r   Ú	test_dirszZshCompleterTests.test_dirs×  sn   € ô ×ÑÓ ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð9Ô:ä×Ñ ]¸4Ô@ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð:Õ;r   c                 ó¼  — t        j                  d«      }|j                  dt         j                  «      }| j	                  |d«       t        j                  g d¢«      }|j                  dt         j                  «      }| j	                  |d«       t        j                  g d¢dd¬«      }|j                  dt         j                  «      }| j	                  |d	«       y
)zw
        CompleteList produces zsh shell-code that completes words from a fixed
        list of possibilities.
        ÚABCrô   z:some-option:(A B C)©Ú1Ú2Ú3z:some-option:(1 2 3)rõ   Trö   z*:some action:(1 2 3)N)r   ÚCompleteListrû   rü   r7   rý   s      r   Ú	test_listzZshCompleterTests.test_listã  s§   € ô
 ×Ñ˜uÓ%ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð4Ô5ä×ÑšÓ/ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð4Ô5ä×Ñš°mÈDÔQˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð5Õ6r   c                 óÀ  — t        j                  d«      }|j                  dt         j                  «      }| j	                  |d«       t        j                  g d¢«      }|j                  dt         j                  «      }| j	                  |d«       t        j                  g d¢dd¬«      }|j                  dt         j                  «      }d	}| j	                  ||«       y
)z•
        CompleteMultiList produces zsh shell-code that completes multiple
        comma-separated words from a fixed list of possibilities.
        r  rô   z-:some-option:_values -s , 'some-option' A B Cr	  z-:some-option:_values -s , 'some-option' 1 2 3rõ   Trö   z.*:some action:_values -s , 'some action' 1 2 3N)r   ÚCompleteMultiListrû   rü   r7   )r   rþ   rÿ   Úexpecteds       r   Útest_multiListz ZshCompleterTests.test_multiListô  s¬   € ô
 ×#Ñ# EÓ*ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜ÐMÔNä×#Ñ#¢OÓ4ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜ÐMÔNä×#Ñ#¢O¸=ÐQUÔVˆØ�l‰l˜=¬%¯*©*Ó5ˆØCˆØ×Ñ˜˜hÕ'r   c                 ó"  — t        j                  «       }|j                  dt         j                  «      }| j	                  |d«       t        j                  dd¬«      }|j                  dt         j                  «      }| j	                  |d«       y)zd
        CompleteUsernames produces zsh shell-code that completes system
        usernames.
        rô   z:some-option:_usersrõ   Trö   z*:some action:_usersN)r   ÚCompleteUsernamesrû   rü   r7   ©r   rþ   Úouts      r   Útest_usernamesz ZshCompleterTests.test_usernames  sn   € ô
 ×#Ñ#Ó%ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð3Ô4ä×#Ñ#¨-ÀÔEˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð4Õ5r   c                 ó"  — t        j                  «       }|j                  dt         j                  «      }| j	                  |d«       t        j                  dd¬«      }|j                  dt         j                  «      }| j	                  |d«       y)zc
        CompleteGroups produces zsh shell-code that completes system group
        names.
        rô   z:group:_groupsrõ   Trö   z*:some action:_groupsN)r   ÚCompleteGroupsrû   rü   r7   r  s      r   Útest_groupszZshCompleterTests.test_groups  sn   € ô
 × Ñ Ó"ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð.Ô/ä× Ñ  }¸TÔBˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð5Õ6r   c                 ó"  — t        j                  «       }|j                  dt         j                  «      }| j	                  |d«       t        j                  dd¬«      }|j                  dt         j                  «      }| j	                  |d«       y)zU
        CompleteHostnames produces zsh shell-code that completes hostnames.
        rô   z:some-option:_hostsrõ   Trö   z*:some action:_hostsN)r   ÚCompleteHostnamesrû   rü   r7   r  s      r   Útest_hostnamesz ZshCompleterTests.test_hostnames   sn   € ô ×#Ñ#Ó%ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð3Ô4ä×#Ñ#¨-ÀÔEˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð4Õ5r   c                 óZ  — t        j                  «       }|j                  dt         j                  «      }| j	                  |j                  d«      «       t        j                  dd¬«      }|j                  dt         j                  «      }| j	                  |j                  d«      «       y)zŠ
        CompleteUserAtHost produces zsh shell-code that completes hostnames or
        a word of the form <username>@<hostname>.
        rô   z:host | user@host:rõ   Trö   rù   N)r   ÚCompleteUserAtHostrû   rü   rŸ   Ú
startswithr  s      r   Útest_userAtHostz!ZshCompleterTests.test_userAtHost,  sx   € ô
 ×$Ñ$Ó&ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ�‰˜Ÿ™Ð';Ó<Ô=ä×$Ñ$¨=ÀÔFˆØ�l‰l˜=¬%¯*©*Ó5ˆØ�‰˜Ÿ™Ð'7Ó8Õ9r   c                 ó"  — t        j                  «       }|j                  dt         j                  «      }| j	                  |d«       t        j                  dd¬«      }|j                  dt         j                  «      }| j	                  |d«       y)zv
        CompleteNetInterfaces produces zsh shell-code that completes system
        network interface names.
        rô   z:some-option:_net_interfacesrõ   Trö   z*:some action:_net_interfacesN)r   ÚCompleteNetInterfacesrû   rü   r7   r  s      r   Útest_netInterfacesz$ZshCompleterTests.test_netInterfaces9  sn   € ô
 ×'Ñ'Ó)ˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð<Ô=ä×'Ñ'¨mÀDÔIˆØ�l‰l˜=¬%¯*©*Ó5ˆØ×Ñ˜Ð=Õ>r   N)r#   r$   r%   r>   r   r  r  r  r  r  r  r  r!  r$  r(   r   r   rò   rò   ´  s:   „ ñò

0òGò"
<ò7ò"(ò$6ò7ò
6ò:ó?r   rò   c                   ó   — e Zd ZdZd„ Zy)ÚCompleterNotImplementedTestszs
    Using an unknown shell constant with the various Completer() classes
    should raise NotImplementedError
    c           
      óÄ  — t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  g
}|D ],  }	  |«       }| j                  t        |j                  dd«       Œ. y# t        $ r  |d«      }Y Œ8w xY w)zM
        Using an unknown shellType should raise NotImplementedError
        NÚbad_shell_type)r   rú   r  r  r  r  r  r  r  r  r#  ÚBaseExceptionrb   ÚNotImplementedErrorrû   )r   ÚclassesÚclsÚactions       r   Útest_unknownShellz.CompleterNotImplementedTests.test_unknownShellM  sº   € ô
 �O‰OÜ×ÑÜ×ÑÜ×ÑÜ×#Ñ#Ü×#Ñ#Ü× Ñ Ü×#Ñ#Ü×$Ñ$Ü×'Ñ'ð
ˆð ò 	ˆCð#Ù›�ð ×ÑÜ# V×%6Ñ%6¸Ð>Nõñ	øô !ò #Ù˜T›’ð#ús   ÂCÃCÃCN)r#   r$   r%   r>   r.  r(   r   r   r&  r&  G  s   „ ñó
r   r&  c                   ó<   — e Zd ZdZ G d„ d«      Zd„ Zd„ Zd„ Zd„ Zy)	ÚFlagFunctionTestsz*
    Tests for L{usage.flagFunction}.
    c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)úFlagFunctionTests.SomeClassz>
        Dummy class for L{usage.flagFunction} tests.
        c                  ó   — y)z¥
            A one argument method to be tested by L{usage.flagFunction}.

            @param a: a useless argument to satisfy the function's signature.
            Nr(   )r   r¼   s     r   ÚoneArgz"FlagFunctionTests.SomeClass.oneArgr  ó   � r   c                  ó   — y)zU
            A no argument method to be tested by L{usage.flagFunction}.
            Nr(   r   s    r   ÚnoArgz!FlagFunctionTests.SomeClass.noArgy  r5  r   c                  ó   — y)aG  
            A multiple arguments method to be tested by L{usage.flagFunction}.

            @param a: a useless argument to satisfy the function's signature.
            @param b: a useless argument to satisfy the function's signature.
            @param c: a useless argument to satisfy the function's signature.
            Nr(   )r   r¼   rÏ   rþ   s       r   ÚmanyArgsz$FlagFunctionTests.SomeClass.manyArgs~  r5  r   N)r#   r$   r%   r>   r4  r7  r9  r(   r   r   Ú	SomeClassr2  m  s   „ ñ	ò	ò	ó
	r   r:  c                 ó~   — | j                  dt        j                  | j                  «       j                  «      «       y)zs
        L{usage.flagFunction} returns C{False} if the method checked allows
        exactly one argument.
        FN)ÚassertIsr   ÚflagFunctionr:  r4  r   s    r   Útest_hasArgzFlagFunctionTests.test_hasArg‡  s*   € ð
 	�‰�eœU×/Ñ/°·±Ó0@×0GÑ0GÓHÕIr   c                 ó~   — | j                  dt        j                  | j                  «       j                  «      «       y)zq
        L{usage.flagFunction} returns C{True} if the method checked allows
        exactly no argument.
        TN)r<  r   r=  r:  r7  r   s    r   Ú
test_noArgzFlagFunctionTests.test_noArgŽ  s*   € ð
 	�‰�dœE×.Ñ.¨t¯~©~Ó/?×/EÑ/EÓFÕGr   c                 óÈ   — | j                  t        j                  t        j                  | j	                  «       j
                  «      }| j                  dt        |«      «       y)z
        L{usage.flagFunction} raises L{usage.UsageError} if the method checked
        allows more than one argument.
        z$Invalid Option function for manyArgsN©rb   r   rc   r=  r:  r9  r7   r   ©r   Úexcs     r   Útest_tooManyArgumentsz'FlagFunctionTests.test_tooManyArguments•  sK   € ð
 ×ÑÜ×Ñœe×0Ñ0°$·.±.Ó2B×2KÑ2Kó
ˆð 	×ÑÐ?ÄÀSÃÕJr   c                 óÊ   — | j                  t        j                  t        j                  | j	                  «       j
                  d«      }| j                  dt        |«      «       y)z‘
        L{usage.flagFunction} uses the given method name in the error message
        raised when the method allows too many arguments.
        Úflubudufz$Invalid Option function for flubudufNrB  rC  s     r   Ú,test_tooManyArgumentsAndSpecificErrorMessagez>FlagFunctionTests.test_tooManyArgumentsAndSpecificErrorMessageŸ  sM   € ð
 ×ÑÜ×Ñœe×0Ñ0°$·.±.Ó2B×2KÑ2KÈZó
ˆð 	×ÑÐ?ÄÀSÃÕJr   N)	r#   r$   r%   r>   r:  r>  r@  rE  rH  r(   r   r   r0  r0  h  s)   „ ñ÷ñ ò4JòHòKóKr   r0  c                   ó   — e Zd ZdZd„ Zy)ÚOptionsInternalTestsz6
    Tests internal behavior of C{usage.Options}.
    c                 óê   —  G d„ dt         j                  «      } |«       }| j                  t        j	                  g d¢d«      |j
                  d   |j
                  d   |j
                  d   dœ«       y)zs
        Options which are synonyms to another option are aliases towards the
        longest option name.
        c                   ó   — e Zd Zd„ ZeZeZy)ú;OptionsInternalTests.test_optionsAliasesOrder.<locals>.Optsc                  ó   — y)z~
                This is an option method with a very long name, that is going to
                be aliased.
                Nr(   r   s    r   Úopt_very_very_longzNOptionsInternalTests.test_optionsAliasesOrder.<locals>.Opts.opt_very_very_long¶  r5  r   N)r#   r$   r%   rO  Ú	opt_shortÚopt_sr(   r   r   ÚOptsrM  µ  s   „ òð +ˆIØ&‰Er   rR  )râ   Úshortúvery-very-longrT  râ   rS  N)r   r»   r7   ÚdictÚfromkeysÚsynonyms)r   rR  r   s      r   Útest_optionsAliasesOrderz-OptionsInternalTests.test_optionsAliasesOrder¯  sc   € ô	'”5—=‘=ô 	'ñ ‹vˆà×ÑÜ�M‰MÒ:Ð<LÓMà—]‘] 3Ñ'ØŸ™ wÑ/Ø"&§-¡-Ð0@Ñ"Añõ	
r   N)r#   r$   r%   r>   rX  r(   r   r   rJ  rJ  ª  s   „ ñó
r   rJ  N)r>   Útwisted.pythonr   Útwisted.trialr   r»   r   ÚTestCaser*   r@   rN   rf   rj   rv   rƒ   rˆ   rŽ   r”   rœ   rÖ   ræ   rò   r&  r0  rJ  r(   r   r   ú<module>r\     s\  ðñõ
 !Ý "ô7�%—-‘-ô 7ô6(I˜H×-Ñ-ô (IôV�5—=‘=ô ô$8K�×"Ñ"ô 8KôvN˜Ÿ™ô Nô
˜5Ÿ=™=ô 
ô"?�h×'Ñ'ô "?ôJ=�(×#Ñ#ô =ô˜Ÿ™ô ô�u—}‘}ô ô˜Ÿ™ô ô|?�h×'Ñ'ô |?ô~!=�h×'Ñ'ô !=ôH?�h×'Ñ'ô ?ô.P?˜×)Ñ)ô P?ôf 8×#4Ñ#4ô ôB?K˜×)Ñ)ô ?KôD
˜8×,Ñ,õ 
r   