o
    )ªZhÖ"  ã                   @   sÐ   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZ d dlmZ d dlmZ e jdd„ ƒZG dd	„ d	ejƒZG d
d„ dejƒZG dd„ dejƒZdS )é    N)Úutf8)ÚLogFormatterÚdefine_logging_optionsÚenable_pretty_logging)ÚOptionParser)Úbasestring_typec                   c   sD    t  ¡  t jdtd d V  W d   ƒ d S 1 sw   Y  d S )NÚignore)Úcategory)ÚwarningsÚcatch_warningsÚsimplefilterÚBytesWarning© r   r   úL/var/www/html/lang_env/lib/python3.10/site-packages/tornado/test/log_test.pyÚignore_bytes_warning    s
   €
"þr   c                   @   s^   e Zd Ze 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S )ÚLogFormatterTestsD   (?s)\[E [0-9]{6} [0-9]{2}:[0-9]{2}:[0-9]{2} log_test:[0-9]+\] (.*)c                 C   s€   t dd| _tjdi| j_d| j_t d¡| _d| j_t	 
¡ | _tj | jd¡| _|  | j¡| _| j | j¡ | j | j¡ d S )NF)Úcolorúúr   zlog.out)r   Ú	formatterÚloggingÚERRORÚ_colorsZ_normalÚLoggerÚloggerÚ	propagateÚtempfileÚmkdtempÚtempdirÚosÚpathÚjoinÚfilenameÚmake_handlerÚhandlerÚsetFormatterÚ
addHandler©Úselfr   r   r   ÚsetUp.   s   
zLogFormatterTest.setUpc                 C   s&   | j  ¡  t | j¡ t | j¡ d S ©N)r$   Úcloser   Úunlinkr"   Úrmdirr   r'   r   r   r   ÚtearDown?   s   
zLogFormatterTest.tearDownc                 C   s   t j|ddS )Núutf-8©Úencoding)r   ÚFileHandler)r(   r"   r   r   r   r#   D   s   zLogFormatterTest.make_handlerc                 C   sb   t | jdƒ!}| ¡  ¡ }tj |¡}|r!| d¡W  d   ƒ S td| ƒ‚1 s*w   Y  d S )NÚrbé   zoutput didn't match regex: %r)	Úopenr"   ÚreadÚstripr   ÚLINE_REÚmatchÚgroupÚ	Exception)r(   ÚfÚlineÚmr   r   r   Ú
get_outputG   s   üúzLogFormatterTest.get_outputc                 C   s    | j  d¡ |  |  ¡ d¡ d S )NZfoos   foo)r   ÚerrorÚassertEqualr?   r'   r   r   r   Útest_basic_loggingP   s   z#LogFormatterTest.test_basic_loggingc                 C   sP   t ƒ  | j d¡ |  |  ¡ ttdƒƒ¡ W d   ƒ d S 1 s!w   Y  d S )Nó   é)r   r   r@   rA   r?   r   Úreprr'   r   r   r   Útest_bytes_loggingT   s   "ýz#LogFormatterTest.test_bytes_loggingc                 C   sz   t ƒ  | j d d¡¡ W d   ƒ n1 sw   Y  tttƒr-|  |  ¡ t	dƒ¡ d S |  |  ¡ t	t
t	dƒƒƒ¡ d S )Nõ   Ã©r   )r   r   r@   ÚencodeÚ
issubclassÚbytesr   rA   r?   r   rD   r'   r   r   r   Útest_utf8_loggingZ   s   ÿ
 z"LogFormatterTest.test_utf8_loggingc                 C   sL   zt dƒ‚ t y   | j d¡ Y nw |  ¡ }|  |d¡ |  d|¡ d S )NrC   zcaught exceptions   Exception.*\\xe9s   \n)r;   r   Ú	exceptionr?   ÚassertRegexZassertNotIn)r(   Úoutputr   r   r   Útest_bytes_exception_loggingg   s   ÿz-LogFormatterTest.test_bytes_exception_loggingc                 C   s$   | j  d¡ |  |  ¡ tdƒ¡ d S )NrF   )r   r@   rA   r?   r   r'   r   r   r   Útest_unicode_loggings   s   z%LogFormatterTest.test_unicode_loggingN)Ú__name__Ú
__module__Ú__qualname__ÚreÚcompiler8   r)   r.   r#   r?   rB   rE   rJ   rN   rO   r   r   r   r   r   '   s    ÿ	r   c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚEnablePrettyLoggingTestc                    s4   t ƒ  ¡  tƒ | _t| jƒ t d¡| _d| j_d S )Nz-tornado.test.log_test.EnablePrettyLoggingTestF)	Úsuperr)   r   Úoptionsr   r   r   r   r   r'   ©Ú	__class__r   r   r)   y   s
   

zEnablePrettyLoggingTest.setUpc              
   C   sH  t  ¡ }z{|d | j_t| j| jd |  dt| jjƒ¡ | j 	d¡ | jjd  
¡  t |d ¡}|  dt|ƒ¡ t|d dd}|  | ¡ d	¡ W d   ƒ n1 sUw   Y  W | jjD ]
}| 
¡  | ¡  q_t |d ¡D ]}t |¡ qqt |¡ d S | jjD ]
}| 
¡  | ¡  q„t |d ¡D ]}t |¡ q–t |¡ w )
Nú	/test_log©rW   r   r4   Úhellor   ú
/test_log*r/   r0   ú^\[E [^]]*\] hello$)r   r   rW   Úlog_file_prefixr   r   rA   ÚlenÚhandlersr@   ÚflushÚglobr5   rL   r6   r+   r   r,   r-   ©r(   ZtmpdirÚ	filenamesr<   r$   r"   r   r   r   Útest_log_file€   s2   ÿ€
û
z%EnablePrettyLoggingTest.test_log_filec              
   C   s<  t  ¡ }zu|d | j_d| j_t| j| jd | j d¡ | jjd  	¡  t
 
|d ¡}|  dt|ƒ¡ t|d dd	}|  | ¡ d
¡ W d   ƒ n1 sOw   Y  W | jjD ]
}| 	¡  | ¡  qYt
 
|d ¡D ]}t |¡ qkt |¡ d S | jjD ]
}| 	¡  | ¡  q~t
 
|d ¡D ]}t |¡ qt |¡ w )NrZ   Útimer[   r\   r   r]   r4   r/   r0   r^   )r   r   rW   r_   Úlog_rotate_moder   r   r@   ra   rb   rc   rA   r`   r5   rL   r6   r+   r   r,   r-   rd   r   r   r   Ú!test_log_file_with_timed_rotating”   s2   ÿ€
û
z9EnablePrettyLoggingTest.test_log_file_with_timed_rotatingc              	   C   sl   z%d| j _d| j _| jtt| j | jd W | jjD ]
}| ¡  | 	¡  qd S | jjD ]
}| ¡  | 	¡  q*w )NZ	some_pathZ
wrong_moder[   )
rW   r_   rh   ZassertRaisesÚ
ValueErrorr   r   ra   rb   r+   )r(   r$   r   r   r   Útest_wrong_rotate_mode_value¨   s    ü
þ
þz4EnablePrettyLoggingTest.test_wrong_rotate_mode_value)rP   rQ   rR   r)   rf   ri   rk   Ú__classcell__r   r   rX   r   rU   x   s
    rU   c                   @   sR   e Zd ZdZd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S )ÚLoggingOptionTestz?Test the ability to enable and disable Tornado's logging hooks.Nc           	      C   sd   d}d}d  |||g¡}tjtjd|g|pg  tjtjd}| ¡ \}}|  |j	dd| ¡ d|v S )	Nz7from tornado.options import options, parse_command_linez%import logging; logging.info("hello")ú;z-c)ÚstdoutÚstderrr   zprocess failed: %rs   hello)
r!   Ú
subprocessÚPopenÚsysÚ
executableÚPIPEÚSTDOUTÚcommunicaterA   Ú
returncode)	r(   Z	statementÚargsZIMPORTÚLOG_INFOÚprogramÚprocro   rp   r   r   r   Úlogs_present»   s   ýzLoggingOptionTest.logs_presentc                 C   ó   |   |  d¡¡ d S )NÚpass©ZassertFalser}   r'   r   r   r   Útest_defaultÍ   ó   zLoggingOptionTest.test_defaultc                 C   r~   )Núparse_command_line()©Z
assertTruer}   r'   r   r   r   Útest_tornado_defaultÐ   r‚   z&LoggingOptionTest.test_tornado_defaultc                 C   ó   |   |  ddg¡¡ d S )Nrƒ   z--logging=noner€   r'   r   r   r   Útest_disable_command_lineÓ   ó   z+LoggingOptionTest.test_disable_command_linec                 C   r†   )Nrƒ   z--logging=Noner€   r'   r   r   r   Ú*test_disable_command_line_case_insensitiveÖ   rˆ   z<LoggingOptionTest.test_disable_command_line_case_insensitivec                 C   r~   )Nz.options.logging = "none"; parse_command_line()r€   r'   r   r   r   Útest_disable_code_stringÙ   ó   ÿz*LoggingOptionTest.test_disable_code_stringc                 C   r~   )Nú,options.logging = None; parse_command_line()r€   r'   r   r   r   Útest_disable_code_noneÞ   r‹   z(LoggingOptionTest.test_disable_code_nonec                 C   r†   )NrŒ   z--logging=infor„   r'   r   r   r   Útest_disable_overrideã   s
   ÿÿz'LoggingOptionTest.test_disable_overrider*   )rP   rQ   rR   Ú__doc__r}   r   r…   r‡   r‰   rŠ   r   rŽ   r   r   r   r   rm   ¸   s    
rm   )Ú
contextlibrc   r   r   rS   rq   rs   r   Zunittestr
   Ztornado.escaper   Ztornado.logr   r   r   Ztornado.optionsr   Ztornado.utilr   Úcontextmanagerr   ZTestCaser   rU   rm   r   r   r   r   Ú<module>   s&   
Q@