def test_future_raise_now(): fut = Future() events = [] corocc.start(raise_now(events.append), future=fut) assert events == [1] assert fut.done() with pytest.raises(ZeroDivisionError): fut.result()
def test_future_result_later(): fut = Future() cont_store = [] corocc.start(result_later(cont_store.append), future=fut) assert not fut.done() cont_store[0]() assert fut.done() assert fut.result() == 42
def test_thread(): events = [] corocc.start(thread_coro(events.append)) assert len(events) == 1 assert events[0][0] == 'a' time.sleep(.05) assert [x for (x, _y) in events] == ['a', 'b', 'c'] assert len(set(y for (_x, y) in events)) == 3
def _block(coro): # utility function shared by several tests: start the coroutine, # block until it's done, and return the future containing its # result future = Future() corocc.start(coro, future=future) concurrent.futures.wait([future]) return future
def test_nested_unfinished(): events = [] cont_store = [] corocc.start(outer2(events.append, cont_store.append)) assert events == ['o 1', 'i 1', 'i 2'] cont, = cont_store cont() assert events == ['o 1', 'i 1', 'i 2', 'i 3', 'o 2']
def test_unfinished(): events = [] cont_store = [] corocc.start(unfinished_coro(events.append, cont_store.append)) assert events == [1, 2, 3, 4] cont, = cont_store cont() assert events == [1, 2, 3, 4, 5]
def test_raise_later(): events = [] cont_store = [] corocc.start(raise_later(events.append, cont_store.append)) assert events == [1] cont, = cont_store with pytest.raises(ZeroDivisionError): cont() assert events == [1, 2]
def test_future_wait(): fut = Future() events = [] corocc.start(future_finish_later(events.append), future=fut) assert not fut.done() assert events == [1] concurrent.futures.wait([fut]) assert events == [1, 2] assert fut.result() == 42
def test_unfinished(): events = [] cont_store = [] corocc.start(unfinished_coro(events.append, cont_store.append)) assert events == [1, 2] cont, = cont_store assert not hasattr(cont, 'result') cont(3) assert events == [1, 2, 3] assert cont.result == 3
def test_cont_again(): events = [] cont_store = [] corocc.start(cont_again_coro(events.append, cont_store.append)) assert events == [1, 2, 3] cont, = cont_store cont() assert events == [1, 2, 3, 4] with pytest.raises(RuntimeError): cont() assert events == [1, 2, 3, 4]
def test_send_exc(): events = [] cont_store = [] corocc.start(send_exc_coro(events.append, cont_store.append)) assert events == [1, 2] cont = cont_store.pop() cont.throw(ZeroDivisionError()) assert events == [1, 2, 4, 7] cont = cont_store.pop() cont() assert events == [1, 2, 4, 7, 8]
def test_future_raise_later(): fut = Future() events = [] cont_store = [] corocc.start(raise_later(events.append, cont_store.append), future=fut) assert not fut.done() assert events == [1] cont_store[0]() assert events == [1, 2] assert fut.done() with pytest.raises(ZeroDivisionError): fut.result()
def test_raise_now(): events = [] with pytest.raises(ZeroDivisionError): corocc.start(raise_now(events.append)) assert events == [1]
def test_null(): events = [] corocc.start(null_coro(events.append)) assert events == [1]
def test_nested(): events = [] corocc.start(outer(events.append)) assert events == ['o 1', 'o 2', 'o 3', 'i 1', 'i 2', 'i 3', 'o 4']
def test_simple(): events = [] corocc.start(simple_coro(events.append)) assert events == [1, 2, 'retval']
def test_future_result_now(): fut = Future() assert not fut.done() corocc.start(result_now(), future=fut) assert fut.done() assert fut.result() == 42
def test_different_cont_again(): events = [] with pytest.raises(RuntimeError): corocc.start(different_cont_again_coro(events.append)) assert events == [1, 2, 3]
def test_nested_suspending(): events = [] with pytest.raises(RuntimeError): corocc.start(nested_suspending(events.append)) assert events == [1, 2]
def test_cont_now(): events = [] corocc.start(cont_now(events.append)) assert events == [1, 2, 3, 4]