def testDispose(self): class Dispose(object): def __init__(self, depth, log): self.__depth = depth self.__log = log self.__response_count = 0 def start(self, cont): self.__label = cont.state() if self.__depth > 1: cont.call(Dispose(self.__depth - 1, self.__log), 'left') cont.call(Dispose(self.__depth - 1, self.__log), 'right') else: cont.done(None) def resume(self, cont, state, response): self.__response_count += 1 if self.__response_count == 2: cont.done(None) def dispose(self): self.__log.append('Dispose: depth = %d, state = %s' % ( self.__depth, self.__label)) log = [] runner = Runner(Dispose(2, log)) runner.run() self.assertEquals(3, len(log)) self.assertEquals('Dispose: depth = 1, state = right', log[0]) self.assertEquals('Dispose: depth = 1, state = left', log[1]) self.assertEquals('Dispose: depth = 2, state = <init>', log[2])
def testDispose(self): class Dispose(object): def __init__(self, depth, log): self.__depth = depth self.__log = log self.__response_count = 0 def start(self, cont): self.__label = cont.state() if self.__depth > 1: cont.call(Dispose(self.__depth - 1, self.__log), 'left') cont.call(Dispose(self.__depth - 1, self.__log), 'right') else: cont.done(None) def resume(self, cont, state, response): self.__response_count += 1 if self.__response_count == 2: cont.done(None) def dispose(self): self.__log.append('Dispose: depth = %d, state = %s' % (self.__depth, self.__label)) log = [] runner = Runner(Dispose(2, log)) runner.run() self.assertEquals(3, len(log)) self.assertEquals('Dispose: depth = 1, state = right', log[0]) self.assertEquals('Dispose: depth = 1, state = left', log[1]) self.assertEquals('Dispose: depth = 2, state = <init>', log[2])
def testDisponseWithExceptionInResume(self): class DisposeWithException(object): def __init__(self, log): self.__log = log def start(self, cont): cont.call(RaiseException(self.__log), 'child') def resume(self, cont, state, response): pass def dispose(self): self.__log.append('dispose:DisposeWithException') class RaiseException(object): def __init__(self, log): self.__log = log def start(self, cont): cont.call(Child(self.__log), 'child') def resume(self, cont, state, response): raise Exception('This is an exception!') def dispose(self): self.__log.append('dispose:RaiseException') class Child(object): def __init__(self, log): self.__log = log def start(self, cont): cont.done(None) def dispose(self): self.__log.append('dispose:Child') log = [] runner = Runner(DisposeWithException(log)) ok = False try: runner.run() except Exception, e: if e.message != 'This is an exception!': raise else: ok = True
def testDisponsePendingChild(self): class Dispose(object): def __init__(self, log): self.__log = log def start(self, cont): cont.call(Child(self.__log, 'foo'), 'child') cont.call(Child(self.__log, 'bar'), 'child') def resume(self, cont, state, response): cont.done(None) def dispose(self): self.__log.append('dispose:Dispose') class Child(object): def __init__(self, log, name): self.__log = log self.__name = name def start(self, cont): cont.sync_call(IdentityTask(None), '') def resume(self, cont, state, response): log.append('done:Child:' + self.__name) cont.done(response) def dispose(self): self.__log.append('dispose:Child:' + self.__name) log = [] runner = Runner(Dispose(log)) ok = False while not runner.done: runner.run() self.assertEquals(4, len(log)) self.assertEquals('done:Child:foo', log[0]) self.assertEquals('dispose:Child:foo', log[1]) self.assertEquals('dispose:Child:bar', log[2]) self.assertEquals('dispose:Dispose', log[3])
def testDisponseWithMultiChild(self): class DisposeWithException(object): def __init__(self, log): self.__log = log def start(self, cont): cont.call(RaiseException(self.__log, 'foo'), 'child') cont.call(RaiseException(self.__log, 'bar'), 'child') def resume(self, cont, state, response): pass def dispose(self): self.__log.append('dispose:DisposeWithException') class RaiseException(object): def __init__(self, log, name): self.__log = log self.__name = name def start(self, cont): cont.sync_call(IdentityTask(None), '') def resume(self, cont, state, response): raise Exception('Exception:' + self.__name) def dispose(self): self.__log.append('dispose:RaiseException:' + self.__name) log = [] runner = Runner(DisposeWithException(log)) ok = False try: while not runner.done: runner.run() except Exception, e: if e.message != 'Exception:foo' and e.message != 'Exception:bar': raise else: ok = True
def testFib(self): runner = Runner(Fib(10)) runner.run() self.assertTrue(runner.done) self.assertEquals(89, runner.response)