U
    +c&                     @   s   d 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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 core module.    )absolute_import)division)print_function)core)test_components)	testutils)traceNc                   @   s8  e Zd Zdd Zdd Zeddd Zeddd	 Zedd
d Z	e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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d0d1 Zd2d3 Zd4d5 Zd6d7 Ze !e"j#d8d9d: Z$e !e"j#d8d;d< Z%d=S )>CoreTestc                 C   sP   |  tdd |  tdd |  ti d |  tddid d S )N   1Zhello{}xyz
{"x": "y"})assertEqualr   _OneLineResultself r   2/tmp/pip-unpacked-wheel-1xt1w7un/fire/core_test.pytestOneLineResult    s    zCoreTest.testOneLineResultc                 C   s"   t  }| t| d d S )Nz{'y': {...}})tcZCircularReferencer   r   r   create)r   Zcircular_referencer   r   r   testOneLineResultCircularRef&   s    z%CoreTest.testOneLineResultCircularRefzfire.interact.Embedc                 C   sD   t jtjdgd | |j t jtjdddgd | |j d S )Nalphacommand---i)r   Firer   TypedPropertiesassertFalsecalled
assertTruer   
mock_embedr   r   r   testInteractiveMode+   s    zCoreTest.testInteractiveModec                 C   s&   t jtjdddgd | |j d S )Nr   r   z--interactiver   )r   r   r   r   r"   r!   r#   r   r   r   testInteractiveModeFullArgument2   s    z(CoreTest.testInteractiveModeFullArgumentc                 C   st   t jtjddddgd | |j |j\\}}}| | | |d d | 	|d tj | 	|d	 t
j d S )
Ndouble2r   r   r   result   r   r   )r   r   r   WithDefaultsr"   r!   	call_argsr    r   assertIsInstancer   	FireTracer   r$   	variablesverboseZunused_kwargsr   r   r   testInteractiveModeVariables7   s    
z%CoreTest.testInteractiveModeVariablesc                 C   s   t jtjdddddgdd | |j |j\\}}}| | | |d d	 | |d
 tj | |d tj | |d t	j
 d S )Nr'   r(   r   r   z-vD)r   namer)   r*   r   r   )r   r   r   r+   r"   r!   r,   r   r-   r   r.   r/   r   r   r   $testInteractiveModeVariablesWithNameA   s     
z-CoreTest.testInteractiveModeVariablesWithNamec              	   C   s   |  dd tjtjddgd W 5 Q R X |  dd tjtjdgd W 5 Q R X |  dd tjtjdgd W 5 Q R X d S )Nr   zSYNOPSIS.*ARG1r   --helpr   zINFO:.*SYNOPSIS.*ARG1-h)assertRaisesFireExitr   r   r   ZInstanceVarsr   r   r   r   testHelpWithClassN   s    zCoreTest.testHelpWithClassc              	   C   s   |  dd tjtj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d tjtj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d tjtjddgd W 5 Q R X d S )Nr   zSYNOPSIS.*capitalizegammar   r6   r   zINFO:.*SYNOPSIS.*capitalizer7   zINFO:.*SYNOPSIS.*deltadeltazINFO:.*SYNOPSIS.*echoZecho)r8   r   r   r   r   r   r   r   r   testHelpWithMemberV   s     zCoreTest.testHelpWithMemberc              	   C   sZ   |  dd tjtjddgd W 5 Q R X |  dd tjtjdgd W 5 Q R X d S )Nr   zSYNOPSIS.*VALUEr   r6   r   zINFO:.*SYNOPSIS.*VALUE)r8   r   r   r   ZErrorInConstructorr   r   r   r   testHelpOnErrorInConstructorb   s    z%CoreTest.testHelpOnErrorInConstructorc              	   C   s   | j dd d tjtjddgd W 5 Q R X | j dd d tjtjddgd W 5 Q R X | j d	d d tjtjddgd W 5 Q R X | j dd d tjtjdgd W 5 Q R X d S )
NzDESCRIPTION.*stdoutstderrr6   Falser   zhelp in a dict
dictionaryZ__helpr   )assertOutputMatchesr   r   r   ZWithHelpArgZfunction_with_helpr   r   r   r   testHelpWithNamespaceCollisionh   s    z'CoreTest.testHelpWithNamespaceCollisionc              	   C   s4   |  dd tjtjddddgd W 5 Q R X d S )N   Zrunmisspelledpropsz--a=1z--b=2r   )r8   r   r   r   ZKwargsr   r   r   r   "testInvalidParameterRaisesFireExits   s    z+CoreTest.testInvalidParameterRaisesFireExitc              	   C   s,   |  t tjtjdgd W 5 Q R X d S )NZfailr   )assertRaises
ValueErrorr   r   r   ZErrorRaiserr   r   r   r   testErrorRaisingw   s    zCoreTest.testErrorRaisingc                 C   s   t d}| | d S )NExample errorr   	FireErrorZassertIsNotNoner   errorr   r   r   testFireError}   s    
zCoreTest.testFireErrorc                 C   s   t dd}| | d S )NrK   valuerL   rN   r   r   r   testFireErrorMultipleValues   s    z$CoreTest.testFireErrorMultipleValuesc              	   C   s\   | j dd d tjtjdgd W 5 Q R X | j dd d tjtjdgd W 5 Q R X d S )Nr   r>   Ztotally_emptyr   Znothing_printable)rC   r   r   r   ZEmptyDictOutputr   r   r   r   testPrintEmptyDict   s    zCoreTest.testPrintEmptyDictc              	   C   sZ   | j dd d tjtjdgd W 5 Q R X | j dd tjtjdgd W 5 Q R X d S )NzA:\s+A\s+2:\s+2\s+r>   Z	non_emptyr   r   )r?   empty)rC   r   r   r   ZOrderedDictionaryr   r   r   r   testPrintOrderedDict   s    zCoreTest.testPrintOrderedDictc              	   C   s2   | j dd d tjtjddgd W 5 Q R X d S )N11r>   pointr   r   rC   r   r   r   
NamedTupler   r   r   r   testPrintNamedTupleField   s    z!CoreTest.testPrintNamedTupleFieldc              	   C   s2   | j dd d tjtjddgd W 5 Q R X d S )Nr   r>   Zmatching_namesr   rX   r   r   r   r   'testPrintNamedTupleFieldNameEqualsValue   s    z0CoreTest.testPrintNamedTupleFieldNameEqualsValuec              	   C   s2   | j dd d tjtjddgd W 5 Q R X d S )NZ22r>   rW   r   r   rX   r   r   r   r   testPrintNamedTupleIndex   s    z!CoreTest.testPrintNamedTupleIndexc              	   C   s0   | j dd d tjt g d W 5 Q R X d S Nz	.*three.*r>   r   )rC   r   r   r   Z
simple_setr   r   r   r   testPrintSet   s    zCoreTest.testPrintSetc              	   C   s0   | j dd d tjt g d W 5 Q R X d S r]   )rC   r   r   r   Zsimple_frozensetr   r   r   r   testPrintFrozenSet   s    zCoreTest.testPrintFrozenSetc              	   C   s2   | j dd d tjtjddgd W 5 Q R X d S )NrV   r>   rW   z-2r   rX   r   r   r   r    testPrintNamedTupleNegativeIndex   s    z)CoreTest.testPrintNamedTupleNegativeIndexc              	   C   s   | j dd d tjt dgd W 5 Q R X | j dd d tjt ddgd W 5 Q R X | j dd d tjt g d W 5 Q R X d S )	Nzfoo:\s+foo\s+r>   z	--foo=foor   zfoo\s+Z	print_msgfoo )rC   r   r   r   ZCallableWithKeywordArgumentr   r   r   r   testCallable   s     zCoreTest.testCallablec              	   C   s2   |  dd tjt ddgd W 5 Q R X d S )NrE   rb   34r   )r8   r   r   r   ZCallableWithPositionalArgsr   r   r   r   testCallableWithPositionalArgs   s    z'CoreTest.testCallableWithPositionalArgsc                 C   s    |  tjtjddgdd d S )NZ	static_fnr   r   r   r   r   r   ZHasStaticAndClassMethodsr   r   r   r   testStaticMethod   s    zCoreTest.testStaticMethodc                 C   s    |  tjtjddgdd d S )NZclass_fn6r      rg   r   r   r   r   testClassMethod   s    zCoreTest.testClassMethodc              	   C   s   dd }dd }| j dd d tj|dg|d}W 5 Q R X | j d	d d tj|d
g|d}W 5 Q R X | j dd d tj|dg|d}W 5 Q R X | j dd d tj|dg|d}W 5 Q R X | tj tj|dgdd W 5 Q R X d S )Nc                 S   sX   t | trddd | D S t | trDddd t|  D S | dkrTddgS | S )Nz, c                 s   s   | ]}t |V  qd S N)str).0xir   r   r   	<genexpr>   s     zBCoreTest.testCustomSerialize.<locals>.serialize.<locals>.<genexpr>c                 s   s   | ]\}}d  ||V  qdS )z{}={!r}N)format)rn   kvr   r   r   rp      s     specialz
SURPRISE!!zI'm a list!)
isinstancelistjoindictsorteditemsr   r   r   r   	serialize   s    

z/CoreTest.testCustomSerialize.<locals>.serializec                 S   s   | S rl   r   r{   r   r   r   <lambda>       z.CoreTest.testCustomSerialize.<locals>.<lambda>za, br>   z[a,b])r   r|   za=5, b=6z	{a:5,b:6}ZasdfzSURPRISE!!
I'm a list!
rt   7   )rC   r   r   rH   rM   )r   r|   ident_r   r   r   testCustomSerialize   s    	 zCoreTest.testCustomSerializezlru_cache is Python 3 only.c                 C   s"   |  tjtjjddgdd d S )NZlru_cache_in_classra   r   )r   r   r   r   py3ZLruCacheDecoratedMethodr   r   r   r   testLruCacheDecoratorBoundArg   s    
z&CoreTest.testLruCacheDecoratorBoundArgc                 C   s    |  tjtjjdgdd d S )Nra   r   )r   r   r   r   r   Zlru_cache_decoratedr   r   r   r   testLruCacheDecorator   s    
zCoreTest.testLruCacheDecoratorN)&__name__
__module____qualname__r   r   mockpatchr%   r&   r2   r5   r9   r<   r=   rD   rG   rJ   rP   rR   rS   rU   rZ   r[   r\   r^   r_   r`   rc   rf   rh   rk   r   r   ZskipIfsixPY2r   r   r   r   r   r   r	      sF   


	

r	   __main__)__doc__
__future__r   r   r   Zfirer   r   r   r   r   r   r   ZBaseTestCaser	   r   mainr   r   r   r   <module>   s    M