def test_continue_with_with_resolved_future(self): f1 = Future() f2 = Future() f3 = f1.continue_with(lambda _: f2) f1.set_result(0) f2.set_result(1) self.assertEqual(1, f3.result())
def test_continue_with_with_rejected_future(self): f1 = Future() f2 = Future() f3 = f1.continue_with(lambda _: f2) f1.set_result(0) f2.set_exception(RuntimeError("error")) with self.assertRaises(RuntimeError): f3.result()
def test_continue_with_on_success(self): f = Future() f.set_result(1) def continuation(future): return future.result() + 1 result = f.continue_with(continuation).result() self.assertEqual(2, result)
def test_continue_with_future_returning_future(self): f1 = Future() f2 = Future() f3 = Future() f4 = f1.continue_with(lambda _: f2) f1.set_result(0) f2.set_result(f3) f3.set_result(1) self.assertEqual(1, f4.result())
def test_continue_with_throws_exception(self): f = Future() e = RuntimeError("error") def continue_func(_): raise e n = f.continue_with(continue_func) f.set_result("done") self.assertFalse(n.is_success()) self.assertEqual(n.exception(), e)
def test_continue_with_on_failure(self): f = Future() f.set_exception(RuntimeError("error")) def continuation(future): if future.is_success(): return 0 else: return 1 result = f.continue_with(continuation).result() self.assertEqual(1, result)
def test_continue_with_throws_exception(self): f = Future() e = RuntimeError("error") def continue_func(f): raise e n = f.continue_with(continue_func) f.set_result("done") self.assertFalse(n.is_success()) self.assertEqual(n.exception(), e)