o
    ¯b®  ã                   @   sˆ   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ G dd„ deƒZG d	d
„ d
eƒZeƒ  e ¡ ¡ eƒ  e ¡ ¡ dS )z/
Tests for implementations of L{IReactorTime}.
é    )ÚIReactorThreadsÚIReactorTime)ÚReactorBuilder)Úmsg)Úplatform)ÚSkipTestc                   @   s&   e Zd ZdZefZdd„ Zdd„ ZdS )ÚTimeTestsBuilderzA
    Builder for defining tests relating to L{IReactorTime}.
    c                 C   s"   |   ¡ }| d|j¡ | ¡  dS )z?
        The reactor can be stopped by a delayed call.
        r   N)ÚbuildReactorÚ	callLaterÚstopÚrun)ÚselfÚreactor© r   úA/usr/lib/python3/dist-packages/twisted/internet/test/test_time.pyÚtest_delayedCallStopsReactor   s   z-TimeTestsBuilder.test_delayedCallStopsReactorc                    sˆ   |   ¡ ‰t ˆ¡rdd„ ‰ ntdƒ‚ˆ dd d dd„ ¡}‡fd	d
„‰ˆ ˆ‡ ‡‡fdd„ƒ ˆ ¡  |  | ¡ ¡ |  |ˆ 	¡ ¡ dS )z
        Scheduling a delayed call at a point in the extreme future does not
        prevent normal reactor operation.
        c                 S   s   t d|d� |  |¡ d S )Nz.Thread-based event-source scheduling %(event)r)ÚformatÚevent)r   ÚcallFromThread)r   r   r   r   r   ÚeventSource&   s   ÿz=TimeTestsBuilder.test_distantDelayedCall.<locals>.eventSourcez=Do not know how to synthesize non-time event to stop the testé   é€   é   c                   S   s   d S ©Nr   r   r   r   r   Ú<lambda>2   s    z:TimeTestsBuilder.test_distantDelayedCall.<locals>.<lambda>c                      s   t dƒ ˆ  ¡  d S )NzStopping the reactor)r   r   r   )r   r   r   r   4   s   z6TimeTestsBuilder.test_distantDelayedCall.<locals>.stopc                      s
   ˆ ˆˆƒS r   r   r   ©r   r   r   r   r   r   <   s   
 N)
r	   r   Ú
providedByr   r
   r   Ú
assertTrueÚactiveÚassertInÚgetDelayedCalls)r   ÚdelayedCallr   r   r   Útest_distantDelayedCall   s   

ÿz(TimeTestsBuilder.test_distantDelayedCallN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚrequiredInterfacesr   r"   r   r   r   r   r      s
    r   c                   @   s6   e Zd ZdZefZe ¡ rdgZnddgZdd„ Z	dS )ÚGlibTimeTestsBuilderza
    Builder for defining tests relating to L{IReactorTime} for reactors based
    off glib.
    z/twisted.internet.gtk2reactor.PortableGtkReactorz*twisted.internet.glib2reactor.Glib2Reactorz(twisted.internet.gtk2reactor.Gtk2Reactorc                    s^   ddl }|  ¡ ‰g ‰‡ ‡fdd„}‡‡fdd„‰ ˆ |jd|¡ |  ˆd¡ |  ˆd	g¡ dS )
z¶
        A
        L{reactor.callLater<twisted.internet.interfaces.IReactorTime.callLater>}
        call scheduled from a C{gobject.timeout_add}
        call is run on time.
        r   Nc                      s   ˆ  dˆ ¡ dS )Nr   )r
   r   )Úcallbackr   r   r   Ú	gscheduleh   s   z8GlibTimeTestsBuilder.test_timeout_add.<locals>.gschedulec                      s   ˆ  d¡ ˆ  ¡  d S )NT)Úappendr   r   )r   Úresultr   r   r)   l   s   
z7GlibTimeTestsBuilder.test_timeout_add.<locals>.callbacké
   é   T)Úgobjectr	   ÚcallWhenRunningÚtimeout_addÚ
runReactorÚassertEqual)r   r/   r*   r   )r)   r   r,   r   Útest_timeout_add[   s   z%GlibTimeTestsBuilder.test_timeout_addN)
r#   r$   r%   r&   r   r'   r   Ú	isWindowsÚ	_reactorsr4   r   r   r   r   r(   K   s    þr(   N)r&   Útwisted.internet.interfacesr   r   Ú#twisted.internet.test.reactormixinsr   Útwisted.python.logr   Útwisted.python.runtimer   Útwisted.trial.unittestr   r   r(   ÚglobalsÚupdateÚmakeTestCaseClassesr   r   r   r   Ú<module>   s   <*