U
    +cs                     @   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ZddlZG dd	 d	e
jZed
kre
  dS )zTests for the fire module.    )absolute_import)division)print_functionN)test_components)	testutilsc                   @   s2  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd 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.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%d@dA Z&dBdC Z'dDdE Z(dFdG Z)dHdI Z*dJdK Z+dLdM Z,dNdO Z-dPdQ Z.dRdS Z/dTdU Z0dVdW Z1dXdY Z2dZd[ Z3d\d] Z4d^d_ Z5d`da Z6dbdc Z7ddde Z8dfdg Z9dhdi Z:djdk Z;dldm Z<dndo Z=dpdq Z>drds Z?dtdu Z@dvdw ZAdxdy ZBeeCjDdzd{ d|kd}d~d ZEeejddd ZFdS )FireTestc              	   C   s   t jtddg* ttj ttj ttj	 W 5 Q R X | 
tjtjddd | 
tjtjddd | 
tjtjdd	gdd | 
tjtjd
dgdd | 
tjtjdd	gdd d S )NargvZprognameztriple 4command   )double2   triple4r   r   )mockpatchobjectsysfireFiretcEmptyZOldStyleEmptyZWithInitassertEqual
NoDefaultsWithDefaultsOldStyleWithDefaultsself r   2/tmp/pip-unpacked-wheel-1xt1w7un/fire/fire_test.pytestFire"   s"    zFireTest.testFirec                 C   s4   |  ttjdd |  ttjddgd d S )Nzdouble 2r   r   r   )r   r   r   r   r   r   r   r   r    testFirePositionalCommand0   s    z"FireTest.testFirePositionalCommandc              	   C   s*   |  t tjtjdd W 5 Q R X d S )N
   r	   )assertRaises
ValueErrorr   r   r   r   r   r   r   r    testFireInvalidCommandArg5   s    z"FireTest.testFireInvalidCommandArgc              
   C   sT   t jtdtjdddg, | jdd d t	t
j W 5 Q R X W 5 Q R X d S )Nr   zpython-firer   zbase_filename.pyzSYNOPSIS.*base_filename.py)stdoutstderr)r   r   r   r   ospathjoinZassertOutputMatchesr   r   r   r   r   r   r   r    testFireDefaultName:   s    

zFireTest.testFireDefaultNamec                 C   s   |  tjtjdgdd d S )NZtenr	   r#   r   r   r   r   MixedDefaultsr   r   r   r    testFireNoArgsB   s    zFireTest.testFireNoArgsc              	   C   s   |  d tjtjdgd W 5 Q R X |  d tjtjdgd W 5 Q R X |  d tjtjddgd W 5 Q R X | t tjtj	ddgd W 5 Q R X d S )	N   Znomethodr	   r   deltaxZ
reciprocalz0.0)
assertRaisesFireExitr   r   r   r   r   TypedPropertiesr$   ZeroDivisionErrorNumberDefaultsr   r   r   r    testFireExceptionsE   s    zFireTest.testFireExceptionsc                 C   s|   |  tjtjdddgdd |  tjtjdddgdd |  tjtjdddgdd |  tjtjdddgdd d S Nr   --count5r	   r#   r      r   r   r   r   r   r   r   r   r   r    testFireNamedArgsR   s$    zFireTest.testFireNamedArgsc                 C   s|   |  tjtjdddgdd |  tjtjdddgdd |  tjtjdddgdd |  tjtjdddgdd d S )Nr   z-countr:   r	   r#   r   r;   r<   r   r   r   r    testFireNamedArgsSingleHyphen^   s$    z&FireTest.testFireNamedArgsSingleHyphenc                 C   s<   |  tjtjddgdd |  tjtjddgdd d S )Nr   z	--count=5r	   r#   r   r;   r   r   r   r   r   r   r   r   r    testFireNamedArgsWithEqualsj   s    z$FireTest.testFireNamedArgsWithEqualsc                 C   s<   |  tjtjddgdd |  tjtjddgdd d S )Nr   z-count=5r	   r#   r   r;   r?   r   r   r   r    'testFireNamedArgsWithEqualsSingleHyphenp   s    z0FireTest.testFireNamedArgsWithEqualsSingleHyphenc              	   C   s   |  tjtjdddgdd |  tjtjddddgdd |  tjtjddddgdd |  tjtjddddgdd |  tjtjddddgdd |  tjtjdddddgdd |  tjtjdddddgdd d S )	Nsum1r   r	      --alpha--betar   r-   r   r   r   r    testFireAllNamedArgsv   sB    



zFireTest.testFireAllNamedArgsc                 C   sv   |  tjtjdgdd |  tjtjddgdd |  tjtjdddgdd |  tjtjdddgdd	 d S )
NrB   r	   r   rC      rE   rF   r   r   r-   r   r   r   r    testFireAllNamedArgsOneMissing   s    z'FireTest.testFireAllNamedArgsOneMissingc              	   C   s   |  tjtjdddgdd |  tjtjddddgdd |  tjtjddddgdd |  tjtjddddgdd |  tjtjddddgdd |  tjtjdddddgdd |  tjtjdddddgdd d S )	NidentityrC   r   r	   )rH   r0   rE   rF   )r0   rH   r-   r   r   r   r    testFirePartialNamedArgs   sT     



z!FireTest.testFirePartialNamedArgsc              	   C   s   |  d tjtjdgd W 5 Q R X |  d tjtjdddgd W 5 Q R X | tjtjddgdd | tjtjdddgdd d S )	Nr0   rJ   r	   rF   r   rC   )rH   0rE   )r3   r   r   r   r.   r   r   r   r   r    "testFirePartialNamedArgsOneMissing   s      z+FireTest.testFirePartialNamedArgsOneMissingc                 C   s<   |  tjtjddgdd |  tjtjddgdd d S )Nr   r:   r	   r#   r   r;   )r   r   r   r   ZAnnotationsr   r   r   r    testFireAnnotatedArgs   s    zFireTest.testFireAnnotatedArgsz'Keyword-only arguments not in Python 2.c              	   C   sp   |  d tjtjjddgd W 5 Q R X | tjtjjdddgdd | tjtjjdddgdd d S )	Nr0   r   r:   r	   r9   r#   r   r;   )r3   r   r   r   py3ZKeywordOnlyr   r   r   r   r    testFireKeywordOnlyArgs   s       z FireTest.testFireKeywordOnlyArgsc                 C   s8   |  tjtjdgdd |  tjtjdgdd d S )Nalphar	   Tbeta)rH   r0      r   r   r   r   r4   r   r   r   r    testFireProperties   s    zFireTest.testFirePropertiesc                 C   s@   |  tjtjdddgdd |  tjtjdddgdd d S )	NZcharlier   Zhellor	   Z
hellohellor   wZwwwrT   r   r   r   r    testFireRecursion   s    zFireTest.testFireRecursionc              	   C   sX   |  tjtjdddddgddddd	g |  tjtjdd
dddgdddddg d S )NZcumsumsabcdr	   ababcZabcdrC   r   3r   rH   rS      r#   r   r   r   r   ZVarArgsr   r   r   r    testFireVarArgs   s    

zFireTest.testFireVarArgsc              
   C   sJ   |  tjtjdddddgdd |  tjtjddd	ddd
gdd d S )NvarcharsrC   r   rZ   r[   r	   )rH   r0   Zcdr^   r   e)rS   r   Zcder`   r   r   r   r    testFireVarArgsWithNamedArgs   s    z%FireTest.testFireVarArgsWithNamedArgsc                 C   s   |  tjtjdddddgdddd |  tjtjdd	d
gdddi |  tjtjdd	dgdddi |  tjtjddddi |  tjtjdddddgdd |  tjtjdddddddgdd d S )Npropsz--nameZDavidz--ageZ24r	      )nameZagez	--messagez#"This is a message it has -- in it"messagez!This is a message it has -- in itz3props --message "This is a message it has -- in it"upperrE   ArF   Bz
ALPHA BETA-lowerz
alpha betar   r   r   r   ZKwargsr   r   r   r    testFireKeywordArgs   sZ    zFireTest.testFireKeywordArgsc              	   C   sZ   |  tjtjdddddgdddddif |  tjtjddddgddd ddif d S )	NrunZHelloZWorldz--cellisr	   cellokrn   r   r   r   r    ,testFireKeywordArgsWithMissingPositionalArgs  s    z5FireTest.testFireKeywordArgsWithMissingPositionalArgsc                 C   sD   |  tjt dddgdd |  tjt dddgdd d S r8   r?   r   r   r   r    testFireObject  s      zFireTest.testFireObjectc                 C   sF   ddddd}|  tj|ddgdd	 |  tj|d
gdd d S )Nr   c                 S   s   d|  S )Nr0   r   )r2   r   r   r    <lambda>      z'FireTest.testFireDict.<locals>.<lambda>Zswiss)r   cheeser   r:   r	   r#   rx   )r   r   r   r   r   	componentr   r   r    testFireDict  s
    zFireTest.testFireDictc                 C   sx   |  tjtjddgdd |  tjtjdddgdd | tjtjddgdt |  tjtjdddgdd	 d S )
Nr1   echor	   Erm   rc   ZnestrL   rX   )r   r   r   r   r4   assertIsInstancedictr   r   r   r    testFireObjectWithDict  s         zFireTest.testFireObjectWithDictc                 C   s*   t  }tj|g d}| t|d d S Nr	   rS   )r   Z
simple_setr   r   r   lenr   r{   resultr   r   r    testFireSet$  s    zFireTest.testFireSetc                 C   s*   t  }tj|g d}| t|d d S r   )r   Zsimple_frozensetr   r   r   r   r   r   r   r    testFireFrozenset)  s    zFireTest.testFireFrozensetc                 C   sX   ddddg}|  tj|dgdd |  tj|dgdd |  tj|dgdd d S )	NZzeroZoneZtwoZthreer   r	   r^   z-1ry   rz   r   r   r    testFireList.  s    zFireTest.testFireListc                 C   s<   |  tjtjddgdd |  tjtjddgdd d S )Nr}   rL   r	   ZalexrC   bethanyrT   r   r   r   r    testFireObjectWithList4  s    zFireTest.testFireObjectWithListc                 C   s<   |  tjtjddgdd |  tjtjddgdd d S )NfoxrL   r	   ZcarryrC   dividerT   r   r   r   r    testFireObjectWithTuple:  s    z FireTest.testFireObjectWithTuplec                 C   s"   |  tjtjdddgdd d S )Nr}   countr   r	   rH   rT   r   r   r   r    testFireObjectWithListAsObject@  s    z'FireTest.testFireObjectWithListAsObjectc                 C   s"   |  tjtjdddgdd d S )Nr   r   r   r	   rH   rT   r   r   r   r    testFireObjectWithTupleAsObjectE  s    z(FireTest.testFireObjectWithTupleAsObjectc                 C   s   |  tjddddgdd dd }|  tjd	d
gdd |  tjddgdd ddd}|  tjddgddddddh d S )Nr   r   r   10r	      c                 S   s   | d S )Nr   )textr   r   r    rv   M  rw   z.FireTest.testFireNoComponent.<locals>.<lambda>	last_charz"Hello"oz	last-charz"World"r[   r   c                 S   s   t t| S N)setrange)r   r   r   r    rv   P  rw   rsetr:   rH   r0   rS   r   )r   ry   )r   r   r   r   r   r    testFireNoComponentJ  s    
zFireTest.testFireNoComponentc                 C   s8   |  tjtjdgdd |  tjtjdgdd d S )Nzunderscore-exampler	   zfish fingersZunderscore_exampler   r   r   r   ZUnderscoresr   r   r   r    testFireUnderscoresS  s    zFireTest.testFireUnderscoresc                 C   sX   |  tjtjddgdd |  tjtjddgdd |  tjtjddgdd d S )Nzunderscore-functionZexampler	   Zunderscore_functionz--underscore-arg=scoreZscorez--underscore_arg=scorer   r   r   r   r    testFireUnderscoresInArg[  s$    z!FireTest.testFireUnderscoresInArgc                 C   s   |  tjtjddgdd |  tjtjddgdd |  tjtjddgdd |  tjtjddgdd |  tjtjdd	gdd |  tjtjdd
gdd d S )Nas-boolTruer	   TFalseFz
--arg=Truez--arg=Falsez--argz--noarg)r   r   r   r   BoolConverterr   r   r   r    testBoolParsingh  s,        zFireTest.testBoolParsingc                 C   s   |  tjtjdddgdd |  tjtjdddgdd |  tjtjdd	d
dgdd |  tjtjdd	dgdd |  tjtjddd
gdd |  tjtjddd
gdd d S )NrJ   r   r   r	   TFz--alpha=Falser   Fr#   rE   rF   Tr#   	--beta=10z	--noalphaFT)r#   Tr-   r   r   r   r    testBoolParsingContinuedv  sD    
z!FireTest.testBoolParsingContinuedc                 C   s   |  tjtjdddgdd |  tjtjddddgdd |  tjtjddd	gdd |  tjtjdd
dgdd |  tjtjddddgdd d S )NrJ   z-alpha=Falser   r	   r   -alphaz-betar   z-beta=10z-noalphar   z-10)iTr-   r   r   r   r    testBoolParsingSingleHyphen  s<    

z$FireTest.testBoolParsingSingleHyphenc              	   C   s   |  tjtjdddgdd |  tjtjdddgdd |  tjtjdddgdd | d	 tjtjddd
gd W 5 Q R X |  tjtjddddgdd |  tjtjddgdd |  tjtjddd d S )NrJ   rE   r   r	   )r#   rL   r   r   r   r0   --testz"--test")Tr   z--alpha=--test)r   rL   zidentity --alpha \"--test\"r   r   r   r   r.   r3   r   r   r   r     testBoolParsingLessExpectedCases  sH     
z)FireTest.testBoolParsingLessExpectedCasesc              	   C   s   |  tjtjddgdd |  tjtjdddgdd |  tjtjdddgdd |  tjtjddd	dgdd
 |  tjtjddd	ddgdd |  tjtjdddddgdd | d tjtjddgd W 5 Q R X d S )NrJ   -ar	   TrL   r   r   -bTT42)*   Tr   r   r#   rE   r   r0   )r   r   r   r   r.   r3   SimilarArgNamesr   r   r   r    testSingleCharFlagParsing  sL    
z"FireTest.testSingleCharFlagParsingc                 C   s   |  tjtjddgdd |  tjtjdddgdd |  tjtjddd	gdd
 |  tjtjddddgdd |  tjtjddddgdd d S )NrJ   z-a=Truer	   r   z-a=3r   )rS   r#   z-a=Falsez-b=15)Fr;   r   r   z-b=12)r   r   z-a=42r   r   r   r-   r   r   r   r    "testSingleCharFlagParsingEqualSign  s<    

z+FireTest.testSingleCharFlagParsingEqualSignc                 C   s   |  tjtjddgdd |  tjtjddgdd |  tjtjddgdd |  tjtjddgdd	 |  tjtjdddgdd
 d S )NZ	identity2r   r	   )TNz-a=10)r#   Nz--ar   )NTr   )r   r   r   r   r   r   r   r   r    #testSingleCharFlagParsingExactMatch  s<    z,FireTest.testSingleCharFlagParsingExactMatchc              	   C   s&   |  tjtjdddddgdd d S )NrB   z-Dr:   z-Gr   r	   r;   )r   r   r   r   ZCapitalizedArgNamesr   r   r   r    &testSingleCharFlagParsingCapitalLetter  s    z/FireTest.testSingleCharFlagParsingCapitalLetterc              	   C   s^  dd }|  tj|ddgdd |  tj|ddgdd | d	 tj|ddgd W 5 Q R X d
d }|  tj|dgddi f |  tj|dgddi f | d	 tj|dgd W 5 Q R X |  tj|ddgddddif dd }|  tj|ddgddddif |  tj|ddgddddif |  tj|ddgddddif d S )Nc                 S   s   | |fS r   r   )thingnothingr   r   r    fn1  s    z+FireTest.testBoolParsingWithNo.<locals>.fn1z--thingz	--nothingr	   r   z--nonothingr   r0   c                 [   s   | |fS r   r   )r   kwargsr   r   r    fn2
  s    z+FireTest.testBoolParsingWithNo.<locals>.fn2TFz--nothing=Truer   c                 [   s   | |fS r   r   )argr   r   r   r    fn3  s    z+FireTest.testBoolParsingWithNo.<locals>.fn3z--arg=valuevaluer   )r   r   r   r3   )r   r   r   r   r   r   r    testBoolParsingWithNo  s6    



zFireTest.testBoolParsingWithNoc              	   C   s   |  dd tjtjddddgd W 5 Q R X |  dd tjtjddddgd W 5 Q R X |  dd tjtjddgd W 5 Q R X d S )	Nr   zFire trace:
r   r   ----tracer	   -tr3   r   r   r   r   r   r   r   r    testTraceFlag  s    ""zFireTest.testTraceFlagc              	   C   s   |  d tjtjddddgd W 5 Q R X |  d tjtjddddgd W 5 Q R X |  d tjtjddgd W 5 Q R X d S )Nr   r   r   r   --helpr	   -hr   r   r   r   r    testHelpFlag%  s    ""zFireTest.testHelpFlagc              	   C   s   |  dd  tjtjdddddgd W 5 Q R X |  dd  tjtjdddd	d
gd W 5 Q R X |  dd tjtjdd	dgd W 5 Q R X d S )Nr   zFire trace:
.*SYNOPSISr   r   r   r   r   r	   r   r   r   r   r   r   r    testHelpFlagAndTraceFlag-  s    $z!FireTest.testHelpFlagAndTraceFlagc                 C   s0   t jtjddgd}| d| | d| d S )Nr   --completionr	   r   r   r   r   r   r   assertInr   completion_scriptr   r   r    testTabCompletionNoName6  s    z FireTest.testTabCompletionNoNamec                 C   s2   t jtjddgdd}| d| | d| d S )Nr   r   rZ   r
   rg   r   r   r   r   r   r   r    testTabCompletion;  s      zFireTest.testTabCompletionc                 C   s<   ddd i}t j|ddgdd}| d| | d| d S )Nmultiplyc                 S   s   | | S r   r   )rX   rY   r   r   r    rv   B  rw   z4FireTest.testTabCompletionWithDict.<locals>.<lambda>r   r   ZactCLIr   )r   r   r   )r   actionsr   r   r   r    testTabCompletionWithDictA  s      z"FireTest.testTabCompletionWithDictc              
   C   s   |  tjtjdddgdd |  tjtjddddgdd |  tjtjddddd	d
gdd | d tjtjddddgd W 5 Q R X d S )NrJ   +_r	   )r   r   rl   )r   r   r   --separator&)rl   r   r0   r   r   r   r   r    testBasicSeparatorH  s(    
zFireTest.testBasicSeparatorc                 C   sV   |  tjtjddtj |  tjtjg dtj |  tjtjddgdtj dS )z8Fire should work with classes that disallow comparisons. r	   rl   N)r   r   r   r   ZNonComparabler   r   r   r    testNonComparable[  s       zFireTest.testNonComparablec                 C   sR   |  tjtjdddddddgdd |  tjtjddddddddgdd d S )	Nget-objarg1arg2rl   r   r   r	   T)r   r   r   r   
ReturnsObjr   r   r   r    testExtraSeparatorsh  s     zFireTest.testExtraSeparatorsc                 C   s   |  tjtjdddddgdtj | tjtjddddddgdd | tjtjdddd	ddd
dd	g	dd | tjtjdddddd
ddgdd d S )Nr   r   r   r   r   r	   rl   Tr   r   r   z$$)r   r   r   r   r   r   r   r   r   r   r    testSeparatorForChainingu  s@       z!FireTest.testSeparatorForChainingc              	   C   s&   |  tjtjdddddgdd d S )NrB   rE   z-3rF   z-4r	   ir-   r   r   r   r    testNegativeNumbers  s    zFireTest.testNegativeNumbersc              	   C   s`   |  tjtjdddddgdd |  tjtjdd	d
gdd |  tjtjddgdd d S )NrB   rE   z2.2rF   z3.0r	   gffffff @Zinteger_reciprocalz	--divisorz5.0g?z4.0g      ?)r   r   r   r   r.   r6   r   r   r   r    testFloatForExpectedInt  s"    z FireTest.testFloatForExpectedIntc              	   C   sL   |  tjtjddgdtj | d tjtjddgd W 5 Q R X d S )N	--arg1=a1	--arg2=a2r	   r0   a1a2)r   r   r   r   InstanceVarsr3   r   r   r   r    testClassInstantiation  s    zFireTest.testClassInstantiationc              
   C   sv  |  d tjtjdgd W 5 Q R X |  d tjtjdgd W 5 Q R X |  d  tjtjdddddgd W 5 Q R X |  d tjtjdd	dd
gd W 5 Q R X |  d$ tjtjdddddddgd W 5 Q R X |  d$ tjtjdd	dddddgd W 5 Q R X |  d tjtjddddgd W 5 Q R X |  d tjtjdd	ddgd W 5 Q R X d S )Nr0   r   r	   r   r   rl   rp   Zb1r   zrun b1Zb2Zb3Zjog)r3   r   r   r   r   r   r   r   r    testTraceErrors  s.    $
"zFireTest.testTraceErrorsc                 C   s    |  tjtjddgdd d S Nr   r   r	   r   )r   r   r   r   ZDefaultMethodr   r   r   r    testClassWithDefaultMethod  s     z#FireTest.testClassWithDefaultMethodc                 C   s    |  tjtjddgdd d S r   )r   r   r   r   ZInvalidPropertyr   r   r   r    testClassWithInvalidProperty  s     z%FireTest.testClassWithInvalidPropertyr   r0   )rS   r   z5Cannot inspect wrapped signatures in Python 2 or 3.4.c              	   C   sT   |  d tjtjdgd W 5 Q R X |  d tjtjdgd W 5 Q R X d S )Nr   r   r	   r   )r3   r   r   r   Zdecorated_methodr   r   r   r    testHelpKwargsDecorator  s    z FireTest.testHelpKwargsDecoratorz"Asyncio not available in Python 2.c                 C   s$   |  tjtjjdddgdd d S )Nr   r9   r   r	   r   )r   r   r   r   rO   ZWithAsyncior   r   r   r    testFireAsyncio  s
    zFireTest.testFireAsyncioN)G__name__
__module____qualname__r!   r"   r&   r,   r/   r7   r=   r>   r@   rA   rG   rI   rK   rM   rN   r   ZskipIfsixPY2rP   rU   rW   ra   rd   ro   rt   ru   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   version_infor   r   r   r   r   r    r       s   

	"
	#	
r   __main__)__doc__
__future__r   r   r   r)   r   r   r   r   r   r   r   ZBaseTestCaser   r   mainr   r   r   r    <module>   s$        ?