o
    qo™iý  ã                   @   s¾   d Z ddlZddlmZ ddlm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 ejG d	d
„ d
ƒƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZedkr]e ¡  dS dS )zTests for mutate_buildable.é    N)ÚAny)Úabsltest)Úbuilding)Úconfig)Úconfig_test)Úmutate_buildablec                   @   s   e Zd ZU eed< dS )ÚSampleClassÚarg1N)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__© r   r   úU/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/mutate_buildable_test.pyr      s   
 r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚMutateBuildableTestc                 C   sp   t  t¡}d|_d|_t  t¡}tj||d |  |jd¡ |  |jd d jd¡ |  |jd d jd¡ d S )Né   é   )ÚsourceÚdestinationr	   r   é   )	ÚfdlÚConfigr   r	   r   Úmove_buildable_internalsÚassertEqualÚ__argument_history__Ú	new_value)Úselfr   r   r   r   r   Ú%test_move_buildable_internals_history$   s   

ÿz9MutateBuildableTest.test_move_buildable_internals_historyc                 C   s.   t  t¡}tj}|  t|ƒt|j ¡ ƒ¡ d S ©N)	r   r   r   r   Ú_buildable_internals_keysr   ÚsetÚ__dict__Úkeys)r   Úsample_configÚexpectedr   r   r   Útest_no_unexpected_attributes/   s   
z1MutateBuildableTest.test_no_unexpected_attributesN)r
   r   r   r   r%   r   r   r   r   r   "   s    r   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚCallableApisTestc                 C   s|   t jtjdddd}t |tj¡ d|_t 	|¡}|  
|tj¡ |  d|j¡ |  d|j¡ |  d|j¡ |  d|j¡ d S )Nr   ÚxyzÚabc)Úkwarg1Ú123)Ú
config_libr   r   Úbasic_fnr   Úupdate_callabler   Úkwarg2r   ÚbuildÚassertIsInstancer   r	   Úarg2r)   )r   ÚcfgÚobjr   r   r   Útest_update_callable7   s   
z%CallableApisTest.test_update_callablec                 C   sR   t jtjddd}|  td¡ t |tj¡ W d   ƒ d S 1 s"w   Y  d S )Nr*   Ú321)r(   r'   z'have invalid arguments \['abc', 'xyz'\])	r+   r   r   Úfn_with_var_kwargsÚassertRaisesRegexÚ	TypeErrorr   r-   r   ©r   r2   r   r   r   Ú test_update_callable_invalid_argB   s   ÿÿ"ýz1CallableApisTest.test_update_callable_invalid_argc                 C   s@   t jtjddd}tj|tjdd |  |t jtjdd¡ d S )Nr*   r5   )r	   r'   T)Údrop_invalid_args)r	   )r+   r   r   r6   r   r-   r   r   r9   r   r   r   Ú%test_update_callable_drop_invalid_argK   s   ÿÿÿz6CallableApisTest.test_update_callable_drop_invalid_argc                 C   sH   t  tj¡}d|_t |tj¡ d|_|  	dd ddidœt
 |¡¡ d S )Nr   r*   r(   ©r	   r)   Úkwargs)r+   r   r   r   r	   r   r-   r6   r(   r   r   r/   r9   r   r   r   Útest_update_callable_new_kwargsV   s   þz0CallableApisTest.test_update_callable_new_kwargsc                 C   s$   t  tj¡}|  t |¡tj¡ d S r   )r+   r   r   r,   ÚassertIsr   Úget_callabler9   r   r   r   Útest_get_callable`   s   z"CallableApisTest.test_get_callablec                 C   sP   t  tjdd¡}|  td¡ t |tj¡ W d   ƒ d S 1 s!w   Y  d S )Nr   é   z%positional arguments is not supported)	r+   r   r   Úfn_with_position_argsr7   ÚNotImplementedErrorr   r-   Úfn_with_args_and_kwargs_onlyr9   r   r   r   Útest_positional_argsd   s   ÿÿ"ýz%CallableApisTest.test_positional_argsN)	r
   r   r   r4   r:   r<   r?   rB   rG   r   r   r   r   r&   5   s    	
r&   c                   @   s.   e Zd Zdd„ Zdd„ Ze d¡dd„ ƒZdS )	Ú
AssignTestc                 C   sD   t  tjdd¡}tj|ddd |  dddddœdœt |¡¡ d S )Nr   rC   ÚaÚb)rI   rJ   r=   )	r+   r   r   r6   r   Úassignr   r   r/   r9   r   r   r   Útest_assignp   s   þzAssignTest.test_assignc                 C   sN   t  tj¡}|  td¡ tj|ddd W d   ƒ d S 1 s w   Y  d S )NÚ	not_therer   rC   )r	   rM   )r+   r   r   r,   r7   ÚAttributeErrorr   rK   r9   r   r   r   Útest_assign_wrong_argumentx   s   "ÿz%AssignTest.test_assign_wrong_argumentz,Enable this after dropping pyhon 3.7 supportc                 C   sx   ddd„}t  |¡}d|_d|_|  t |¡d¡ tj|dd |  t |¡d	¡ t j|d
dd}|  t |¡d¡ d S )Nr   c                 S   s   | | | S r   r   )r   Ú	fn_or_clsÚ	buildabler   r   r   Úf„   s   z?AssignTest.test_config_for_fn_with_special_arg_names.<locals>.féd   éÈ   i,  é
   )rQ   i6  r   r   )r   rP   é   )r   )	r+   r   r   rP   r   r   r/   r   rK   )r   rR   r2   Úcfg2r   r   r   Ú)test_config_for_fn_with_special_arg_names}   s   

z4AssignTest.test_config_for_fn_with_special_arg_namesN)r
   r   r   rL   rO   r   ÚskiprX   r   r   r   r   rH   n   s
    rH   Ú__main__)Ú__doc__ÚdataclassesÚtypingr   Úabsl.testingr   Úfiddler   Úfiddle._srcr   r   r+   r   r   Ú	dataclassr   ÚTestCaser   r&   rH   r
   Úmainr   r   r   r   Ú<module>   s"   9%ÿ