
    Yf(                     ^    d Z ddlZddlmZmZmZmZ ddlmZ ddl	m
Z
  G d de
          ZdS )z/
Tests for C{yield from} support in Deferreds.
    N)DeferredensureDeferredfailsucceed)Clock)TestCasec                   J    e Zd Z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 )YieldFromTestsz@
    Tests for using Deferreds in conjunction with PEP-380.
    returnNc                 
   d } |            }|                      |t          j                   t          |          }|                      |t                     |                     |          }|                     |d           dS )zM
        L{ensureDeferred} will turn a coroutine into a L{Deferred}.
        c               3   8   K   t          d          } | E d {V }|S Nfoor   dress     \/var/www/html/env/lib/python3.11/site-packages/twisted/internet/test/test_defer_yieldfrom.pyrunz/YieldFromTests.test_ensureDeferred.<locals>.run   '      A,,,,,,CJ    r   N)assertIsInstancetypesGeneratorTyper   r   successResultOfassertEqual)selfr   rr   r   s        r   test_ensureDeferredz"YieldFromTests.test_ensureDeferred   s    
	 	 	 CEEa!4555 1a*** ""1%%e$$$$$r   c                     fd}d  |            }|                      |t          j                   t          j        |          }|                      |t                     |                     |          }|                     |d           dS )zU
        L{Deferred.fromCoroutine} will turn a coroutine into a L{Deferred}.
        c               3   Z   K   t          d          } | E d {V               E d {V }|S )Nbarr   )r   r   run2s     r   r   z6YieldFromTests.test_DeferredfromCoroutine.<locals>.run0   sE      ALLLLLLL!TVV######CJr   c               3   8   K   t          d          } | E d {V }|S r   r   r   s     r   r#   z7YieldFromTests.test_DeferredfromCoroutine.<locals>.run26   r   r   r   N)r   r   r   r   fromCoroutiner   r   )r   r   r   r   r   r#   s        @r   test_DeferredfromCoroutinez)YieldFromTests.test_DeferredfromCoroutine+   s    
	 	 	 	 		 	 	 CEEa!4555 "1%%a*** ""1%%e$$$$$r   c                     d }t          j         |                      }|                     |          }|                     |d           dS )ze
        L{Deferred.fromCoroutine} allows a function to C{yield from} a
        L{Deferred}.
        c               3   8   K   t          d          } | E d {V }|S r   r   r   s     r   r   z&YieldFromTests.test_basic.<locals>.runM   r   r   r   N)r   r%   r   r   r   r   r   r   s       r   
test_basiczYieldFromTests.test_basicG   sX    	 	 	
 "3355))""1%%e$$$$$r   c                    d }t          j         |                      }|                     |          }|                     t	          |j                  t                     |                     |j        j        d           dS )
        An exception in a generator scheduled with L{Deferred.fromCoroutine}
        will cause the returned L{Deferred} to fire with a failure.
        c               3   R   K   t          d          } | E d {V  t          d          )Nr   Oh no!)r   
ValueError)r   s    r   r   z*YieldFromTests.test_exception.<locals>.run\   s0      ALLLLLLLX&&&r   )r.   N)r   r%   failureResultOfr   typevaluer/   argsr)   s       r   test_exceptionzYieldFromTests.test_exceptionV   sz    	' 	' 	'
 "3355))""1%%ci*55555555r   c                 <   t                      g fdfd}t          j         |                      }                    d           |                     ddg                               d           |                     g d                               d           |                     g d                               d           |                     g d           |                     |          }|                     |d	           d
S )r,   c               3      K                        d           t                      }                     d| j        d            | E d {V                       d           dS )N         Yay!appendr   	callLatercallback)r   reactorsectionss    r   runonez+YieldFromTests.test_twoDeep.<locals>.runonen   sd      OOA

AaT222LLLLLLLOOA6r   c               3     K                        d                        E d {V }                      d           t                      }                    d|j        d            |E d {V                       d           | S )Nr8         r;   )resultr   r?   rA   r@   s     r   r   z(YieldFromTests.test_twoDeep.<locals>.runv   s      OOA &((((((FOOA

AaT222LLLLLLLOOAMr   g?r8   r7   皙?)r8   r7   r9   rC   )r8   r7   r9   rC   rD   r:   N)r   r   r%   advancer   r   )r   r   r   r   r?   rA   r@   s       @@@r   test_twoDeepzYieldFromTests.test_twoDeepf   sM   
 ''	 	 	 	 	 		 	 	 	 	 	 	 "3355))Aq6***<<<000<<<000???333""1%%f%%%%%r   c                       fd}                      t          j         |                                }                     |d           dS )zT
        Yielding from an already failed Deferred will raise the exception.
        c               3      K   	 t          t          d                    E d {V  n3# t          $ r&}                     | j        d           Y d } ~ dS d } ~ ww xY wdS )NBoom)rK   r8   r   )r   r/   r   r3   )er   s    r   testz)YieldFromTests.test_reraise.<locals>.test   s      
6 2 23333333333     333qqqqq 1s   "( 
AAAr8   N)r   r   r%   r   )r   rM   r   s   `  r   test_reraisezYieldFromTests.test_reraise   s^    
	 	 	 	 	 ""8#9$$&&#A#ABBa     r   c                     t                      fd}t          j         |                      }                    d           |                     |          }|                     |d           dS )zi
        Yielding from a paused & chained Deferred will give the result when it
        has one.
        c               3      K   t                      } t                      |                     fd           |                     d                                dj        d           | E d {V }|S )Nc                     S )N )ignoredd2s    r   <lambda>z;YieldFromTests.test_chained.<locals>.test.<locals>.<lambda>   s    " r   r   bye)r   addCallbackr>   r=   )r   r   rT   r?   s     @r   rM   z)YieldFromTests.test_chained.<locals>.test   sx      

ABMM,,,,---JJtae444,,,,,,CJr   rF   rV   N)r   r   r%   rG   r   r   )r   rM   r   r   r?   s       @r   test_chainedzYieldFromTests.test_chained   s    
 ''	 	 	 	 	 "4466**""1%%e$$$$$r   )r   N)__name__
__module____qualname____doc__r   r&   r*   r4   rH   rN   rX   rR   r   r   r
   r
      s         % % % %,% % % %8% % % %6 6 6 6 )& )& )& )&V! ! ! ! % % % % % %r   r
   )r\   r   twisted.internet.deferr   r   r   r   twisted.internet.taskr   twisted.trial.unittestr   r
   rR   r   r   <module>r`      s   
   J J J J J J J J J J J J ' ' ' ' ' ' + + + + + +f% f% f% f% f%X f% f% f% f% f%r   