o
    Ùñhœ.  ã                   @   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r=d 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|v r|| _d S tƒ ‚)Nú@)Ú
isinstanceÚstrÚ_valueÚ
ValueError)ÚselfÚvalue© r   úM/var/www/vscode/kcb/lib/python3.10/site-packages/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%   Ú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   r4   Úadd_parse_callbackr"   ÚassertFalseÚ
assertTrue)r   r%   r5   r   r   r   Útest_parse_callbacks2   s   
z OptionsTest.test_parse_callbacksc                 C   sz   t ƒ }z-tj}tƒ t_|  t¡ | ddg¡ W d   ƒ n1 s"w   Y  tj ¡ }W |t_n|t_w |  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 | g d¢¡}|  |ddg¡ |  |j¡ | |¡}|  |g ¡ |  |jd	¡ z/tj	}t
ƒ t_	|  t¡ | dd
g¡ W d   ƒ n1 sZw   Y  W |t_	d S W |t_	d S |t_	w )NÚverboseFr   r(   ©Útype)r   ú	--verboseÚ
subcommandú	--foo=barrH   rI   ÚbarrG   )r   r!   r   r"   r#   r9   rD   r(   r;   r<   r   r=   r   )r   Úbase_optionsÚsub_optionsÚrestÚrest2rA   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   rF   é   )r   r!   Úintr(   r#   r$   r   r   r   Útest_setattrl   s   zOptionsTest.test_setattrc                 C   sL   t ƒ }|jddtd |  t¡ d|_W d   ƒ d S 1 sw   Y  d S )Nr(   rQ   rR   Ú2)r   r!   rT   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(   rQ   )r   rF   r5   rS   )r   r!   rT   Ú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ÚarQ   r   ÚbrS   )r   r!   r$   r   r   r   Ú_sample_options   s   zOptionsTest._sample_optionsc                 C   s(   |   ¡ }|  tg d¢ƒtt|ƒƒ¡ d S )N©r[   r\   Úhelp)r]   r#   ÚsetÚiterr$   r   r   r   Ú	test_iter‡   s    zOptionsTest.test_iterc                 C   s   |   ¡ }|  d|d ¡ d S )NrQ   r[   )r]   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 rP   )r   r!   rT   r#   r$   r   r   r   Útest_setitem   s   zOptionsTest.test_setitemc                 C   s4   |   ¡ }ddd|jfg}t| ¡ ƒ}|  ||¡ d S )N)r[   rQ   )r\   rS   r_   )r]   r_   ÚsortedÚitemsr#   )r   r%   ÚexpectedÚactualr   r   r   Ú
test_items–   s   zOptionsTest.test_itemsc                 C   s*   |   ¡ }dd|jdœ}|  || ¡ ¡ d S )NrQ   rS   r^   )r]   r_   r#   Úas_dict)r   r%   rg   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 )Nr[   rQ   r   r\   Úb_grouprS   )Úgroupr   r   Ú Únonexistent)
r   r!   r;   Ú	_getframeÚf_codeÚco_filenamer#   r`   ÚgroupsÚ
group_dict)r   r%   ÚframeÚ	this_fileÚb_group_dictr   r   r   Útest_group_dict¢   s   

zOptionsTest.test_group_dictc              	   C   s8  t ƒ }|jddd | ddg¡ |  |jd¡ tj | ¡ dd¡ |  |jd¡ W d   ƒ n1 s4w   Y  |  |jd¡ tj | ¡ dd¡A |  |jd¡ d	|_|  |jd	¡ tj | ¡ dd
¡ |  |jd
¡ W d   ƒ n1 sxw   Y  |  |jd	¡ W d   ƒ n1 sŽw   Y  |  |jd¡ d S )Nr(   rQ   r   r   z--foo=2rS   é   é   é   é   )	r   r!   r"   r#   r(   r   ÚpatchÚobjectÚ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   rE   Ú
basestringrT   ÚfloatÚdatetimeÚ	timedeltaÚemailzlist-of-intT©rF   Úmultiplezlist-of-str)	r   r!   r   r   rT   r‚   rƒ   r„   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g d¢¡ |   |jg d¢¡ d S )NÚasdfÚqweré*   g      ø?iÝ  rz   é   r{   é   é-   )Úsecondsztornado@web.com)rQ   rS   ry   ©r[   r\   Úc)r#   r   r   rT   r‚   rƒ   r„   r…   r   r9   r   r	   Úlist_of_intÚlist_of_strr$   r   r   r   Ú_check_options_valuesÒ   s   z!OptionsTest._check_options_valuesc                 C   s$   |   ¡ }| g d¢¡ |  |¡ d S )N)
r   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)rˆ   r"   r”   r$   r   r   r   Ú
test_typesÞ   s
   ÿzOptionsTest.test_typesc                 C   s<   dD ]}|   ¡ }| tj tj t¡|¡¡ |  |¡ qd S )N)zoptions_test_types.cfgzoptions_test_types_str.cfg)rˆ   r1   r+   r,   r-   r.   r0   r”   )r   Úconfig_file_namer%   r   r   r   Útest_types_with_conf_fileð   s   ÿøz%OptionsTest.test_types_with_conf_filec                 C   ó:   t ƒ }|jdtdd | ddg¡ |  |jg d¢¡ d S )Nr(   Tr†   r   z--foo=a,b,cr   )r   r!   r   r"   r#   r(   r$   r   r   r   Útest_multiple_stringû   ó   z OptionsTest.test_multiple_stringc                 C   r˜   )Nr(   Tr†   r   z--foo=1,3,5:7)rQ   ry   r{   r|   é   )r   r!   rT   r"   r#   r(   r$   r   r   r   Útest_multiple_int  rš   zOptionsTest.test_multiple_intc                 C   sZ   t ƒ }| d¡ |  t¡}| d¡ W d   ƒ n1 sw   Y  |  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   sž   g d¢}|D ]F\}}t | ||d3 tƒ }| |¡ |  t¡}| |¡ W d   ƒ n1 s/w   Y  |  t|jƒd¡ W d   ƒ n1 sGw   Y  qd S )N))úfoo-barr¡   )Úfoo_barr¢   ©r¡   r¢   )r¢   r¡   )r[   r\   z Option.*foo.bar.*already defined)r   r   r!   r=   r   r   r   rž   )r   Útestsr[   r\   r%   rŸ   r   r   r   Útest_error_redefine_underscore  s   
ÿû€ÿz*OptionsTest.test_error_redefine_underscorec                 C   sd   dD ]-}dD ](}t ƒ }| |¡ | d|g¡ |  |jd¡ |  |d d¡ |  |d d¡ qqd S )Nr£   )z--foo-bar=az--foo_bar=ar   r[   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*   r[   )
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 g d¢}|  t|ƒ|¡ |  tdd„ | ¡ D ƒƒ|¡ |  t| ¡  ¡ ƒ|¡ |  t| d¡ƒddg¡ tƒ }| 	|¡ |  
d| ¡ ¡ |  
d	| ¡ ¡ d S )
Nú	with-dashÚg)rm   Úwith_underscore)r_   rª   r¬   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#   re   rf   rj   Úkeysrt   r   Ú
print_helpr@   r?   )r   r%   Úall_optionsÚbufr   r   r   Ú"test_dash_underscore_introspection7  s   ÿ
z.OptionsTest.test_dash_underscore_introspectionN)r   r   r   r&   r3   r:   rC   rO   rU   rW   rZ   r]   rb   rc   rd   ri   rk   rx   r€   rˆ   r”   r•   r—   r™   rœ   r    r¥   r¨   r©   rµ   r   r   r   r   r      s8    r   )rƒ   Úior   r+   r;   Úunittestr   Útornado.optionsr   r   Útornado.utilr   Útornado.test.utilr   ÚtypingÚTYPE_CHECKINGr   r~   r	   ÚTestCaser   r   r   r   r   Ú<module>   s    