Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/dist-packages/twisted/test/
Upload File :
Current File : //usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyc

ó
ê=Nc@sddlmZmZddlZddlmZddlmZddlm	Z	m
Z
mZddlmZd„Z
d„Zd	efd
„ƒYZddd„ƒYZd
eejfd„ƒYZdZejdkråedUndejfd„ƒYZdS(iÿÿÿÿ(t
generatorst
nested_scopesN(treactor(tunittest(twaitForDeferredtdeferredGeneratortDeferred(tdefercCs#tƒ}tjd|jdƒ|S(Nithi(RRt	callLatertcallback(td((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pytgetThings	cs,tƒ‰‡fd†}tjd|ƒˆS(NcsˆjtdƒƒdS(NtOMG(terrbacktZeroDivisionError((R(s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pytCRAPsi(RRR	(R((Rs</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pytgetOwies	tTerminalExceptioncBseZRS((t__name__t
__module__(((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyRstBaseDefgenTestscBsMeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z	RS(s
    This class sets up a bunch of test cases which will test both
    deferredGenerator and inlineCallbacks based generators. The subclasses
    DeferredGeneratorTests and InlineCallbacksTests each provide the actual
    generator implementations tested.
    cCs|jƒj|jdƒS(sÅ
        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.
        tWOOSH(t
_genBasicstaddCallbacktassertEqual(tself((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyt
testBasics&scCs|j|jƒtƒS(sp
        Ensure that a buggy generator properly signals a Failure
        condition on result deferred.
        (t
assertFailuret	_genBuggyR(R((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyt	testBuggy/scCs|jƒj|jdƒS(s9Test that a generator which never yields results in None.N(t_genNothingRRtNone(R((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyttestNothing6scCs|jƒj|jdƒS(sÍ
        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.
        N(t_genHandledTerminalFailureRRR (R((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyttestHandledTerminalFailure;scCsAtjƒ}|j|ƒ}|jtdƒƒ|j|jdƒS(s~
        Just like testHandledTerminalFailure, only with a Deferred which fires
        asynchronously with an error.
        sHandled Terminal FailureN(RRt_genHandledTerminalAsyncFailureRRRRR (RRtdeferredGeneratorResultDeferred((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyttestHandledTerminalAsyncFailureCs
cCs|jƒj|jdƒS(sj
        Make sure we don't blow the stack when yielding immediately
        available deferreds.
        i(t_genStackUsageRR(R((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyttestStackUsageNscCs|jƒj|jdƒS(sg
        Make sure we don't blow the stack when yielding immediately
        available values.
        i(t_genStackUsage2RR(R((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyttestStackUsage2Us(
RRt__doc__RRR!R#R&R(R*(((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyRs							tDeferredGeneratorTestscBs¤eZd„ZeeƒZd„ZeeƒZd„ZeeƒZd„ZeeƒZd„ZeeƒZd„ZeeƒZd„Z	ee	ƒZ	d„Z
RS(ccs‡ttƒƒ}|V|jƒ}|j|dƒttƒƒ}|Vy|jƒWn)tk
r}}|jt|ƒdƒnXdVdS(NRR
R(RRt	getResultRRRtstr(Rtxtowte((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyRbsccsttƒƒVdddS(Nii(RR(R((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyRtsccsdS(N((R((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyRzsccsFttjtdƒƒƒ}|Vy|jƒWntk
rAnXdS(NsHandled Terminal Failure(RRtfailRR-(RR/((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyR"~s
ccs7t|ƒ}|Vy|jƒWntk
r2nXdS(N(RR-R(RRR/((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyR$ˆs
ccsFx:tdƒD],}ttjdƒƒ}|V|jƒ}q
WdVdS(Niˆii(trangeRRtsucceedR-(RR/((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyR'’s
ccs%xtdƒD]}dVq
WdVdS(Niˆii(R3(RR/((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyR)›s	cCs(d„}t|ƒ}|j|ƒtƒS(sZ
        Ensure that yielding a Deferred directly is trapped as an
        error.
        csstƒVdS(N(R(((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyt_genDeferredªs(RRt	TypeError(RR5((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyttestDeferredYielding¤s	(RRRRRRR"R$R'R)R7(((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyR,_s							s

from twisted.internet.defer import inlineCallbacks, returnValue

class InlineCallbacksTests(BaseDefgenTests, unittest.TestCase):
    # First provide all the generator impls necessary for BaseDefgenTests

    def _genBasics(self):

        x = yield getThing()

        self.assertEqual(x, "hi")

        try:
            ow = yield getOwie()
        except ZeroDivisionError, e:
            self.assertEqual(str(e), 'OMG')
        returnValue("WOOSH")
    _genBasics = inlineCallbacks(_genBasics)

    def _genBuggy(self):
        yield getThing()
        1/0
    _genBuggy = inlineCallbacks(_genBuggy)


    def _genNothing(self):
        if 0: yield 1
    _genNothing = inlineCallbacks(_genNothing)


    def _genHandledTerminalFailure(self):
        try:
            x = yield defer.fail(TerminalException("Handled Terminal Failure"))
        except TerminalException:
            pass
    _genHandledTerminalFailure = inlineCallbacks(_genHandledTerminalFailure)


    def _genHandledTerminalAsyncFailure(self, d):
        try:
            x = yield d
        except TerminalException:
            pass
    _genHandledTerminalAsyncFailure = inlineCallbacks(
        _genHandledTerminalAsyncFailure)


    def _genStackUsage(self):
        for x in range(5000):
            # Test with yielding a deferred
            x = yield defer.succeed(1)
        returnValue(0)
    _genStackUsage = inlineCallbacks(_genStackUsage)

    def _genStackUsage2(self):
        for x in range(5000):
            # Test with yielding a random value
            yield 1
        returnValue(0)
    _genStackUsage2 = inlineCallbacks(_genStackUsage2)

    # Tests unique to inlineCallbacks

    def testYieldNonDeferrred(self):
        """
        Ensure that yielding a non-deferred passes it back as the
        result of the yield expression.
        """
        def _test():
            x = yield 5
            returnValue(5)
        _test = inlineCallbacks(_test)

        return _test().addCallback(self.assertEqual, 5)

    def testReturnNoValue(self):
        """Ensure a standard python return results in a None result."""
        def _noReturn():
            yield 5
            return
        _noReturn = inlineCallbacks(_noReturn)

        return _noReturn().addCallback(self.assertEqual, None)

    def testReturnValue(self):
        """Ensure that returnValue works."""
        def _return():
            yield 5
            returnValue(6)
        _return = inlineCallbacks(_return)

        return _return().addCallback(self.assertEqual, 6)


    def test_nonGeneratorReturn(self):
        """
        Ensure that C{TypeError} with a message about L{inlineCallbacks} is
        raised when a non-generator returns something other than a generator.
        """
        def _noYield():
            return 5
        _noYield = inlineCallbacks(_noYield)

        self.assertIn("inlineCallbacks",
            str(self.assertRaises(TypeError, _noYield)))


    def test_nonGeneratorReturnValue(self):
        """
        Ensure that C{TypeError} with a message about L{inlineCallbacks} is
        raised when a non-generator calls L{returnValue}.
        """
        def _noYield():
            returnValue(5)
        _noYield = inlineCallbacks(_noYield)

        self.assertIn("inlineCallbacks",
            str(self.assertRaises(TypeError, _noYield)))

iitInlineCallbacksTestscBseZdZd„ZRS(s)defer.defgen doesn't run on python < 2.5.cCsdS(N((R((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyttest_everything4s(RRtskipR9(((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyR82s((ii(t
__future__RRtsysttwisted.internetRt
twisted.trialRttwisted.internet.deferRRRRRRt	ExceptionRRtTestCaseR,tinlineCallbacksTestsSourcetversion_infoR8(((s</usr/lib/python2.7/dist-packages/twisted/test/test_defgen.pyt<module>s		
AÌ