U
    Pe                     @   s   d Z ddlZddlZddlZG dd dZe 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dS )5z
Clock tests
===========
    Nc                   @   s   e Zd ZdZdd ZdS )ClockCounterr   c                 O   s   |  j d7  _ d S N   )counterselfargskwargs r
   9/tmp/pip-unpacked-wheel-xzebddm3/kivy/tests/test_clock.py__call__   s    zClockCounter.__call__N)__name__
__module____qualname__r   r   r
   r
   r
   r   r   
   s   r   c                   c   s   t  V  d S N)r   r
   r
   r
   r   clock_counter   s    r   c                 C   s$   |  | |   |jdks td S r   schedule_oncetickr   AssertionError
kivy_clockr   r
   r
   r   test_schedule_once   s    
r   c                 C   s.   |  | |  | |   |jdks*td S )N   r   r   r
   r
   r   test_schedule_once_twice   s    

r   c                 C   s<   |  |d |   |jdks"t|   |jdks8td S Nr   r   r   	tick_drawr   r   r   r   r
   r
   r   test_schedule_once_draw_after$   s
    r   c                 C   s<   |  |d |   |jdks"t|   |jdks8td S )Nr   r   r   r
   r
   r   test_schedule_once_draw_before,   s
    r    c                 C   s.   |  | | | |   |jdks*td S Nr   r   
unscheduler   r   r   r   r
   r
   r   test_unschedule4   s    

r$   c                 C   s.   |  |}| | |   |jdks*td S r!   r"   )r   r   Zevr
   r
   r   test_unschedule_event;   s    

r%   c                 C   s8   |  |d |   | | |   |jdks4td S Ng      @r   )r   r   r#   r   r   r   r
   r
   r   test_unschedule_after_tickB   s
    
r'   c                 C   sF   |  |d |   |jdks"t| | |   |jdksBtd S r!   )r   r   r   r   r#   r   r   r
   r
   r   test_unschedule_drawJ   s    
r(   c                 C   s:   |  |d}|  |jdks t|   |jdks6td S r   )create_triggerr   r   r   r   r   Ztriggerr
   r
   r   test_trigger_createS   s
    r+   c                 C   s4   |  |d}|  |  |   |jdks0td S r&   )r)   cancelr   r   r   r*   r
   r
   r   test_trigger_cancel[   s
    r-   c                 C   sF   | j |ddd}|  |   |jdks,t|   |jdksBtd S )Nr   T)intervalr   r   )r)   r   r   r   r*   r
   r
   r   test_trigger_intervalc   s    r/   c                    sL   ddl m} |  fdd}|   jdks2t|    jdksHtd S )Nr   	triggeredc                      s    dd d S Nr   )dtr
   r
   r   r
   r   triggered_callbacko   s    z2test_trigger_decorator.<locals>.triggered_callbackr   )
kivy.clockr1   r   r   r   r   r   r1   r5   r
   r4   r   test_trigger_decoratorl   s    r8   c                    sF   ddl m} |  fdd}|  |  |    jdksBtd S )Nr   r0   c                      s    dd d S r2   r
   r
   r4   r
   r   r5   |   s    z9test_trigger_decorator_cancel.<locals>.triggered_callback)r6   r1   r,   r   r   r   r7   r
   r4   r   test_trigger_decorator_cancely   s    r9   c                    sX   d   fdd}|| _ dd }| | | | |   |jdksHt dksTtd S )Nc                    s   t |  d S r   )str)e	exceptionr
   r   handle_test_exception   s    z4test_exception_caught.<locals>.handle_test_exceptionc                  W   s   t dd S NStooooop
ValueErrorr   r
   r
   r   raise_exception   s    z.test_exception_caught.<locals>.raise_exceptionr   r@   )handle_exceptionr   r   r   r   )r   r   r>   rD   r
   r<   r   test_exception_caught   s    

rF   c              	   C   sL   dd }|  | |  | tt |   W 5 Q R X |jdksHtd S )Nc                  W   s   t dd S r?   rA   rC   r
   r
   r   rD      s    z/test_exception_ignored.<locals>.raise_exceptionr   )r   pytestraisesrB   r   r   r   )r   r   rD   r
   r
   r   test_exception_ignored   s    

rI   c                    st   ddl m} d  G  fddd|}|  dd }| | | | |   |jdksdt dksptd S )	Nr   )ExceptionHandlerc                       s   e Zd Z fddZdS )z2test_exception_caught_handler.<locals>.KivyHandlerc                    s   t | jS r   )r:   ZPASS)r   r;   r=   kivy_exception_managerr
   r   rE      s    zCtest_exception_caught_handler.<locals>.KivyHandler.handle_exceptionN)r   r   r   rE   r
   rK   r
   r   KivyHandler   s   rM   c                  W   s   t dd S r?   rA   rC   r
   r
   r   rD      s    z6test_exception_caught_handler.<locals>.raise_exceptionr   r@   )Z	kivy.baserJ   add_handlerr   r   r   r   )r   r   rL   rJ   rM   rD   r
   rK   r   test_exception_caught_handler   s    

rO   c                 C   s^   t  }t  }| | | ||}|  |   |jdks>t|jdksLt|jdksZtd S r   )r   r   create_lifecycle_aware_trigger
stop_clockr   r   )r   r   counter2Zcounter_scheduleeventr
   r
   r   test_clock_ended_callback   s    
rT   c                 C   s:   t  }| || |   |jdks(t|jdks6td S r   )r   !schedule_lifecycle_aware_del_saferQ   r   r   )r   r   rR   r
   r
   r   test_clock_ended_del_safe   s
    rV   c              	   C   s   ddl m} | ||}|   t| |  W 5 Q R X |jdksJt| ||}t| |  W 5 Q R X |jdkst| | |jdkstd S Nr   )ClockNotRunningError)	r6   rX   rP   rQ   rG   rH   r   r   r   )r   r   rX   rS   r
   r
   r   test_clock_ended_raises   s$      
rY   c              	   C   sN   ddl m} t }|   t| | || W 5 Q R X |jdksJtd S rW   )	r6   rX   r   rQ   rG   rH   rU   r   r   )r   r   rX   rR   r
   r
   r    test_clock_ended_del_safe_raises   s    rZ   c                 C   sd   t  }| ||}|  |   |jdks.t|jdks<t|   |jdksRt|jdks`td S r   )r   rP   rQ   r   r   )r   r   rR   rS   r
   r
   r   test_clock_stop_twice   s     r[   c                 C   s   |    |   d S r   )rQ   Zstart_clock)r   r
   r
   r   test_clock_restart  s    r\   c                    s   d  G  fddd}|  | j}t  |  |    d ksFt| | j |  |    d ksnt| j | jdd}t  |  |    dkstd S )Nc                       s   e Zd Z fddZdS )z-test_clock_event_trigger_ref.<locals>.Counterc                    s   d d S )N*   r
   r   valuer
   r   call  s    z2test_clock_event_trigger_ref.<locals>.Counter.callN)r   r   r   r`   r
   r^   r
   r   Counter  s   ra   F)Zrelease_refr]   )r)   r`   gcZcollectr   r   r   )r   ra   rS   r
   r^   r   test_clock_event_trigger_ref  s     rc   )__doc__rb   weakrefrG   r   Zfixturer   r   r   r   r    r$   r%   r'   r(   r+   r-   r/   r8   r9   rF   rI   rO   rT   rV   rY   rZ   r[   r\   rc   r
   r
   r
   r   <module>   s:   
			
