U
    lufœ.  ã                   @   s    d dl Z d dlmZ d dlZd dlZd dlmZ d dlZd dlmZm	Z	 d dl
mZ d dlmZ d dlZejrzd dlmZ G dd	„ d	eƒZG d
d„ dejƒZdS )é    N)ÚStringIO)Úmock)ÚOptionParserÚError)Úbasestring_type)ÚsubTest)ÚListc                   @   s    e Zd Zdd„ Zedd„ ƒZdS )ÚEmailc                 C   s$   t |tƒrd|kr|| _ntƒ ‚d S )Nú@)Ú
isinstanceÚstrÚ_valueÚ
ValueError)ÚselfÚvalue© r   ú=/tmp/pip-unpacked-wheel-bmg6zs32/tornado/test/options_test.pyÚ__init__   s    zEmail.__init__c                 C   s   | j S ©N)r   ©r   r   r   r   r      s    zEmail.valueN)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   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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d7S )8ÚOptionsTestc                 C   s4   t ƒ }|jddd | ddg¡ |  |jd¡ d S )NÚportéP   ©Údefaultúmain.pyz
--port=443é»  )r   ÚdefineÚparse_command_lineÚassertEqualr   ©r   Úoptionsr   r   r   Útest_parse_command_line   s    z#OptionsTest.test_parse_command_linec                 C   s‚   t ƒ }|jddd |jddd | d¡ tj tj tj t¡¡d¡}| |¡ |  	|j
d¡ |  	|jd	¡ |  	|j|¡ d S )
Nr   r   r   ÚusernameÚfooÚmy_pathúoptions_test.cfgr    u   æŽåº·)r   r!   ÚosÚpathÚjoinÚdirnameÚabspathÚ__file__Úparse_config_filer#   r   r'   r)   )r   r%   Zconfig_pathr   r   r   Útest_parse_config_file%   s    
 ÿ
z"OptionsTest.test_parse_config_filec                    sx   t ƒ }dˆ _‡ fdd„}| |¡ |jdgdd ˆ  ˆ j¡ | dg¡ ˆ  ˆ j¡ dˆ _| dg¡ ˆ  ˆ j¡ d S )NFc                      s
   dˆ _ d S )NT)Úcalledr   r   r   r   Úcallback6   s    z2OptionsTest.test_parse_callbacks.<locals>.callbackr   )Úfinal)r   r3   Zadd_parse_callbackr"   ZassertFalseÚ
assertTrue)r   r%   r4   r   r   r   Útest_parse_callbacks2   s    
z OptionsTest.test_parse_callbacksc              	   C   s`   t ƒ }z@tj}tƒ t_|  t¡ | ddg¡ W 5 Q R X tj ¡ }W 5 |t_X |  d|¡ d S )Nr   z--helpzUsage:)	r   ÚsysÚstderrr   ÚassertRaisesÚ
SystemExitr"   ÚgetvalueÚassertIn)r   r%   Úorig_stderrÚusager   r   r   Ú	test_helpI   s    zOptionsTest.test_helpc              	   C   s¾   t ƒ }|jddd t ƒ }|jdtd | dddd	g¡}|  |dd	g¡ |  |j¡ | |¡}|  |g ¡ |  |jd
¡ z6tj	}t
ƒ t_	|  t¡ | ddg¡ W 5 Q R X W 5 |t_	X d S )NÚverboseFr   r(   ©Útyper   z	--verboseÚ
subcommandz	--foo=barÚbar)r   r!   r   r"   r#   r6   rA   r(   r8   r9   r   r:   r   )r   Zbase_optionsZsub_optionsÚrestZrest2r>   r   r   r   Útest_subcommandU   s$    
ÿ
zOptionsTest.test_subcommandc                 C   s.   t ƒ }|jddtd d|_|  |jd¡ d S ©Nr(   é   ©r   rC   é   )r   r!   Úintr(   r#   r$   r   r   r   Útest_setattrl   s    zOptionsTest.test_setattrc              	   C   s6   t ƒ }|jddtd |  t¡ d|_W 5 Q R X d S )Nr(   rI   rJ   Ú2)r   r!   rL   r:   r   r(   r$   r   r   r   Útest_setattr_type_checkr   s    z#OptionsTest.test_setattr_type_checkc                 C   s6   g }t ƒ }|jddt|jd d|_|  |dg¡ d S )Nr(   rI   )r   rC   r4   rK   )r   r!   rL   Úappendr(   r#   )r   Úvaluesr%   r   r   r   Útest_setattr_with_callbackz   s
    z&OptionsTest.test_setattr_with_callbackc                 C   s&   t ƒ }|jddd |jddd |S )NÚarI   r   ÚbrK   )r   r!   r$   r   r   r   Ú_sample_options   s    zOptionsTest._sample_optionsc                 C   s*   |   ¡ }|  tdddgƒtt|ƒƒ¡ d S )NrS   rT   Úhelp)rU   r#   ÚsetÚiterr$   r   r   r   Ú	test_iter‡   s    zOptionsTest.test_iterc                 C   s   |   ¡ }|  d|d ¡ d S )NrI   rS   )rU   r#   r$   r   r   r   Útest_getitemŒ   s    zOptionsTest.test_getitemc                 C   s2   t ƒ }|jddtd d|d< |  |d d¡ d S rH   )r   r!   rL   r#   r$   r   r   r   Útest_setitem   s    zOptionsTest.test_setitemc                 C   s4   |   ¡ }ddd|jfg}t| ¡ ƒ}|  ||¡ d S )N)rS   rI   )rT   rK   rV   )rU   rV   ÚsortedÚitemsr#   )r   r%   ÚexpectedÚactualr   r   r   Ú
test_items–   s    zOptionsTest.test_itemsc                 C   s*   |   ¡ }dd|jdœ}|  || ¡ ¡ d S )NrI   rK   )rS   rT   rV   )rU   rV   r#   Úas_dict)r   r%   r^   r   r   r   Útest_as_dict   s    zOptionsTest.test_as_dictc                 C   s€   t ƒ }|jddd |jdddd t d¡}|jj}|  tdd	|gƒ| ¡ ¡ | 	d¡}|  ddi|¡ |  i | 	d
¡¡ d S )NrS   rI   r   rT   Zb_grouprK   )Úgroupr   r   Ú Znonexistent)
r   r!   r8   Ú	_getframeÚf_codeÚco_filenamer#   rW   ÚgroupsÚ
group_dict)r   r%   ÚframeZ	this_fileZb_group_dictr   r   r   Útest_group_dict¢   s    

zOptionsTest.test_group_dictc              
   C   sü   t ƒ }|jddd | ddg¡ |  |jd¡ tj | ¡ dd¡ |  |jd¡ W 5 Q R X |  |jd¡ tj | ¡ dd¡d |  |jd¡ d	|_|  |jd	¡ tj | ¡ dd
¡ |  |jd
¡ W 5 Q R X |  |jd	¡ W 5 Q R X |  |jd¡ d S )Nr(   rI   r   r   z--foo=2rK   é   é   é   é   )	r   r!   r"   r#   r(   r   ÚpatchÚobjectZmockabler$   r   r   r   Útest_mock_patch°   s    zOptionsTest.test_mock_patchc                 C   s   t ƒ }|jdtd |jdtd |jdtd |jdtd |jdtjd |jdtjd |jdtd |jd	td
d |jdtd
d |S )Nr   rB   Ú
basestringrL   ÚfloatÚdatetimeÚ	timedeltaÚemailzlist-of-intT©rC   Úmultiplezlist-of-str)	r   r!   r   r   rL   rt   ru   rv   r	   r$   r   r   r   Ú_define_optionsÅ   s    zOptionsTest._define_optionsc              
   C   s¸   |   |jd¡ |   |jd¡ |   |jd¡ |   |jd¡ |   |jt ddddd	¡¡ |   |jtjd
d¡ |   |jjd¡ |  	t
|jtƒ¡ |   |jdddg¡ |   |jdddg¡ d S )NZasdfZqweré*   g      ø?iÝ  rm   é   rn   é   é-   )Úsecondsztornado@web.comrI   rK   rl   rS   rT   Úc)r#   r   rs   rL   rt   ru   rv   rw   r   r6   r   r	   Zlist_of_intZlist_of_strr$   r   r   r   Ú_check_options_valuesÒ   s    z!OptionsTest._check_options_valuesc                 C   s4   |   ¡ }| ddddddddd	d
g
¡ |  |¡ d S )Nr   z
--str=asdfz--basestring=qwerz--int=42z--float=1.5z--datetime=2013-04-28 05:16z--timedelta=45sz--email=tornado@web.comz--list-of-int=1,2,3z--list-of-str=a,b,c)rz   r"   r   r$   r   r   r   Ú
test_typesÞ   s    öÿzOptionsTest.test_typesc                 C   s<   dD ]2}|   ¡ }| tj tj t¡|¡¡ |  |¡ qd S )N)zoptions_test_types.cfgzoptions_test_types_str.cfg)rz   r1   r+   r,   r-   r.   r0   r   )r   Zconfig_file_namer%   r   r   r   Útest_types_with_conf_fileð   s    ÿz%OptionsTest.test_types_with_conf_filec                 C   s<   t ƒ }|jdtdd | ddg¡ |  |jdddg¡ d S )	Nr(   Trx   r   z--foo=a,b,crS   rT   r€   )r   r!   r   r"   r#   r(   r$   r   r   r   Útest_multiple_stringû   s    z OptionsTest.test_multiple_stringc                 C   s@   t ƒ }|jdtdd | ddg¡ |  |jdddd	d
g¡ d S )Nr(   Trx   r   z--foo=1,3,5:7rI   rl   rn   ro   é   )r   r!   rL   r"   r#   r(   r$   r   r   r   Útest_multiple_int  s    zOptionsTest.test_multiple_intc              	   C   sF   t ƒ }| d¡ |  t¡}| d¡ W 5 Q R X |  t|jƒd¡ d S )Nr(   zOption.*foo.*already defined)r   r!   r:   r   ÚassertRegexr   Ú	exception)r   r%   Úcmr   r   r   Útest_error_redefine  s
    
zOptionsTest.test_error_redefinec                 C   sz   ddddg}|D ]d\}}t | ||dH tƒ }| |¡ |  t¡}| |¡ W 5 Q R X |  t|jƒd¡ W 5 Q R X qd S )N)úfoo-barr‹   )Úfoo_barrŒ   ©r‹   rŒ   )rŒ   r‹   )rS   rT   z Option.*foo.bar.*already defined)r   r   r!   r:   r   r‡   r   rˆ   )r   ÚtestsrS   rT   r%   r‰   r   r   r   Útest_error_redefine_underscore  s    ü
z*OptionsTest.test_error_redefine_underscorec                 C   sd   dD ]Z}dD ]P}t ƒ }| |¡ | d|g¡ |  |jd¡ |  |d d¡ |  |d d¡ qqd S )Nr   )z--foo-bar=az--foo_bar=ar   rS   r‹   rŒ   )r   r!   r"   r#   rŒ   )r   Údefined_nameÚflagr%   r   r   r   Útest_dash_underscore_cli  s    
z$OptionsTest.test_dash_underscore_clic                 C   sH   dD ]>}t ƒ }| |¡ | tj tj t¡d¡¡ |  |j	d¡ qd S )Nr   r*   rS   )
r   r!   r1   r+   r,   r-   r.   r0   r#   rŒ   )r   r   r%   r   r   r   Útest_dash_underscore_file,  s    
ÿz%OptionsTest.test_dash_underscore_filec                 C   sÀ   t ƒ }|jddd |jddd dddg}|  t|ƒ|¡ |  tdd„ | ¡ D ƒƒ|¡ |  t| ¡  ¡ ƒ|¡ |  t| d¡ƒddg¡ tƒ }| 	|¡ |  
d| ¡ ¡ |  
d	| ¡ ¡ d S )
Nz	with-dashÚg)rc   Zwith_underscorerV   c                 s   s   | ]\}}|V  qd S r   r   )Ú.0ÚkÚvr   r   r   Ú	<genexpr>>  s     zAOptionsTest.test_dash_underscore_introspection.<locals>.<genexpr>z--with-dashz--with-underscore)r   r!   r#   r\   r]   ra   Úkeysri   r   Ú
print_helpr=   r<   )r   r%   Zall_optionsÚbufr   r   r   Ú"test_dash_underscore_introspection7  s    
 ÿ
z.OptionsTest.test_dash_underscore_introspectionN)r   r   r   r&   r2   r7   r@   rG   rM   rO   rR   rU   rY   rZ   r[   r`   rb   rk   rr   rz   r   r‚   rƒ   r„   r†   rŠ   r   r’   r“   rœ   r   r   r   r   r      s6   r   )ru   Úior   r+   r8   Zunittestr   Ztornado.optionsr   r   Ztornado.utilr   Ztornado.test.utilr   ÚtypingÚTYPE_CHECKINGr   rq   r	   ZTestCaser   r   r   r   r   Ú<module>   s   