o
    )ªZhœ.  ã                   @   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   úP/var/www/html/lang_env/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%   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   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=barrE   rF   ÚbarrD   )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   sL   t ƒ }|jddtd |  t¡ d|_W d   ƒ d S 1 sw   Y  d S )Nr(   rK   rL   Ú2)r   r!   rN   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(   rK   )r   rC   r4   rM   )r   r!   rN   Ú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ÚarK   r   ÚbrM   )r   r!   r$   r   r   r   Ú_sample_options   s   zOptionsTest._sample_optionsc                 C   s(   |   ¡ }|  tg d¢ƒtt|ƒƒ¡ d S )N©rU   rV   Úhelp)rW   r#   ÚsetÚiterr$   r   r   r   Ú	test_iter‡   s    zOptionsTest.test_iterc                 C   s   |   ¡ }|  d|d ¡ d S )NrK   rU   )rW   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 rJ   )r   r!   rN   r#   r$   r   r   r   Útest_setitem   s   zOptionsTest.test_setitemc                 C   s4   |   ¡ }ddd|jfg}t| ¡ ƒ}|  ||¡ d S )N)rU   rK   )rV   rM   rY   )rW   rY   ÚsortedÚitemsr#   )r   r%   ÚexpectedÚactualr   r   r   Ú
test_items–   s   zOptionsTest.test_itemsc                 C   s*   |   ¡ }dd|jdœ}|  || ¡ ¡ d S )NrK   rM   rX   )rW   rY   r#   Úas_dict)r   r%   ra   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 )NrU   rK   r   rV   Zb_grouprM   )Úgroupr   r   Ú Znonexistent)
r   r!   r8   Ú	_getframeÚf_codeÚco_filenamer#   rZ   ÚgroupsÚ
group_dict)r   r%   ÚframeZ	this_fileZ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(   rK   r   r   z--foo=2rM   é   é   é   é   )	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   Ú
basestringrN   ÚfloatÚdatetimeÚ	timedeltaÚemailzlist-of-intT©rC   Zmultiplezlist-of-str)	r   r!   r   r   rN   rw   rx   ry   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 )NZasdfZqweré*   g      ø?iÝ  rp   é   rq   é   é-   )Úsecondsztornado@web.com)rK   rM   ro   ©rU   rV   Úc)r#   r   rv   rN   rw   rx   ry   rz   r   r6   r   r	   Zlist_of_intZ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   Z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)rK   ro   rq   rr   é   )r   r!   rN   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   )rU   rV   z Option.*foo.bar.*already defined)r   r   r!   r:   r   rŒ   r   r   )r   ZtestsrU   rV   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   rU   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*   rU   )
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)rf   Úwith_underscore)rY   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#   r_   r`   rd   Úkeysrl   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@   rI   rO   rQ   rT   rW   r\   r]   r^   rc   re   rn   ru   r|   r„   r…   r†   rˆ   r‹   r   r“   r–   r—   r¢   r   r   r   r   r      s8    r   )rx   Úior   r+   r8   Zunittestr   Ztornado.optionsr   r   Ztornado.utilr   Ztornado.test.utilr   ÚtypingÚTYPE_CHECKINGr   rt   r	   ZTestCaser   r   r   r   r   Ú<module>   s    