o
    >h                     @   s   d Z ddlmZmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ dd Zd	d
 ZG dd deZdd ZG dd dejZG dd dejZdS )zI
Tests for L{twisted.internet.defer.deferredGenerator} and related APIs.
    )deferreactor)DeferreddeferredGeneratorwaitForDeferred)runWithWarningsSuppressed)unittest)suppressc                  C   s   t  } td| jd | S )Nr   hi)r   r   	callLatercallbackd r   x/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/test/test_defgen.pygetThing   s   r   c                     s"   t    fdd} td|   S )Nc                      s     td d S )NOMG)errbackZeroDivisionErrorr   r   r   r   CRAP   s   zgetOwie.<locals>.CRAPr   )r   r   r   )r   r   r   r   getOwie   s   r   c                   @   s   e Zd ZdS )TerminalExceptionN)__name__
__module____qualname__r   r   r   r   r      s    r   c                 C   s   t tddgt| S )z
    Calls L{deferredGenerator} while suppressing the deprecation warning.

    @param f: Function to call
    @return: Return value of function.
    z7twisted.internet.defer.deferredGenerator was deprecatedmessage)r   SUPPRESSr   )fr   r   r   deprecatedDeferredGenerator#   s   r   c                   @   sX   e 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d Z
eddgZdS )DeferredGeneratorTestsc                    s    t  fdd}|  jdS )z
        Test that a normal deferredGenerator works.  Tests yielding a
        deferred which callbacks, as well as a deferred errbacks. Also
        ensures returning a final value works.
        c               
   3   s    t t } | V  |  }  | d t t }|V  z|  W n ty; } z t|d W Y d }~nd }~ww dV  d S )Nr
   r   WOOSH)r   r   	getResultassertEqualr   r   str)xoweselfr   r   
_genBasics=   s   

z5DeferredGeneratorTests.testBasics.<locals>._genBasicsr!   r   addCallbackr#   )r)   r*   r   r(   r   
testBasics6   s   z!DeferredGeneratorTests.testBasicsc                 C   s   t dd }| | tS )z
        Ensure that a generator that produces an exception signals
        a Failure condition on result deferred by converting the exception to
        a L{Failure}.
        c                   s   s    t t V  dd  d S )N   r   )r   r   r   r   r   r   _genProduceExceptionW   s   zJDeferredGeneratorTests.testProducesException.<locals>._genProduceException)r   assertFailurer   )r)   r/   r   r   r   testProducesExceptionP   s   
z,DeferredGeneratorTests.testProducesExceptionc                 C      t dd }| | jdS )z9Test that a generator which never yields results in None.c                   s   s    d S Nr   r   r   r   r   _genNothinga   s   z7DeferredGeneratorTests.testNothing.<locals>._genNothingNr+   )r)   r4   r   r   r   testNothing^   s   
z"DeferredGeneratorTests.testNothingc                 C   r2   )z
        Create a Deferred Generator which yields a Deferred which fails and
        handles the exception which results.  Assert that the Deferred
        Generator does not errback its Deferred.
        c                  s   s>    t ttd} | V  z|   W d S  ty   Y d S w )NHandled Terminal Failure)r   r   failr   r"   r%   r   r   r   _genHandledTerminalFailureo   s   zUDeferredGeneratorTests.testHandledTerminalFailure.<locals>._genHandledTerminalFailureNr+   )r)   r9   r   r   r   testHandledTerminalFailureh   s   

z1DeferredGeneratorTests.testHandledTerminalFailurec                 C   s8   t dd }t }||}|td || jdS )z~
        Just like testHandledTerminalFailure, only with a Deferred which fires
        asynchronously with an error.
        c                 s   s4    t | }|V  z|  W d S  ty   Y d S w r3   )r   r"   r   )r   r%   r   r   r   _genHandledTerminalAsyncFailure   s   z_DeferredGeneratorTests.testHandledTerminalAsyncFailure.<locals>._genHandledTerminalAsyncFailurer6   N)r   r   r   r   r   r,   r#   )r)   r;   r   deferredGeneratorResultDeferredr   r   r   testHandledTerminalAsyncFailure|   s   
z6DeferredGeneratorTests.testHandledTerminalAsyncFailurec                 C   r2   )zj
        Make sure we don't blow the stack when yielding immediately
        available deferreds.
        c                  s   s6    t dD ]} ttd} | V  |  } qdV  d S Ni  r.   r   )ranger   r   succeedr"   r8   r   r   r   _genStackUsage   s   

z=DeferredGeneratorTests.testStackUsage.<locals>._genStackUsager   r+   )r)   rA   r   r   r   testStackUsage   s   
z%DeferredGeneratorTests.testStackUsagec                 C   r2   )zg
        Make sure we don't blow the stack when yielding immediately
        available values.
        c                  s   s     t dD ]} dV  qdV  d S r>   )r?   r8   r   r   r   _genStackUsage2   s   
z?DeferredGeneratorTests.testStackUsage2.<locals>._genStackUsage2r   r+   )r)   rC   r   r   r   testStackUsage2   s   
z&DeferredGeneratorTests.testStackUsage2c                 C   s   dd }t |}| | tS )zZ
        Ensure that yielding a Deferred directly is trapped as an
        error.
        c                   s   s    t  V  d S r3   )r   r   r   r   r   _genDeferred   s   zADeferredGeneratorTests.testDeferredYielding.<locals>._genDeferred)r   r0   	TypeError)r)   rE   r   r   r   testDeferredYielding   s   z+DeferredGeneratorTests.testDeferredYieldingz5twisted.internet.defer.waitForDeferred was deprecatedr   N)r   r   r   r-   r1   r5   r:   r=   rB   rD   rG   r   r	   r   r   r   r   r    5   s    
r    c                   @   s    e Zd ZdZdd Zdd ZdS )DeprecateDeferredGeneratorTestszY
    Tests that L{DeferredGeneratorTests} and L{waitForDeferred} are
    deprecated.
    c                 C   sV   t dd }| | jg}| t|d | |d d t | |d d d dS )	z5
        L{deferredGenerator} is deprecated.
        c                   s   s    d V  d S r3   r   r   r   r   r   decoratedFunction   s   
z[DeprecateDeferredGeneratorTests.test_deferredGeneratorDeprecated.<locals>.decoratedFunctionr.   r   categoryr   ztwisted.internet.defer.deferredGenerator was deprecated in Twisted 15.0.0; please use twisted.internet.defer.inlineCallbacks insteadN)r   flushWarnings test_deferredGeneratorDeprecatedr#   lenDeprecationWarning)r)   rI   warningsr   r   r   rL      s   

z@DeprecateDeferredGeneratorTests.test_deferredGeneratorDeprecatedc                 C   sX   t  }t| | | jg}| t|d | |d d t | |d d d dS )z3
        L{waitForDeferred} is deprecated.
        r.   r   rJ   r   ztwisted.internet.defer.waitForDeferred was deprecated in Twisted 15.0.0; please use twisted.internet.defer.inlineCallbacks insteadN)r   r   rK   test_waitForDeferredDeprecatedr#   rM   rN   )r)   r   rO   r   r   r   rP      s   
z>DeprecateDeferredGeneratorTests.test_waitForDeferredDeprecatedN)r   r   r   __doc__rL   rP   r   r   r   r   rH      s    rH   N)rQ   twisted.internetr   r   twisted.internet.deferr   r   r   twisted.python.utilr   twisted.trialr   twisted.trial.utilr	   r   r   r   	Exceptionr   r   TestCaser    SynchronousTestCaserH   r   r   r   r   <module>   s   
 