U
    Pe7                     @   s   d 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ejddZ	ej
dd Zejdddd	gd
d Zejjdd Zejje	dkdddd Zejje	dkdddd Zdd ZdDd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ejjejjejje	dkd*dd+d, Z ejje	dkddd-d. Z!G d/d0 d0ej"Z#d1d2 Z$ejjejjd3d4 Z%d5d6 Z&d7d8 Z'd9d: Z(ejje	dkddd;d< Z)ejjejje	dkd=dd>d? Z*ejjejje	d@kdAddBdC Z+dS )Ez
Logger tests
============
    NZKIVY_LOG_MODEZKIVYc                  c   sR   ddl m}  | dd}| dd}z
d V  W 5 | dd| | dd| X d S )Nr   Configkivylog_dirlog_maxfiles)kivy.configr   getset)r   r   r    r
   :/tmp/pip-unpacked-wheel-xzebddm3/kivy/tests/test_logger.pyfile_handler   s    
r   n      c                 C   s  ddl m} ddlm} |ddt|  |dd| | }|  t|j	j
}td dd	 t|d
 D }|D ] }| | }	|	d td qx|  tt|d | }
dd |  D }||kr|| t|
t|d kr|
d d }
t|
|kstd S )Nr   r   )FileHandlerr   r   r   g?c                 S   s   g | ]}d | dqS )Zlog_z.txtr
   ).0ir
   r
   r   
<listcomp>0   s     z#test_purge_logs.<locals>.<listcomp>   z	some datac                 S   s   h | ]
}|j qS r
   )name)r   fr
   r
   r   	<setcomp>:   s     z"test_purge_logs.<locals>.<setcomp>r   )r   r   kivy.loggerr   r	   strZ
_configurepathlibPathfilenamer   timesleeprange
write_textZ
purge_logslistreversediterdirremovelenAssertionError)Ztmp_pathr   r   r   r   handler	open_filenamesr   pZexpected_namesfilesr
   r
   r   test_purge_logs!   s*    


r-   c                  C   sL   ddl m} m} tdD ]}| | qt|jdksHtdt|j d S )Nr   LoggerLoggerHistory   d   zWrong size: %s)r   r/   r0   r    infor&   historyr'   )r/   r0   xr
   r
   r   test_logger_history_sizeF   s    r6   z$Requires KIVY_LOG_MODE==KIVY to run.)reasonc                  C   s   ddl m} m}m} ddl}| d | d ||jd | |d d |j	dd	 }t
d
d |D stdd |D dS )z,Kivy logger defines a custom level of Trace.r   )r/   
LOG_LEVELSr0   N	   test: This is trace message 1ztest: This is trace message 2traceztest: This is trace message 3   c                 s   s   | ]}|j d kV  qdS )r9   Nlevelnor   
log_recordr
   r
   r   	<genexpr>d   s     z#test_trace_level.<locals>.<genexpr>c                 S   s   g | ]
}|j qS r
   r=   r?   r
   r
   r   r   d   s    z$test_trace_level.<locals>.<listcomp>)r   r/   r8   r0   loggingsetLevelr;   logTRACEr4   allr'   )r/   r8   r0   rB   Zlast_log_recordsr
   r
   r   test_trace_levelQ   s    

rG   PYTHONz&Requires KIVY_LOG_MODE!=PYTHON to run.c                  C   s<   ddl m} m} | d | d |jd jdks8td S )Nr   r.   r9   r:   rE   )r   r/   r0   rC   r;   r4   	levelnamer'   r.   r
   r
   r   test_trace_level_has_level_namei   s    

rJ   c                     s>   dd l  ddlm}  G  fddd}|d}| d| d S )Nr   )r/   c                       s    e Zd Z fddZdd ZdS )z@test_logging_does_not_deep_copy.<locals>.UncopyableDatastructurec                    s      | _|| _d S N)Lock_lock_name)selfr   	threadingr
   r   __init__}   s    
zItest_logging_does_not_deep_copy.<locals>.UncopyableDatastructure.__init__c                 S   s
   d| j  S )Nz UncopyableDatastructure(name=%r))rN   rO   r
   r
   r   __str__   s    zHtest_logging_does_not_deep_copy.<locals>.UncopyableDatastructure.__str__N)__name__
__module____qualname__rR   rT   r
   rP   r
   r   UncopyableDatastructure|   s   rX   Z
UncopyablezThe value of s is %s)rQ   r   r/   error)r/   rX   sr
   rP   r   test_logging_does_not_deep_copyu   s
    r[   c                 C   sl   ddl m} | }tj|d}|r,|| td|  }|d d|_| rZt	d|
| ||fS )zL
    Helper function provides logger configured to write to log_output.
    r   )StringIO)streamztests.%sr9   Fz#Must use unique code between tests.)ior\   rB   StreamHandlersetFormatter	getLoggerrC   	propagatehasHandlersr'   
addHandler)Zunique_code	formatterr\   
log_outputr(   loggerr
   r
   r   configured_string_logging   s    


rh   c                  C   sV   ddl m}  tjdtjddddd dd d		}t|d
ks:t| |}t|dksRtd S )Nr   ColonSplittingLogRecord	kivy.testtest.pyr   zPart1: Part2: Part 3argstest_colon_splitting	r   levelpathnamelinenomsgrn   exc_infofuncsinfoz><LogRecord: kivy.test, 10, test.py, 1, "Part1: Part2: Part 3">zF<LogRecord: kivy.test, 10, test.py, 1, "[Part1       ] Part2: Part 3">r   rj   rB   	LogRecordDEBUGr   r'   rj   originallogrecordshimmedlogrecordr
   r
   r   'test_colonsplittinglogrecord_with_colon   s&    
r~   c                  C   s   ddl m}  tjdtjddddd dd d		}| |}t|t|ksFttjdtjdddd d dd d		}| |}t|t|kstd S )
Nr   ri   rk   rl   r   zPart1 Part2 Part 3rm   ro   rp   rx   r{   r
   r
   r   *test_colonsplittinglogrecord_without_colon   s6    r   c                  C   s   ddl m}  tjdtjddddd dd d		}| |}t|t|ksFttjdtjdddd d dd d		}| |}t|t|kstd S )
Nr   UncoloredLogRecordrk   rl   r   Part1: Part2 Part 3rm   ro   rp   r   r   rB   ry   rz   r   r'   r   r|   r}   r
   r
   r   &test_uncoloredlogrecord_without_markup   s6    r   c                  C   sF   ddl m}  tjdtjddddd dd d		}| |}t|d
ksBtd S )Nr   r   rk   rl   r   Part1: $BOLDPart2$RESET Part 3rm   ro   rp   z=<LogRecord: kivy.test, 10, test.py, 1, "Part1: Part2 Part 3">r   r   r
   r
   r   #test_uncoloredlogrecord_with_markup   s"    r   c                  C   s   ddl m}  tjdtjddddd dd d		}| |}t|t|ksFt|j|jksVt|jd
ksdttjdtjdddd d dd d		}| |}t|t|kstd S )Nr   ColoredLogRecordrk   rl   r   r   rm   ro   rp   z[1;36mDEBUG[0m)r   r   rB   ry   rz   r   r'   rI   r   r|   r}   r
   r
   r   $test_coloredlogrecord_without_markup  s:    r   c                  C   sd   ddl m}  tjdtjddddd dd d		}| |}t|d
ksBt|j|jksRt|jdks`td S )Nr   r   rk   rl   r   r   rm   ro   rp   zE<LogRecord: kivy.test, 20, test.py, 1, "Part1: [1mPart2[0m Part 3">z[1;32mINFO[0m)r   r   rB   ry   INFOr   r'   rI   r   r
   r
   r   !test_coloredlogrecord_with_markup:  s"    
r   c                  C   sD   ddl m}  | ddd}td|\}}|d | dks@td S )	Nr   KivyFormatterz[%(levelname)-7s] %(message)sFZ	use_color1Fancy: $BOLDmess$RESETagez![INFO   ] [Fancy       ] message
r   r   rh   r3   getvaluer'   r   re   rg   rf   r
   r
   r   !test_kivyformatter_colon_no_colorS  s
    
r   c                  C   sD   ddl m}  | ddd}td|\}}|d | dks@td S )	Nr   r   z[%(levelname)-18s] %(message)sTr   2r   z4[[1;32mINFO[0m   ] [Fancy       ] [1mmess[0mage
r   r   r
   r
   r   test_kivyformatter_colon_color\  s    
r   z$Requires KIVY_LOG_MODE!=KIVY to run.c                   C   s   t jjdkstddS )z
    This is a test of the pytest markers.
    This should only be invoked if the environment variable is appropriately set
    (before pytest is run).

    Also, tests that kivy.logger paid attention to the environment variable
    r   zRoot logger was modifiedNrB   rootrq   r'   r
   r
   r
   r   test_kivy_log_mode_marker_oni  s    r   c                   C   s   t jjdkstddS )z
    This is a test of the pytest markers.
    This should only be invoked if the environment variable is properly set
    (before pytest is run).

    Also, tests that kivy.logger paid attention to the environment variable
    r   zRoot logger was not modifiedNr   r
   r
   r
   r   test_kivy_log_mode_marker_offz  s    r   c                       s(   e Zd ZdZ fddZdd Z  ZS )NuclearReactorMonitoringHandlerNominalc                    s   t  jtjd d S )N)rq   )superrR   rB   CRITICALrS   	__class__r
   r   rR     s    z(NuclearReactorMonitoringHandler.__init__c                 C   s    t jd t j  d| _d S )Nz0Please proceed immediately to the nearest exit.
	Evacuated)sysstderrwriteflushNUCLEAR_REACTOR_STATUS)rO   r@   r
   r
   r   emit  s    
z$NuclearReactorMonitoringHandler.emit)rU   rV   rW   r   rR   r   __classcell__r
   r
   r   r   r     s   r   c                  C   sd   t  t   t } t  |  t d}|d | jdksHt|d | jdks`td S )Nzpowerstation.corezCore temperature nominalr   zRadioactive gas leakr   )	rB   ra   rd   r_   r   r3   r   r'   critical)r(   Znuclear_core_loggerr
   r
   r   simulate_evacuation  s    


r   c                   C   s
   t   d S rK   )r   r
   r
   r
   r   test_third_party_handlers_work  s    r   c                  C   s.   ddl m}  |   tdd t| jS )Nr   r0   testr   )r   r0   clear_historyrB   ra   r3   boolr4   r   r
   r
   r   are_regular_logs_handled  s    r   c                  C   s,   ddl m} m} |   |d t| jS )Nr   r0   r/   r   )r   r0   r/   r   r3   r   r4   r   r
   r
   r   are_kivy_logger_logs_handled  s    
r   c                  C   s4   ddl m}  |   tjd tj  t| jS )Nr   r   zTest output to stderr
)	r   r0   r   r   r   r   r   r   r4   r   r
   r
   r   is_stderr_output_handled  s
    
r   c                   C   s   t  s
tt std S rK   )r   r'   r   r
   r
   r
   r   test_kivy_mode_handlers  s    
r   z&Requires KIVY_LOG_MODE==PYTHON to run.c                   C   s"   t  r
tt rtt rtd S rK   r   r'   r   r   r
   r
   r
   r   test_python_mode_handlers  s    

r   ZMIXEDz%Requires KIVY_LOG_MODE==MIXED to run.c                   C   s"   t  r
tt stt rtd S rK   r   r
   r
   r
   r   test_mixed_mode_handlers  s    

r   )N),__doc__rB   osr   r   r   Zpytestenvironr   ZLOG_MODEZfixturer   markZparametrizer-   Zxfailr6   ZskipifrG   rJ   r[   rh   r~   r   r   r   r   r   r   r   ZlogmodepythonZlogmodemixedr   r   Handlerr   r   r   r   r   r   r   r   r   r
   r
   r
   r   <module>   s   

$




#"%	
	
