
    VhC                     J    d Z ddlmZ ddlmZ ddlmZmZmZ  G d de      Z	y)	z(
Tests for L{twisted._threads._memory}.
    )verifyObject)SynchronousTestCase   )AlreadyQuitIWorkercreateMemoryWorkerc                   (    e Zd ZdZddZddZddZy)MemoryWorkerTestsz$
    Tests for L{MemoryWorker}.
    Nc                 b   t               \  }}t        t        |       g |j                  fd       |j                  fd       | j	                  g        | j	                   |       d       | j	                  dg       | j	                   |       d       | j	                  ddg       y)z
        L{createMemoryWorker} creates an L{IWorker} and a callable that can
        perform work on it.  The performer returns C{True} if it accomplished
        useful work.
        c                  &     j                  d      S )N   appenddones   Q/home/dcms/DCMS/lib/python3.12/site-packages/twisted/_threads/test/test_memory.py<lambda>z?MemoryWorkerTests.test_createWorkerAndPerform.<locals>.<lambda>       $++a.     c                  &     j                  d      S )N   r   r   s   r   r   z?MemoryWorkerTests.test_createWorkerAndPerform.<locals>.<lambda>   r   r   Tr   r   N)r   r   r   doassertEqual)selfworker	performerr   s      @r   test_createWorkerAndPerformz-MemoryWorkerTests.test_createWorkerAndPerform   s     /0	Wf%		()		()r"d+s#d+1v&r   c                 V   t               \  }}g dfd}|j                  |       |j                          | j                  t        |j                  |       | j                  t        |j                          |        | j                  dg       | j                   |       d       y)a  
        Calling C{quit} on the worker returned by L{createMemoryWorker} causes
        its C{do} and C{quit} methods to raise L{AlreadyQuit}; its C{perform}
        callable will start raising L{AlreadyQuit} when the work already
        provided to C{do} has been exhausted.
        Nc                  (     j                  d       y )N   r   r   s   r   moreWorkz2MemoryWorkerTests.test_quitQuits.<locals>.moreWork.   s    KKNr   r    FreturnN)r   r   quitassertRaisesr   r   )r   r   r   r!   r   s       @r   test_quitQuitsz MemoryWorkerTests.test_quitQuits$   s     /0		 			(+vyy(;+v{{3s#e,r   c                 L    t               \  }}| j                   |       d       y)z
        The C{perform} callable returned by L{createMemoryWorker} will return
        no result when there's no work to do yet.  Since there is no work to
        do, the performer returns C{False}.
        FN)r   r   )r   r   r   s      r   test_performWhenNothingToDoYetz0MemoryWorkerTests.test_performWhenNothingToDoYet9   s#     /0	e,r   r"   )__name__
__module____qualname____doc__r   r&   r(    r   r   r
   r
      s    '"-*-r   r
   N)
r,   zope.interface.verifyr   twisted.trial.unittestr    r   r   r   r
   r-   r   r   <module>r1      s%    / 6 7 72-+ 2-r   