def test_promise_re_set(): p = Promise() p.setValue(42) try: p.setValue(42) except RuntimeError: pass
def test_future_two_callbacks(): result1 = Promise() result2 = Promise() def callback1(f): global called1 called1 = "1" result1.setValue("bim") def callback2(f): global called2 called2 = "2" result2.setValue("bim") p = Promise() f = p.future() f.addCallback(callback1) f.addCallback(callback2) p.setValue(42) result1.future().wait(1000) result2.future().wait(1000) assert result1.future().hasValue(0) assert result2.future().hasValue(0) assert called1 == "1" assert called2 == "2"
def test_many_futures_create(): def wait(p): time.sleep(1) p = Promise(wait) fs = [p.future() for _ in range(100)] p.setValue(1337) for f in fs: assert f.hasValue() assert f.value() == 1337
def test_future_exception(): p = Promise() f = p.future() def raising(f): raise Exception("oops") f.addCallback(raising) p.setValue(42)
def test_future_many_callback(nbr_fut = 10000): def callback(f): pass for _ in range(nbr_fut): p = Promise() f = p.future() f.addCallback(callback) p.setValue(0)
def test_future_callback_noargs(): def callback(): pass p = Promise() f = p.future() f.addCallback(callback) p.setValue("segv?") assert not f.isCanceled() assert f.isFinished()
def test_future_andthen(): def callback(v): assert v == 1337 return 4242 p = Promise() f = p.future() f2 = f.andThen(callback) p.setValue(1337) f2.wait(1000) assert f2.isFinished() assert f2.value() == 4242
def test_future_then_throw(): def callback(f): assert f.isRunning() is False assert f.value() == 1337 raise RuntimeError("lol") p = Promise() f = p.future() f2 = f.then(callback) p.setValue(1337) f2.wait(1000) assert f2.isFinished() assert f2.error().endswith("RuntimeError: lol\n")
def test_future_then(): def callback(f): assert f.isRunning() is False assert f.value() == 1337 return 4242 p = Promise() f = p.future() f2 = f.then(callback) p.setValue(1337) f2.wait(1000) assert f2.isFinished() assert f2.value() == 4242
def test_future_unwrap_cancel(): prom = Promise() future = prom.future().unwrap() future.cancel() assert prom.isCancelRequested() nested = Promise() prom.setValue(nested.future()) # TODO add some sync-ness to remove those time.sleep :( time.sleep(0.1) assert nested.isCancelRequested() nested.setCanceled() time.sleep(0.1) assert future.isCanceled()
def test_many_futures_wait_cancel(): def cancel(p): try: p.setValue("Kappa") except: pass #ok: cancel called many times waiter = Promise(); ps = [Promise(cancel) for _ in range(50)] fs = [p.future() for p in ps] for p in ps: threading.Thread(target=waiterSetValue, args=[p, waiter.future()]).start() # Cancel only one future fs[25].cancel() waiter.setValue(None) for i, f in enumerate(fs): if i == 25: assert f.value() == "Kappa" else: assert f.value() == "mjolk"
def test_future_callback(): result = Promise() def callback(f): global called assert f.isRunning() is False assert f.value() == 1337 assert called is False called = "aight" result.setValue("bim") p = Promise() f = p.future() f.addCallback(callback) p.setValue(1337) result.future().wait(1000) assert result.future().hasValue(0) assert called == "aight" assert not f.isCanceled() assert f.isFinished()
def test_future_unwrap_notfuture(): prom = Promise() future = prom.future().unwrap() prom.setValue(42) assert future.hasError()
def test_future_unwrap(): prom = Promise() future = prom.future().unwrap() prom.setValue(Future(42)) assert future.value() == 42