import pytest
|
|
from ... import _core
|
|
|
# scary runvar tests
|
def test_runvar_smoketest():
|
t1 = _core.RunVar("test1")
|
t2 = _core.RunVar("test2", default="catfish")
|
|
assert "RunVar" in repr(t1)
|
|
async def first_check():
|
with pytest.raises(LookupError):
|
t1.get()
|
|
t1.set("swordfish")
|
assert t1.get() == "swordfish"
|
assert t2.get() == "catfish"
|
assert t2.get(default="eel") == "eel"
|
|
t2.set("goldfish")
|
assert t2.get() == "goldfish"
|
assert t2.get(default="tuna") == "goldfish"
|
|
async def second_check():
|
with pytest.raises(LookupError):
|
t1.get()
|
|
assert t2.get() == "catfish"
|
|
_core.run(first_check)
|
_core.run(second_check)
|
|
|
def test_runvar_resetting():
|
t1 = _core.RunVar("test1")
|
t2 = _core.RunVar("test2", default="dogfish")
|
t3 = _core.RunVar("test3")
|
|
async def reset_check():
|
token = t1.set("moonfish")
|
assert t1.get() == "moonfish"
|
t1.reset(token)
|
|
with pytest.raises(TypeError):
|
t1.reset(None)
|
|
with pytest.raises(LookupError):
|
t1.get()
|
|
token2 = t2.set("catdogfish")
|
assert t2.get() == "catdogfish"
|
t2.reset(token2)
|
assert t2.get() == "dogfish"
|
|
with pytest.raises(ValueError):
|
t2.reset(token2)
|
|
token3 = t3.set("basculin")
|
assert t3.get() == "basculin"
|
|
with pytest.raises(ValueError):
|
t1.reset(token3)
|
|
_core.run(reset_check)
|
|
|
def test_runvar_sync():
|
t1 = _core.RunVar("test1")
|
|
async def sync_check():
|
async def task1():
|
t1.set("plaice")
|
assert t1.get() == "plaice"
|
|
async def task2(tok):
|
t1.reset(token)
|
|
with pytest.raises(LookupError):
|
t1.get()
|
|
t1.set("cod")
|
|
async with _core.open_nursery() as n:
|
token = t1.set("cod")
|
assert t1.get() == "cod"
|
|
n.start_soon(task1)
|
await _core.wait_all_tasks_blocked()
|
assert t1.get() == "plaice"
|
|
n.start_soon(task2, token)
|
await _core.wait_all_tasks_blocked()
|
assert t1.get() == "cod"
|
|
_core.run(sync_check)
|
|
|
def test_accessing_runvar_outside_run_call_fails():
|
t1 = _core.RunVar("test1")
|
|
with pytest.raises(RuntimeError):
|
t1.set("asdf")
|
|
with pytest.raises(RuntimeError):
|
t1.get()
|
|
async def get_token():
|
return t1.set("ok")
|
|
token = _core.run(get_token)
|
|
with pytest.raises(RuntimeError):
|
t1.reset(token)
|