def testFuture_Repr(self): f = tasklets.Future() prefix = (r'<Future [\da-f]+ created by ' r'testFuture_Repr\(tasklets_test.py:\d+\) ') self.assertTrue(re.match(prefix + r'pending>$', repr(f)), repr(f)) f.set_result('abc') self.assertTrue(re.match(prefix + r'result \'abc\'>$', repr(f)), repr(f)) f = tasklets.Future() f.set_exception(RuntimeError('abc')) self.assertTrue(re.match(prefix + r'exception RuntimeError: abc>$', repr(f)), repr(f))
def testFuture_AddDoneCallback_SetException(self): f = tasklets.Future() f.add_callback(self.universal_callback, f) f.set_exception(RuntimeError(42)) eventloop.run() self.assertEqual(self.log, [(f, )]) self.assertEqual(f.done(), True)
def testFuture_SetResult_AddDoneCallback(self): f = tasklets.Future() f.set_result(42) self.assertEqual(f.get_result(), 42) f.add_callback(self.universal_callback, f) eventloop.run() self.assertEqual(self.log, [(f, )])
def testFuture_AddDoneCallback_SetResult(self): f = tasklets.Future() f.add_callback(self.universal_callback, f) self.assertEqual(self.log, []) # Nothing happened yet. f.set_result(42) eventloop.run() self.assertEqual(self.log, [(f, )])
def testFuture_Done_State(self): f = tasklets.Future() self.assertFalse(f.done()) self.assertEqual(f.state, f.RUNNING) f.set_result(42) self.assertTrue(f.done()) self.assertEqual(f.state, f.FINISHING)
def testFuture_SetException(self): f = tasklets.Future() err = RuntimeError(42) f.set_exception(err) self.assertEqual(f.done(), True) self.assertEqual(f._exception, err) self.assertEqual(f._result, None) self.assertEqual(f.get_exception(), err) self.assertRaises(RuntimeError, f.get_result)
def add(self, arg): fut = tasklets.Future('%s.add(%s)' % (self, arg)) if not self._todo: # Schedule the callback # We use the fact that regular tasklets are queued at time None, # which puts them at absolute time 0 (i.e. ASAP -- still on a # FIFO basis). Callbacks explicitly scheduled with a delay of 0 # are only run after all immediately runnable tasklets have run. eventloop.queue_call(0, self._autobatcher_callback) self._todo.append((fut, arg)) return fut
def create_futures(self): self.futs = [] for i in range(5): f = tasklets.Future() f.add_callback(self.universal_callback, f) def wake(fut, result): fut.set_result(result) self.ev.queue_call(i*0.01, wake, f, i) self.futs.append(f) return set(self.futs)
def testFuture_SetResult(self): f = tasklets.Future() f.set_result(42) self.assertEqual(f._result, 42) self.assertEqual(f._exception, None) self.assertEqual(f.get_result(), 42)
def testFuture_Constructor(self): f = tasklets.Future() self.assertEqual(f._result, None) self.assertEqual(f._exception, None) self.assertEqual(f._callbacks, [])
def t2(error): if error: raise RuntimeError('hello') else: yield tasklets.Future()