U
    h.8                     @  s   d 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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G dd dejZG dd dejZedkre  dS )z!Unittest for Argument Definition.    )annotationsN)absltest)argument_parser)flag_defzflag_def.FlagDefzargparse.ArgumentParser)flagreturnc                 C  s   t  }| | |S )z>Returns a new ArgumentParser with `flag` added as an argument.)r   ArgumentParserZadd_argument_to_parser)r   parser r
   N/tmp/pip-unpacked-wheel-doshhd5e/google/generativeai/notebook/flag_def_test.py_new_parser   s    
r   c                   @  sD   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S )SingleValueFlagDefTestc                 C  sT   t jddtdd}t|dg}| d|j t|ddg}| d|j d S )	NvaluevT)nameZ
short_name
parse_typerequiredz--value=forty-one	forty-onez-v	forty-two)r   SingleValueFlagDefstrr   
parse_argsassertEqualr   selfr   resultsr
   r
   r   test_short_name#   s       z&SingleValueFlagDefTest.test_short_namec              	   C  s   t jdtdd}| tjd t|dg W 5 Q R X | tjd t|dddg W 5 Q R X | tjd	 t|ddddg W 5 Q R X t|ddg}| d|j	 d S )
Nr   Tr   r   r   expected 1 argument--valuez!unrecognized arguments: forty-twor   r   z!Cannot set --value more than once)
r   r   r   assertRaisesRegexr   ParserErrorr   r   r   r   r   r
   r
   r   test_cardinality-   s0         
z'SingleValueFlagDefTest.test_cardinalityc              	   C  sZ   t jdtdd}t|dg}| d|j | tj	d t|g  W 5 Q R X d S )Nr   Tr   --value=forty-twor   $the following arguments are required)
r   r   r   r   r   r   r   r    r   r!   )r   Zreq_flagr   r
   r
   r   test_requiredJ   s     z$SingleValueFlagDefTest.test_requiredc              	   C  s   |  td tjdtdd W 5 Q R X tjdtddd}t|dg}| d|j t|g }| d|j |  t	j
d	 t|d
g W 5 Q R X d S )Nz(Optional flags must have a default valuer   Fr   zeror   r   r   default_valuer#   r   r   r   )r    
ValueErrorr   r   r   r   r   r   r   r   r!   r   Zopt_flagr   r
   r
   r   test_optional\   s0      z$SingleValueFlagDefTest.test_optionalc              	   C  sx   t jdtddd}t|dg}| d|j t|g }| |j | t	j
d t|dg W 5 Q R X dS )	z2Make sure None can be accepted as a default value.r   FNr'   r#   r   r   r   )r   r   r   r   r   r   r   ZassertIsNoner    r   r!   r*   r
   r
   r   test_default_is_none}   s     z+SingleValueFlagDefTest.test_default_is_nonec              	   C  s   |  td tjdtddd W 5 Q R X tjdtddd}|  tjd t|dd	g W 5 Q R X t|dd
g}| 	d|j
 d S )Nz>Default value must be of the same type as the destination typer   Fr&   r'   r   zinvalid int value: 'forty-two'r   r   Z42*   )r    r)   r   r   intr   r!   r   r   r   r   )r   Zint_flag_defr   r
   r
   r   test_type_conversion   s.     z+SingleValueFlagDefTest.test_type_conversionc              	   C  sr   ddddd}t jdt|dd}t|dd	g}| d
|j | tj	d t|ddg W 5 Q R X d S )Nfloatxr   c                 S  s   t | rtd| S NMust not be NANmathisnanr)   r2   r
   r
   r   _check_is_not_nan   s    
zASingleValueFlagDefTest.test_validation.<locals>._check_is_not_nanr   T)r   r   parse_to_dest_type_fnr   r   0.25      ?r4   nan)
r   r   r0   r   r   r   r   r    r   r!   )r   r9   Zfloat_flag_defr   r
   r
   r   test_validation   s    z&SingleValueFlagDefTest.test_validationN)
__name__
__module____qualname__r   r"   r%   r+   r,   r/   r>   r
   r
   r
   r   r   !   s   
!r   c                   @  s   e Zd ZdZdZdZdS )
ColorsEnumredgreenblueN)r?   r@   rA   REDGREENBLUEr
   r
   r
   r   rB      s   rB   c                   @  s$   e Zd Zdd Zdd Zdd ZdS )EnumFlagDefTestc              	   C  s   |  td tjddd W 5 Q R X |  td tjddttd W 5 Q R X |  td tjddttd W 5 Q R X tjddtd	 d S )
Nz(missing 1 required keyword-only argumentcolorT)r   r   z'Cannot set "parse_type" for EnumFlagDef)r   r   	enum_typer   z&Cannot set "dest_type" for EnumFlagDef)r   r   rK   	dest_type)r   r   rK   )r    	TypeErrorr   EnumFlagDefr)   rB   r.   r   r   r
   r
   r   test_construction   s4             z!EnumFlagDefTest.test_constructionc              	   C  s   t jddttjd}| tjd t|dg W 5 Q R X t|dg}| 	tj|j
 t|dg}| 	tj|j
 t|dg}| 	tj|j
 d S )	NrJ   F)r   r   rK   r(   zinvalid choice: 'teal'z--color=teal--color=red--color=green--color=blue)r   rN   rB   rF   r    r   r!   r   r   r   rJ   rG   rH   r   r
   r
   r   test_parsing   s"     zEnumFlagDefTest.test_parsingc              	   C  s   |  td tjddtdddgd W 5 Q R X tjddtddgd}|  tjd t|d	g W 5 Q R X t|d
g}| 	tj
|j t|dg}| 	tj|j d S )NzInvalid value in "choices"rJ   TrC   rD   Zteal)r   r   rK   choiceszinvalid choice: 'blue'rS   rQ   rR   )r    r)   r   rN   rB   r   r!   r   r   r   rF   rJ   rG   r   r
   r
   r   test_choices   s,     zEnumFlagDefTest.test_choicesN)r?   r@   rA   rP   rT   rV   r
   r
   r
   r   rI      s   rI   c                   @  sD   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S )MultiValuesFlagDefTestc                 C  sv   t jdtdd}t|g }| |j t|ddg}| dg|j t|dddg}| ddg|j d S )NcolorsFr   --colorsrC   rD   )r   MultiValuesFlagDefr   r   r   ZassertEmptyrX   r   r   r
   r
   r   
test_basic  s      z!MultiValuesFlagDefTest.test_basicc              	   C  s^   t jdtdd}t|ddg}| dg|j | tj	d t|g  W 5 Q R X d S )NrX   Tr   rY   rC   r$   )
r   rZ   r   r   r   r   rX   r    r   r!   r   r
   r
   r   r%   -  s     z$MultiValuesFlagDefTest.test_requiredc              	   C  s.   |  td tjdtddd W 5 Q R X d S )Nz"got an unexpected keyword argumentrX   Ffuschiar'   )r    rM   r   rZ   r   rO   r
   r
   r   test_cannot_set_default_value?  s     z4MultiValuesFlagDefTest.test_cannot_set_default_valuec              	   C  s@   t jdd}| tjd t|ddddg W 5 Q R X d S )NrX   r   zDuplicate values "red"rY   rC   rD   )r   rZ   r    r   r!   r   r   r   r   r
   r
   r   test_values_must_be_uniqueL  s     z1MultiValuesFlagDefTest.test_values_must_be_uniquec              	   C  sn   t jdtdd}| tjd t|dg W 5 Q R X | tjd t|ddddg W 5 Q R X d S )	NrX   Fr   zexpected at least one argumentrY   z"Cannot set --colors more than oncerC   rE   )r   rZ   r   r    r   r!   r   r   r_   r
   r
   r   r"   U  s      z'MultiValuesFlagDefTest.test_cardinalityc              	   C  sx   t jdttddd tD d}| tjd t|ddg W 5 Q R X t|dd	d
g}| 	tj
tjg|j d S )NrX   Fc                 S  s   g | ]
}|j qS r
   )r   ).0r2   r
   r
   r   
<listcomp>n  s     zDMultiValuesFlagDefTest.test_dest_type_conversion.<locals>.<listcomp>)r   r   rL   r   rU   zinvalid choice: 'fuschia'rY   r\   rC   rD   )r   rZ   r   rB   r    r   r!   r   r   r   rF   rG   rX   r   r
   r
   r   test_dest_type_conversionh  s    	 z0MultiValuesFlagDefTest.test_dest_type_conversionc              	   C  sx   ddddd}t jdt|d}t|ddd	g}| d
dg|j | tj	d t|dddg W 5 Q R X d S )Nr0   r1   c                 S  s   t | rtd| S r3   r5   r8   r
   r
   r   r9   |  s    
zAMultiValuesFlagDefTest.test_validation.<locals>._check_is_not_nanvalues)r   r   r:   r   r;   z0.5r<   g      ?r4   r=   )
r   rZ   r0   r   r   r   rd   r    r   r!   )r   r9   r   r   r
   r
   r   r>   {  s    z&MultiValuesFlagDefTest.test_validationN)
r?   r@   rA   r[   r%   r]   r`   r"   rc   r>   r
   r
   r
   r   rW     s   	rW   c                   @  s$   e Zd Zdd Zdd Zdd ZdS )BooleanFlagDefTestc                 C  sF   t jdd}t|g }| |j t|dg}| |j d S )Nuniquer^   --unique)r   BooleanFlagDefr   r   ZassertFalserf   
assertTruer   r
   r
   r   r[     s
    zBooleanFlagDefTest.test_basicc              	   C  s|   |  td tjdtd W 5 Q R X |  td tjddd d W 5 Q R X |  td tjdd	gd
 W 5 Q R X dS )z6Check that invalid constructor arguments are rejected.z*dest_type cannot be set for BooleanFlagDefrf   )r   rL   z6parse_to_dest_type_fn cannot be set for BooleanFlagDefc                 S  s   dS )NTr
   r8   r
   r
   r   <lambda>      z5BooleanFlagDefTest.test_constructor.<locals>.<lambda>)r   r:   z(choices cannot be set for BooleanFlagDefT)r   rU   N)r    r)   r   rh   boolrO   r
   r
   r   test_constructor  s$        z#BooleanFlagDefTest.test_constructorc              	   C  sh   t jdd}| tjd t|ddg W 5 Q R X | tjd t|ddg W 5 Q R X d S )Nrf   r^   z#error: unrecognized arguments: Truerg   Truez"Cannot set --unique more than once)r   rh   r    r   r!   r   r   r_   r
   r
   r   r"     s      z#BooleanFlagDefTest.test_cardinalityN)r?   r@   rA   r[   rm   r"   r
   r
   r
   r   re     s   	re   __main__)__doc__
__future__r   argparseenumr6   Zabsl.testingr   Zgoogle.generativeai.notebookr   r   r   ZTestCaser   EnumrB   rI   rW   re   r?   mainr
   r
   r
   r   <module>   s     &Nt*