U
    +ºc2]  ã                   @   s¼   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlZddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlZG dd„ dejƒZG dd„ dejƒZedkr¸e ¡  dS )zTests for the helptext module.é    )Úabsolute_import)Údivision)Úprint_functionN)Ú
formatting)Úhelptext)Útest_components)Ú	testutils©Útracec                       s–  e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
e ejdd… dk d¡dd„ ƒZe ejdd… dk d¡dd„ ƒZe ejdd… dk d¡dd„ ƒZe ejdd… dk d¡dd„ ƒZdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Ze ejd)¡d*d+„ ƒZe ejd)¡d,d-„ ƒZe ejd.¡d/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Z d7d8„ Z!d9d:„ Z"d;d<„ Z#d=d>„ Z$d?d@„ Z%dAdB„ Z&‡  Z'S )CÚHelpTestc                    s   t t| ƒ ¡  dtjd< d S )NÚ1ZANSI_COLORS_DISABLED)Úsuperr   ÚsetUpÚosÚenviron)Úself©Ú	__class__© ú6/tmp/pip-unpacked-wheel-1xt1w7un/fire/helptext_test.pyr   #   s    zHelpTest.setUpc                 C   sR   t j}tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )NÚ
NoDefaults©Úname©Ú	componentr
   úNAME
    NoDefaultszSYNOPSIS
    NoDefaultsÚDESCRIPTIONÚNOTES©Útcr   r   ÚHelpTextr
   Ú	FireTraceÚassertInÚassertNotIn©r   r   Úhelp_screenr   r   r   ÚtestHelpTextNoDefaults'   s    þzHelpTest.testHelpTextNoDefaultsc                 C   sx   t  ¡ }tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d	|¡ |  d
|¡ d S )Nr   r   r   r   zSYNOPSIS
    NoDefaults COMMANDr   z-COMMANDS
    COMMAND is one of the following:ÚdoubleÚtripler   r   r$   r   r   r   ÚtestHelpTextNoDefaultsObject1   s    þÿz%HelpTest.testHelpTextNoDefaultsObjectc                 C   sb   t  ¡ j}tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )	Nr'   r   r   úNAME
    doubleúSYNOPSIS
    double COUNTr   zPOSITIONAL ARGUMENTS
    COUNTú@NOTES
    You can also use flags syntax for POSITIONAL ARGUMENTS)	r   r   r'   r   r    r
   r!   r"   r#   r$   r   r   r   ÚtestHelpTextFunction?   s    
þþzHelpTest.testHelpTextFunctionc                 C   sb   t  ¡ j}tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )	Nr(   r   r   zNAME
    triplezSYNOPSIS
    triple <flags>r   z.FLAGS
    -c, --count=COUNT
        Default: 0r   )	r   ÚWithDefaultsr(   r   r    r
   r!   r"   r#   r$   r   r   r   Ú testHelpTextFunctionWithDefaultsL   s    
þþz)HelpTest.testHelpTextFunctionWithDefaultsc                 C   sb   t  ¡ j}tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )	NÚtextr   r   úNAME
    textzSYNOPSIS
    text <flags>r   znFLAGS
    -s, --string=STRING
        Default: '00010203040506070809101112131415161718192021222324252627282...r   )	r   r.   r0   r   r    r
   r!   r"   r#   r$   r   r   r   Ú$testHelpTextFunctionWithLongDefaultsY   s    
þüz-HelpTest.testHelpTextFunctionWithLongDefaultsc                 C   sR   t j}tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )Nr0   r   r   r1   ú#SYNOPSIS
    text ARG1 ARG2 <flags>ú#DESCRIPTION
    Function with kwargzeFLAGS
    --arg3
        Description of arg3.
    Additional undocumented flags may also be accepted.)r   Zfn_with_kwargr   r    r
   r!   r"   r$   r   r   r   ÚtestHelpTextFunctionWithKwargsh   s    þýz'HelpTest.testHelpTextFunctionWithKwargsc                 C   sR   t j}tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )Nr0   r   r   r1   r3   r4   z¸FLAGS
    -o, --opt=OPT
        Default: True
    The following flags are also accepted.
    --arg3
        Description of arg3.
    Additional undocumented flags may also be accepted.)r   Zfn_with_kwarg_and_defaultsr   r    r
   r!   r"   r$   r   r   r   Ú)testHelpTextFunctionWithKwargsAndDefaultsu   s    þûz2HelpTest.testHelpTextFunctionWithKwargsAndDefaultsr   é   )é   é   z)Python < 3.5 does not support type hints.c                 C   sd   t j ¡ j}tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  	d|¡ d S )	Nr'   r   r   r*   zSYNOPSIS
    double <flags>r   zBFLAGS
    -c, --count=COUNT
        Type: float
        Default: 0r   )
r   Úpy3ÚWithDefaultsAndTypesr'   r   r    r
   r!   r"   r#   r$   r   r   r   Ú(testHelpTextFunctionWithDefaultsAndTypes„   s    
ÿþþz1HelpTest.testHelpTextFunctionWithDefaultsAndTypesc                 C   sd   t j ¡ j}tj|tj|ddd}|  d|¡ |  d|¡ |  	d|¡ |  d|¡ |  	d|¡ d S )	NÚget_intr   r   zNAME
    get_intzSYNOPSIS
    get_int <flags>r   zMFLAGS
    -v, --value=VALUE
        Type: Optional[int]
        Default: Noner   )
r   r:   r;   r=   r   r    r
   r!   r"   r#   r$   r   r   r   Ú+testHelpTextFunctionWithTypesAndDefaultNone•   s    
ÿþýz4HelpTest.testHelpTextFunctionWithTypesAndDefaultNonec                 C   sd   t j ¡ j}tj|tj|ddd}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )	Nr'   r   r   r*   r+   r   z2POSITIONAL ARGUMENTS
    COUNT
        Type: floatr,   )	r   r:   Ú	WithTypesr'   r   r    r
   r!   r"   r$   r   r   r   ÚtestHelpTextFunctionWithTypes§   s     þþþz&HelpTest.testHelpTextFunctionWithTypesc                 C   sX   t j ¡ j}tj|tj|ddd}|  d|¡ |  d|¡ |  	d|¡ |  d|¡ d S )NÚ	long_typer   r   zNAME
    long_typezSYNOPSIS
    long_type LONG_OBJr   r,   )
r   r:   r?   rA   r   r    r
   r!   r"   r#   r$   r   r   r   Ú!testHelpTextFunctionWithLongTypes¹   s    þþz*HelpTest.testHelpTextFunctionWithLongTypesc                 C   sP   dj }tj|t |d¡d}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )NÚtestÚupperr   zNAME
    upperzSYNOPSIS
    upperúDESCRIPTION
r   )rD   r   r    r
   r!   r"   r#   r$   r   r   r   ÚtestHelpTextFunctionWithBuiltinÏ   s    
þz(HelpTest.testHelpTextFunctionWithBuiltinc                 C   sB   t }tj|t |d¡d}|  d|¡ |  d|¡ |  d|¡ d S )NÚintr   zNAME
    intzSYNOPSIS
    intrE   )rG   r   r    r
   r!   r"   r$   r   r   r   ÚtestHelpTextFunctionIntTypeÛ   s     
ÿz$HelpTest.testHelpTextFunctionIntTypec                 C   sN   g }t j|t |d¡d}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )NÚlistr   úNAME
    listúSYNOPSIS
    list COMMANDr   ú.COMMANDS
    COMMAND is one of the following:
©r   r    r
   r!   r"   r#   r$   r   r   r   ÚtestHelpTextEmptyListå   s    
þÿzHelpTest.testHelpTextEmptyListc                 C   s\   dg}t j|t |d¡d}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )	Né
   rI   r   rJ   rK   r   rL   z     append
rM   r$   r   r   r   ÚtestHelpTextShortListô   s    
þÿzHelpTest.testHelpTextShortListc                 C   sZ   d}t j|t |d¡d}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )	Né   Ú7r   z
NAME
    7zSYNOPSIS
    7 COMMAND | VALUEr   rL   z*VALUES
    VALUE is one of the following:
rM   r$   r   r   r   ÚtestHelpTextInt  s     
ÿÿzHelpTest.testHelpTextIntc                 C   s8   t j}tj|t |d¡d}|  d|¡ |  d|¡ d S )NÚOldStyleEmptyr   zNAME
    OldStyleEmptyzSYNOPSIS
    OldStyleEmpty)r   rT   r   r    r
   r!   r"   r$   r   r   r   ÚtestHelpTextNoInit  s    
þzHelpTest.testHelpTextNoInitz1Python 2 does not support keyword-only arguments.c                 C   s<   t jjj}tj|t |d¡d}|  d|¡ |  d|¡ d S )NÚwith_defaultr   zNAME
    with_defaultzFLAGS
    -x, --x=X)	r   r:   ÚKeywordOnlyrV   r   r    r
   r!   r"   ©r   r   Úoutputr   r   r   Ú+testHelpTextKeywordOnlyArgumentsWithDefault  s    
 
ÿz4HelpTest.testHelpTextKeywordOnlyArgumentsWithDefaultc                 C   s<   t jjj}tj|t |d¡d}|  d|¡ |  d|¡ d S )Nr'   r   r*   z&FLAGS
    -c, --count=COUNT (required))	r   r:   rW   r'   r   r    r
   r!   r"   rX   r   r   r   Ú.testHelpTextKeywordOnlyArgumentsWithoutDefault$  s    
 
ÿz7HelpTest.testHelpTextKeywordOnlyArgumentsWithoutDefaultú7Python 2 does not support required name-only arguments.c                 C   s\   t j ¡ j}tj|dd}tj||d}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )NÚFunctionMixedDefaultsr   r	   zNAME
    FunctionMixedDefaultszFunctionMixedDefaults <flags>z--alpha=ALPHA (required)z --beta=BETA
        Default: '0')	r   r:   ÚHelpTextComponentÚidentityr
   r!   r   r    r"   )r   r   ÚtrY   r   r   r   Ú!testHelpTextFunctionMixedDefaults-  s    z*HelpTest.testHelpTextFunctionMixedDefaultsc                 C   sD   t  ¡ }tj|dd}t ||¡}d}|  t |¡ 	¡ | 	¡ ¡ d S )NÚClassWithDocstringr   as  
NAME
    ClassWithDocstring - Test class for testing help text output.

SYNOPSIS
    ClassWithDocstring COMMAND | VALUE

DESCRIPTION
    This is some detail description of this test class.

COMMANDS
    COMMAND is one of the following:

     print_msg
       Prints a message.

VALUES
    VALUE is one of the following:

     message
       The default message to print.)
r   rb   r
   r!   r   r    ÚassertEqualÚtextwrapÚdedentÚstrip©r   r   r`   Zhelp_outputÚexpected_outputr   r   r   ÚtestHelpScreen9  s    ÿzHelpTest.testHelpScreenc                 C   sD   t jj}tj|dd}t ||¡}d}|  t 	|¡ 
¡ | 
¡ ¡ d S )NÚexample_generatorr   a­  
    NAME
        example_generator - Generators have a ``Yields`` section instead of a ``Returns`` section.

    SYNOPSIS
        example_generator N

    DESCRIPTION
        Generators have a ``Yields`` section instead of a ``Returns`` section.

    POSITIONAL ARGUMENTS
        N
            The upper limit of the range to generate, from 0 to `n` - 1.

    NOTES
        You can also use flags syntax for POSITIONAL ARGUMENTS)r   ZClassWithMultilineDocstringrj   r
   r!   r   r    rc   rd   re   rf   rg   r   r   r   Ú/testHelpScreenForFunctionDocstringWithLineBreakU  s    ÿz8HelpTest.testHelpScreenForFunctionDocstringWithLineBreakc                 C   sF   t  ¡ j}tj|dd}t ||¡}d}|  t 	|¡ 
¡ | 
¡ ¡ d S )Nr'   r   a  
    NAME
        double - Returns the input multiplied by 2.

    SYNOPSIS
        double <flags>

    DESCRIPTION
        Returns the input multiplied by 2.

    FLAGS
        -c, --count=COUNT
            Default: 0
            Input number that you want to double.)r   r.   r'   r
   r!   r   r    rc   rd   re   rf   rg   r   r   r   Ú0testHelpScreenForFunctionFunctionWithDefaultArgsl  s    
ÿz9HelpTest.testHelpScreenForFunctionFunctionWithDefaultArgsc                 C   st   t  ¡ j}tj|dd}t ||¡}|  t 	d¡d |¡ |  t 	d¡d |¡ |  t 	d¡d t 
d	¡ |¡ d S )
Nr(   r   ÚNAMEz
    tripleÚSYNOPSISz
    triple <flags>ÚFLAGSz
    -c, --Úcount)r   r.   r(   r
   r!   r   r    r"   r   ÚBoldZ	Underline©r   r   r`   r%   r   r   r   ÚtestHelpTextUnderlineFlag  s    
þÿýz"HelpTest.testHelpTextUnderlineFlagc                 C   s~   t  ¡ }tj|dd}t ||¡}|  t d¡d |¡ |  t d¡d |¡ |  t 	d¡d |¡ |  t d	¡d |¡ d S )
Nrb   r   rm   z
    ClassWithDocstringZCOMMANDSÚ
ZCOMMANDz is one of the following:
Z	print_msg)
r   rb   r
   r!   r   r    r"   r   rq   ZBoldUnderlinerr   r   r   r   ÚtestHelpTextBoldCommandNameŽ  s     ÿþz$HelpTest.testHelpTextBoldCommandNamec                 C   sz   t  ¡ }tj|dd}tj||dd}t|ƒ |  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d	|¡ |  d
|¡ d S )NÚTypedPropertiesr   T©r   r
   ÚverboseZGROUPSzGROUP is one of the following:z@charlie
       Class with functions that have default arguments.ZVALUESzVALUE is one of the following:Úalpha)r   rv   r
   r!   r   r    Úprintr"   rr   r   r   r   Ú$testHelpTextObjectWithGroupAndValuesš  s"      ÿþz-HelpTest.testHelpTextObjectWithGroupAndValuesc                 C   sH   d}t j|ddd}| ¡  tj||dd}|  d|¡ |  d|¡ d S )	Né	   rG   ú-©r   Ú	separatorFrw   zint -zint - -)r
   r!   ÚAddSeparatorr   r    r"   r#   rr   r   r   r   Ú+testHelpTextNameSectionCommandWithSeparator©  s    z4HelpTest.testHelpTextNameSectionCommandWithSeparatorc                 C   sN   t  ¡ j}tj|ddd}| ¡  tj||dd}|  d|¡ |  d|¡ d S )Nr'   r}   r~   Trw   zdouble -z
double - -)	r   r.   r'   r
   r!   r€   r   r    r"   rr   r   r   r   Ú2testHelpTextNameSectionCommandWithSeparatorVerbose±  s    
z;HelpTest.testHelpTextNameSectionCommandWithSeparatorVerbosec                 C   s~   t j}tj|dd}t ||¡}|  t d¡d |¡ |  t d¡d |¡ |  t d¡d |¡ |  d	|¡ |  d
|¡ d S )NZ	shortargsr   rm   z
    shortargsrn   z
    shortargs <flags>ro   z
    -f, --firstz
    --lastz
    --late)	r   Zfn_with_multiple_defaultsr
   r!   r   r    r"   r   rq   rr   r   r   r   Ú2testHelpTextMultipleKeywoardArgumentsWithShortArgs¹  s    þþz;HelpTest.testHelpTextMultipleKeywoardArgumentsWithShortArgs)(Ú__name__Ú
__module__Ú__qualname__r   r&   r)   r-   r/   r2   r5   r6   r   ÚskipIfÚsysÚversion_infor<   r>   r@   rB   rF   rH   rN   rP   rS   rU   ÚsixÚPY2rZ   r[   ra   ri   rk   rl   rs   ru   r{   r   r‚   rƒ   Ú__classcell__r   r   r   r   r   !   st   
þ
þ
þ
þ

 ÿ
 ÿ
þ
	r   c                   @   sz   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Ze 	e
jd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	UsageTestc                 C   sF   t  ¡ }tj|dd}tj||dd}d}|  |t |¡ 	d¡¡ d S )Nr   r   F©r
   rx   ú™
    Usage: NoDefaults <command>
      available commands:    double | triple

    For detailed information on this command, run:
      NoDefaults --helprt   ©
r   r   r
   r!   r   Ú	UsageTextrc   rd   re   Úlstrip©r   r   r`   Zusage_outputrh   r   r   r   ÚtestUsageOutputË  s    þzUsageTest.testUsageOutputc                 C   sF   t  ¡ }tj|dd}tj||dd}d}|  |t |¡ 	d¡¡ d S )Nr   r   TrŽ   r   rt   r   r“   r   r   r   ÚtestUsageOutputVerboseÚ  s    þz UsageTest.testUsageOutputVerbosec                 C   s\   t  ¡ j}tj|dd}| |ddgd d ¡ tj||dd}d}|  |t	 
|¡ d¡¡ d S )Nr   r   r'   FrŽ   zv
    Usage: NoDefaults double COUNT

    For detailed information on this command, run:
      NoDefaults double --helprt   )r   r   r'   r
   r!   ZAddAccessedPropertyr   r‘   rc   rd   re   r’   r“   r   r   r   ÚtestUsageOutputMethodè  s    
þzUsageTest.testUsageOutputMethodc                 C   sD   t j}tj|dd}tj||dd}d}|  |t |¡ 	d¡¡ d S )NÚfunction_with_helpr   FrŽ   z¡
    Usage: function_with_help <flags>
      optional flags:        --help

    For detailed information on this command, run:
      function_with_help -- --helprt   )
r   r—   r
   r!   r   r‘   rc   rd   re   r’   r“   r   r   r   ÚtestUsageOutputFunctionWithHelpö  s    þz)UsageTest.testUsageOutputFunctionWithHelpc                 C   sD   t j}tj|dd}tj||dd}d}|  t |¡ 	d¡|¡ d S )NÚmultiplier_with_docstringr   FrŽ   z°
    Usage: multiplier_with_docstring NUM <flags>
      optional flags:        --rate

    For detailed information on this command, run:
      multiplier_with_docstring --helprt   )
r   r™   r
   r!   r   r‘   rc   rd   re   r’   r“   r   r   r   Ú$testUsageOutputFunctionWithDocstring  s    þz.UsageTest.testUsageOutputFunctionWithDocstringr\   c                 C   sN   t j ¡ j}tj|dd}tj||dd}d}t 	|¡ 
d¡}|  ||¡ d S )Nr]   r   FrŽ   zÉ
    Usage: FunctionMixedDefaults <flags>
      optional flags:        --beta
      required flags:        --alpha

    For detailed information on this command, run:
      FunctionMixedDefaults --helprt   )r   r:   r^   r_   r
   r!   r   r‘   rd   re   r’   rc   r“   r   r   r   Ú$testUsageOutputFunctionMixedDefaults  s    z.UsageTest.testUsageOutputFunctionMixedDefaultsc                 C   sH   t  ¡ }tj|ddd}tj||dd}d}|  t |¡ 	d¡|¡ d S )NÚCallableWithKeywordArgumentú@r~   FrŽ   zÛ
    Usage: CallableWithKeywordArgument <command> | <flags>
      available commands:    print_msg
      flags are accepted

    For detailed information on this command, run:
      CallableWithKeywordArgument -- --helprt   )
r   rœ   r
   r!   r   r‘   rc   rd   re   r’   r“   r   r   r   ÚtestUsageOutputCallable#  s    ÿþz!UsageTest.testUsageOutputCallablec                 C   sD   t j}tj|dd}tj||dd}d}|  t |¡ 	d¡|¡ d S )NÚInstanceVarsr   FrŽ   z~
    Usage: InstanceVars --arg1=ARG1 --arg2=ARG2

    For detailed information on this command, run:
      InstanceVars --helprt   ©
r   rŸ   r
   r!   r   r‘   rc   rd   re   r’   r“   r   r   r   Ú'testUsageOutputConstructorWithParameter4  s    þz1UsageTest.testUsageOutputConstructorWithParameterc                 C   sD   t j}tj|dd}tj||dd}d}|  t |¡ 	d¡|¡ d S )NrŸ   r   TrŽ   z«
    Usage: InstanceVars <command> | --arg1=ARG1 --arg2=ARG2
      available commands:    run

    For detailed information on this command, run:
      InstanceVars --helprt   r    r“   r   r   r   Ú.testUsageOutputConstructorWithParameterVerboseA  s    þz8UsageTest.testUsageOutputConstructorWithParameterVerbosec                 C   sB   i }t j|dd}tj||dd}d}|  t |¡ d¡|¡ d S )NZ	EmptyDictr   TrŽ   z`
    Usage: EmptyDict

    For detailed information on this command, run:
      EmptyDict --helprt   ©r
   r!   r   r‘   rc   rd   re   r’   r“   r   r   r   ÚtestUsageOutputEmptyDictO  s    þz"UsageTest.testUsageOutputEmptyDictc                 C   sB   d }t j|dd}tj||dd}d}|  t |¡ d¡|¡ d S )NÚNoner   TrŽ   zV
    Usage: None

    For detailed information on this command, run:
      None --helprt   r£   r“   r   r   r   ÚtestUsageOutputNone\  s    þzUsageTest.testUsageOutputNonec                 C   s8   t j}tj|dd}tj||dd}d}|  ||¡ d S )NÚSubPointr   FrŽ   zUsage: SubPoint --x=X --y=Y)r   r§   r
   r!   r   r‘   r"   r“   r   r   r   Ú,testInitRequiresFlagSyntaxSubclassNamedTuplei  s
    z6UsageTest.testInitRequiresFlagSyntaxSubclassNamedTupleN)r„   r…   r†   r”   r•   r–   r˜   rš   r   r‡   rŠ   r‹   r›   rž   r¡   r¢   r¤   r¦   r¨   r   r   r   r   r   É  s    þ
r   Ú__main__)Ú__doc__Ú
__future__r   r   r   r   rˆ   rd   Zfirer   r   r   r   r   r
   rŠ   ZBaseTestCaser   r   r„   Úmainr   r   r   r   Ú<module>   s(      + (