o
    Ďi"r                     @   sj   d Z ddlZddlZddlmZ ddlZddlmZ ddlmZ G dd dej	Z
edkr3e  dS dS )	zTests for the fire module.    N)mock)test_components)	testutilsc                   @   s  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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}S )~FireTestc                 C   s   t jtddg ttj ttj ttj	 W d    n1 s&w   Y  | 
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argvprognameztriple 4command   )double2   triple4r   r   )r   patchobjectsysfireFiretcEmptyOldStyleEmptyWithInitassertEqual
NoDefaultsWithDefaultsOldStyleWithDefaultsself r   J/home/jeff/fluffinator/venv/lib/python3.10/site-packages/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    testFirePositionalCommand*   s   z"FireTest.testFirePositionalCommandc                 C   s@   |  t tjtjdd W d    d S 1 sw   Y  d S )N
   r   )assertRaises
ValueErrorr   r   r   r   r   r   r   r    testFireInvalidCommandArg/   s   "z"FireTest.testFireInvalidCommandArgc              	   C   s   t jtdtjdddg. | jdd d t	t
j W d    n1 s(w   Y  W d    d S W d    d S 1 s@w   Y  d S )Nr   zpython-firer   zbase_filename.pyzSYNOPSIS.*base_filename.py)stdoutstderr)r   r   r   r   ospathjoinassertOutputMatchesr   r   r   r   r   r   r   r    testFireDefaultName4   s   

"zFireTest.testFireDefaultNamec                 C   s   |  tjtjdgdd d S )Ntenr   r#   r   r   r   r   MixedDefaultsr   r   r   r    testFireNoArgs<   s   zFireTest.testFireNoArgsc                 C   s   |  d tjtjdgd W d    n1 sw   Y  |  d tjtjdgd W d    n1 s7w   Y  |  d tjtjddgd W d    n1 sVw   Y  | t tjtj	ddgd W d    d S 1 svw   Y  d S )	N   nomethodr   r   deltax
reciprocalz0.0)
assertRaisesFireExitr   r   r   r   r   TypedPropertiesr$   ZeroDivisionErrorNumberDefaultsr   r   r   r    testFireExceptions?   s   "zFireTest.testFireExceptionsc                 C   t   |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd d S Nr   --count5r   r#   r   r?   r@      r   r   r   r   r   r   r   r   r   r    testFireNamedArgsL   $   zFireTest.testFireNamedArgsc                 C   r<   )N)r   -countr@   r   r#   )r   rF   r@   rB   rC   r   r   r   r    testFireNamedArgsSingleHyphenX   rE   z&FireTest.testFireNamedArgsSingleHyphenc                 C   <   |  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   rB   r   r   r   r   r   r   r   r   r    testFireNamedArgsWithEqualsd      z$FireTest.testFireNamedArgsWithEqualsc                 C   rH   )Nr   z-count=5r   r#   r   rB   rI   r   r   r   r    'testFireNamedArgsWithEqualsSingleHyphenj   rK   z0FireTest.testFireNamedArgsWithEqualsSingleHyphenc                 C      |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd |  tjtjg d	dd |  tjtjg d
dd d S )N)sum1r   r      )rN   --alpharO   r   )rN   --betarO   r   r   )rN   rO   rQ   r   )rN   rO   rR   r   )rN   rQ   rO   rR   r   )rN   rR   rO   rQ   r   r/   r   r   r   r    testFireAllNamedArgsp   sB   zFireTest.testFireAllNamedArgsc                 C   sr   |  tjtjdgdd |  tjtjddgdd |  tjtjg ddd |  tjtjg ddd d S )	NrN   r   r   rO      )rN   rQ   rO   )rN   rR   r   r   r/   r   r   r   r    testFireAllNamedArgsOneMissing   s   z'FireTest.testFireAllNamedArgsOneMissingc                 C   rM   )N)identityrO   r   r   )rT   r2   )rV   rQ   rO   r   )rV   rR   rO   r   )r2   rT   )rV   rO   rQ   r   )rV   rO   rR   r   )rV   rQ   rO   rR   r   )rV   rR   rO   rQ   r   r/   r   r   r   r    testFirePartialNamedArgs   sR   z!FireTest.testFirePartialNamedArgsc                 C   s   |  d tjtjdgd W d    n1 sw   Y  |  d tjtjg dd W d    n1 s8w   Y  | tjtjddgdd | tjtjg ddd d S )Nr2   rV   r   )rV   rR   r   rO   )rT   0)rV   rQ   rO   )r7   r   r   r   r0   r   r   r   r   r    "testFirePartialNamedArgsOneMissing   s   z+FireTest.testFirePartialNamedArgsOneMissingc                 C   rH   )Nr   r@   r   r#   r   rB   )r   r   r   r   Annotationsr   r   r   r    testFireAnnotatedArgs   s    zFireTest.testFireAnnotatedArgsc                 C   s   |  d tjtjjddgd W d    n1 sw   Y  | tjtjjg ddd | tjtjjg ddd d S )	Nr2   r   r@   r   r>   r#   rA   rB   )r7   r   r   r   py3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)rT   r2      r   r   r   r   r8   r   r   r   r    testFireProperties   s   zFireTest.testFirePropertiesc                 C   <   |  tjtjg ddd |  tjtjg ddd d S )N)charlier   hellor   
hellohello)re   r   wwwwrb   r   r   r   r    testFireRecursion   s   zFireTest.testFireRecursionc                 C   sD   |  tjtjg ddg d |  tjtjg ddg d d S )N)cumsumsabcdr   )rl   ababcabcd)rk   rO   r   3r   )rT   ra      r#   r   r   r   r   VarArgsr   r   r   r    testFireVarArgs   s   zFireTest.testFireVarArgsc                 C   rd   )N)varcharsrO   r   rn   ro   r   )rT   r2   cd)rx   rs   r   rn   ro   e)ra   r   cderu   r   r   r   r    testFireVarArgsWithNamedArgs   s   z%FireTest.testFireVarArgsWithNamedArgsc                 C   s   |  tjtjg ddddd |  tjtjg ddddi |  tjtjg d	dddi |  tjtjd
dddi |  tjtjg ddd |  tjtjg ddd d S )N)propsz--nameDavidz--age24r   r~      )nameage)r}   	--messagez#"This is a message it has -- in it"message!This is a message it has -- in it)r}   r   r   z3props --message "This is a message it has -- in it")upperrQ   ArR   Bz
ALPHA BETA)r   rQ   r   rR   r   -lowerz
alpha betar   r   r   r   Kwargsr   r   r   r    testFireKeywordArgs   sR   zFireTest.testFireKeywordArgsc                 C   sP   |  tjtjg ddddddif |  tjtjg dddd ddif d S )	N)runHelloWorld--cellisr   r   r   cellr   )r   r   r   okr   r   r   r   r   r    ,testFireKeywordArgsWithMissingPositionalArgs   s   z5FireTest.testFireKeywordArgsWithMissingPositionalArgsc                 C   s@   |  tjt g ddd |  tjt g ddd d S r=   rI   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 )Nr2   r   )r5   r   r   r    <lambda>      z'FireTest.testFireDict.<locals>.<lambda>swiss)r   cheeser   r@   r   r#   r   r   r   r   r   r   	componentr   r   r    testFireDict  s
   zFireTest.testFireDictc                 C   st   |  tjtjddgdd |  tjtjg ddd | tjtjddgdt |  tjtjg ddd	 d S )
Nr4   echor   E)r4   r   r   rz   nest)r4   r   rX   rl   )r   r   r   r   r8   assertIsInstancedictr   r   r   r    testFireObjectWithDict  s   zFireTest.testFireObjectWithDictc                 C   *   t  }tj|g d}| t|d d S Nr   ra   )r   
simple_setr   r   r   lenr   r   resultr   r   r    testFireSet     zFireTest.testFireSetc                 C   r   r   )r   simple_frozensetr   r   r   r   r   r   r   r    testFireFrozenset"  r   zFireTest.testFireFrozensetc                 C   sT   g d}|  tj|dgdd |  tj|dgdd |  tj|dgdd d S )N)zeroonetwothreer   r   r   rs   r   z-1r   r   r   r   r    testFireList'  s   zFireTest.testFireListc                 C   <   |  tjtjddgdd |  tjtjddgdd d S )Nr   rX   r   alexrO   bethanyrb   r   r   r   r    testFireObjectWithList-     zFireTest.testFireObjectWithListc                 C   r   )NfoxrX   r   carryrO   dividerb   r   r   r   r    testFireObjectWithTuple3  r   z FireTest.testFireObjectWithTuplec                 C       |  tjtjg ddd d S )N)r   countr   r   rT   rb   r   r   r   r    testFireObjectWithListAsObject9     z'FireTest.testFireObjectWithListAsObjectc                 C   r   )N)r   r   r   r   rT   rb   r   r   r   r    testFireObjectWithTupleAsObject>  r   z(FireTest.testFireObjectWithTupleAsObjectc                 C   sz   |  tjg d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h d d S )N)r   r   r   10r      c                 S   s   | d S )Nr   )textr   r   r    r   F  r   z.FireTest.testFireNoComponent.<locals>.<lambda>	last_charz"Hello"oz	last-charz"World"ro   r   c                 S   s   t t| S N)setrange)r   r   r   r    r   I  s    rsetr@   >   r   rT   r2   ra   r   r   r   )r   r   r   r   r   r    testFireNoComponentC  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 fingersunderscore_exampler   r   r   r   Underscoresr   r   r   r    testFireUnderscoresL  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-functionexampler   underscore_functionz--underscore-arg=scorescorez--underscore_arg=scorer   r   r   r   r    testFireUnderscoresInArgT  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    testBoolParsinga  s$   zFireTest.testBoolParsingc                 C   s   |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd |  tjtjg d	dd
 |  tjtjg ddd d S )N)rV   r   r   r   TF)rV   z--alpha=Falser   Fr#   )rV   rQ   rR   r   Tr#   rV   rQ   	--beta=10)rV   z	--noalpharR   FT)rV   r   rR   )r#   Tr/   r   r   r   r    testBoolParsingContinuedo  sD   z!FireTest.testBoolParsingContinuedc                 C   s   |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd |  tjtjg d	dd
 d S )N)rV   z-alpha=Falser   r   r   )rV   -alpha-betar   r   )rV   r   z-beta=10)rV   z-noalphar   r   )rV   r   z-10r   )iTr/   r   r   r   r    testBoolParsingSingleHyphen  <   z$FireTest.testBoolParsingSingleHyphenc                 C   s   |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd | d tjtjg dd W d    n1 sDw   Y  |  tjtjg d	dd
 |  tjtjddgdd |  tjtjddd d S )N)rV   rQ   r   r   )r#   rX   r   r   )rV   r   r   r2   )rV   rQ   --test)rV   rQ   r   z"--test")Tr   rV   z--alpha=--test)r   rX   zidentity --alpha \"--test\"r   r   r   r   r0   r7   r   r   r   r     testBoolParsingLessExpectedCases  sJ   z)FireTest.testBoolParsingLessExpectedCasesc                 C   s   |  tjtjddgdd |  tjtjg ddd |  tjtjg ddd |  tjtjg d	dd
 |  tjtjg ddd |  tjtjg ddd | d tjtjddgd W d    d S 1 sow   Y  d S )NrV   -ar   TrX   )rV   r   r   r   )rV   r   -bTT)rV   r   42r   )*   T)rV   r   r   r   r   r   r#   )rV   rQ   r   r   r   r2   r   )r   r   r   r   r0   r7   SimilarArgNamesr   r   r   r    testSingleCharFlagParsing  sN   "z"FireTest.testSingleCharFlagParsingc                 C   s   |  tjtjddgdd |  tjtjg ddd |  tjtjg ddd |  tjtjg d	dd
 |  tjtjg ddd d S )NrV   z-a=Truer   r   )rV   z-a=3r   )ra   r#   )rV   z-a=Falsez-b=15)FrB   )rV   r   r   z-b=12)r   r
   )rV   z-a=42r   r   r   r/   r   r   r   r    "testSingleCharFlagParsingEqualSign  r   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g d
dd d S )N	identity2r   r   )TNz-a=10)r#   Nz--ar   )NT)r   r   r   r   )r   r   r   r   r   r   r   r   r    #testSingleCharFlagParsingExactMatch  r   z,FireTest.testSingleCharFlagParsingExactMatchc                 C   r   )N)rN   z-Dr@   z-Gr   r   rB   )r   r   r   r   CapitalizedArgNamesr   r   r   r    &testSingleCharFlagParsingCapitalLetter     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 d    n1 s7w   Y  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 d    n1 stw   Y  |  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      | |fS r   r   )thingnothingr   r   r    fn1     z+FireTest.testBoolParsingWithNo.<locals>.fn1z--thingz	--nothingr   r   z--nonothingr   r2   c                 [   r   r   r   )r   kwargsr   r   r    fn2  r   z+FireTest.testBoolParsingWithNo.<locals>.fn2TFz--nothing=Truer   c                 [   r   r   r   )argr   r   r   r    fn3  r   z+FireTest.testBoolParsingWithNo.<locals>.fn3z--arg=valuevaluer   )r   r   r   r7   )r   r   r   r   r   r   r    testBoolParsingWithNo  s:   



zFireTest.testBoolParsingWithNoc                 C   s   |  dd tjtjg dd W d    n1 sw   Y  |  dd tjtjg dd W d    n1 s;w   Y  |  dd tjtjddgd W d    d S 1 s\w   Y  d S )Nr   zFire trace:
)r   r   ----tracer   )r   r   r  -tr  r  r7   r   r   r   r   r   r   r   r    testTraceFlag  s   "zFireTest.testTraceFlagc                 C   s   |  d tjtjg dd W d    n1 sw   Y  |  d tjtjg dd W d    n1 s9w   Y  |  d tjtjddgd W d    d S 1 sYw   Y  d S )Nr   )r   r   r  --helpr   )r   r   r  -hr  r  r  r   r   r   r    testHelpFlag  s   "zFireTest.testHelpFlagc                 C   s   |  dd tjtjg dd W d    n1 sw   Y  |  dd tjtjg dd W d    n1 s;w   Y  |  dd tjtjg dd W d    d S 1 s\w   Y  d S )Nr   zFire trace:
.*SYNOPSIS)r   r   r  r  r  r   )r   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    testTabCompletionNoName/  s   z FireTest.testTabCompletionNoNamec                 C   s2   t jtjddgdd}| d| | d| d S )Nr  r  rn   r	   r   r   r   r  r  r   r   r    testTabCompletion4  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   )rl   rm   r   r   r    r   ;  r   z4FireTest.testTabCompletionWithDict.<locals>.<lambda>r  r  actCLIr  )r   r   r  )r   actionsr  r   r   r    testTabCompletionWithDict:  s   
z"FireTest.testTabCompletionWithDictc                 C   s   |  tjtjg ddd |  tjtjg ddd |  tjtjg ddd | d tjtjg d	d W d    d S 1 sEw   Y  d S )
N)rV   +_r   )r  r  )rV   r  r  r   )r  r  )rV   r   r  r  --separator&)r   r  r2   )rV   r   r  r  r   r   r   r   r    testBasicSeparatorA  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   r   N)r   r   r   r   NonComparabler   r   r   r    testNonComparableT  s   zFireTest.testNonComparablec                 C   s<   |  tjtjg ddd |  tjtjg ddd d S )N)get-objarg1arg2r   r   r   r   r   T)r   r!  r"  r   r   r   r   r   )r   r   r   r   
ReturnsObjr   r   r   r    testExtraSeparatorsa  s   zFireTest.testExtraSeparatorsc                 C   sv   |  tjtjg ddtj | tjtjg ddd | tjtjg ddd | tjtjg ddd d S )N)r   r!  r"  r   r   r   )r   r!  r"  r   r   r   T)	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    testSeparatorForChainingn  s2   z!FireTest.testSeparatorForChainingc                 C   r   )N)rN   rQ   z-3rR   z-4r   ir/   r   r   r   r    testNegativeNumbers  r   zFireTest.testNegativeNumbersc                 C   sX   |  tjtjg ddd |  tjtjg ddd |  tjtjddgdd d S )	N)rN   rQ   z2.2rR   z3.0r   gffffff @)integer_reciprocalz	--divisorz5.0g?r(  z4.0g      ?)r   r   r   r   r0   r:   r   r   r   r    testFloatForExpectedInt  s"   z FireTest.testFloatForExpectedIntc                 C   sb   |  tjtjddgdtj | d tjtjddgd W d    d S 1 s*w   Y  d S )N	--arg1=a1	--arg2=a2r   r2   a1a2)r   r   r   r   InstanceVarsr7   r   r   r   r    testClassInstantiation  s   "zFireTest.testClassInstantiationc                 C   s  |  d tjtjdgd W d    n1 sw   Y  |  d tjtjdgd W d    n1 s7w   Y  |  d tjtjg dd W d    n1 sVw   Y  |  d tjtjg dd W d    n1 suw   Y  |  d tjtjg dd W d    n1 sw   Y  |  d tjtjg dd W d    n1 sw   Y  |  d tjtjg d	d W d    n1 sw   Y  |  d tjtjg d
d W d    d S 1 sw   Y  d S )Nr2   r,  r   r*  )r,  r-  r   r   b1)r*  r+  r   zrun b1)r,  r-  r   r   r0  b2b3)r*  r+  r   r   r0  r1  r2  )r,  r-  r   jog)r*  r+  r   r3  )r7   r   r   r   r.  r   r   r   r    testTraceErrors  s>   "zFireTest.testTraceErrorsc                 C       |  tjtjddgdd d S Nr   r   r   r   )r   r   r   r   DefaultMethodr   r   r   r    testClassWithDefaultMethod     z#FireTest.testClassWithDefaultMethodc                 C   r5  r6  )r   r   r   r   InvalidPropertyr   r   r   r    testClassWithInvalidProperty  r9  z%FireTest.testClassWithInvalidPropertyc                 C   s~   |  d tjtjdgd W d    n1 sw   Y  |  d tjtjdgd W d    d S 1 s8w   Y  d S )Nr   r	  r   r  )r7   r   r   r   decorated_methodr   r   r   r    testHelpKwargsDecorator  s   "z FireTest.testHelpKwargsDecoratorc                 C   s"   |  tjtjjg ddd d S )N)r   r?   r   r   r   )r   r   r   r   r\   WithAsyncior   r   r   r    testFireAsyncio  s
   zFireTest.testFireAsyncioN)A__name__
__module____qualname__r!   r"   r&   r-   r1   r;   rD   rG   rJ   rL   rS   rU   rW   rY   r[   r^   rc   rj   rw   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/  r4  r8  r;  r=  r?  r   r   r   r    r      s~    
	"
	#	r   __main__)__doc__r)   r   unittestr   r   r   r   r   BaseTestCaser   r@  mainr   r   r   r    <module>   s         ;