git reimport
This commit is contained in:
0
tests/zvk/event/__init__.py
Normal file
0
tests/zvk/event/__init__.py
Normal file
28
tests/zvk/event/test_async_gen.py
Normal file
28
tests/zvk/event/test_async_gen.py
Normal file
@@ -0,0 +1,28 @@
|
||||
import pytest
|
||||
|
||||
from zvk.util.zlogging import logger
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_async_gen():
|
||||
async def f1():
|
||||
logger.info('hi 1')
|
||||
|
||||
async def f2():
|
||||
logger.info('hi 2')
|
||||
yield 1
|
||||
|
||||
async def f3():
|
||||
logger.info('hi 3')
|
||||
if False:
|
||||
yield 1
|
||||
|
||||
with pytest.raises(Exception):
|
||||
async for i in f1():
|
||||
assert i == 1
|
||||
|
||||
async for i in f2():
|
||||
assert i == 1
|
||||
|
||||
async for i in f3():
|
||||
assert i == 1
|
74
tests/zvk/event/test_event.py
Normal file
74
tests/zvk/event/test_event.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import pytest
|
||||
|
||||
from zvk.event.consumer import event_consumer
|
||||
from zvk.event.event import Event
|
||||
from zvk.event.queue import EventQueue
|
||||
from zvk.util.zlogging import logger
|
||||
|
||||
|
||||
@event_consumer(consumes=['event1'])
|
||||
async def consumer_simple(counter):
|
||||
logger.debug('simple_consumer')
|
||||
counter[0] += 1
|
||||
|
||||
|
||||
@event_consumer(consumes=['event1'])
|
||||
async def consumer_defaults(counter, default_inc=1):
|
||||
logger.debug('simple_consumer_with_defaults')
|
||||
counter[0] += default_inc
|
||||
|
||||
|
||||
@event_consumer(consumes=['event1'])
|
||||
async def consumer_defaults_overridden(counter, inc=100):
|
||||
logger.debug('simple_consumer_with_overridden_defaults')
|
||||
counter[0] += inc
|
||||
|
||||
|
||||
@event_consumer(consumes=['event1'])
|
||||
async def consumer_producer(counter):
|
||||
logger.debug('consumer_producer')
|
||||
counter[0] += 1
|
||||
yield Event('event2')
|
||||
|
||||
|
||||
@event_consumer(consumes=['event2'])
|
||||
async def consumer_new_event(counter):
|
||||
logger.debug('another_simple_consumer')
|
||||
counter[0] += 1
|
||||
|
||||
yield Event('event3', new_inc=1)
|
||||
|
||||
|
||||
@event_consumer(consumes=['event3'])
|
||||
async def consumer_finisher(counter, new_inc):
|
||||
logger.debug('finisher')
|
||||
counter[0] += new_inc
|
||||
|
||||
# await event_queue.omae_wa_mou_shindeiru()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_queue():
|
||||
event_queue = EventQueue()
|
||||
|
||||
counter = [0]
|
||||
|
||||
event_queue.register_consumer(consumer_simple)
|
||||
event_queue.register_consumer(consumer_defaults)
|
||||
event_queue.register_consumer(consumer_defaults_overridden)
|
||||
event_queue.register_consumer(consumer_producer)
|
||||
event_queue.register_consumer(consumer_new_event)
|
||||
event_queue.register_consumer(consumer_finisher)
|
||||
|
||||
starting_events = [Event('event1', counter=counter, inc=1)]
|
||||
|
||||
await event_queue.run(starting_events)
|
||||
assert counter[0] == 6
|
||||
|
||||
await event_queue.run(starting_events)
|
||||
await event_queue.run(starting_events)
|
||||
assert counter[0] == 18
|
||||
|
||||
event_queue.deregister_consumer(consumer_producer)
|
||||
await event_queue.run(starting_events)
|
||||
assert counter[0] == 21
|
35
tests/zvk/event/test_event_loop.py
Normal file
35
tests/zvk/event/test_event_loop.py
Normal file
@@ -0,0 +1,35 @@
|
||||
import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
from zvk.event.consumer import event_consumer
|
||||
from zvk.event.event import Event
|
||||
from zvk.event.queue import EventQueue
|
||||
|
||||
|
||||
@event_consumer(consumes=['event_loop'])
|
||||
async def consumer_loop(event, counter):
|
||||
counter[0] += 1
|
||||
await asyncio.sleep(0.1)
|
||||
|
||||
yield event
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_event_cancellation():
|
||||
event_queue = EventQueue()
|
||||
|
||||
counter = [0]
|
||||
|
||||
event_queue.register_consumer(consumer_loop)
|
||||
|
||||
starting_events = [Event('event_loop', counter=counter)]
|
||||
|
||||
queue_task = asyncio.create_task(event_queue.run(starting_events))
|
||||
|
||||
await asyncio.sleep(0.25)
|
||||
|
||||
event_queue.omae_wa_mou_shindeiru()
|
||||
await queue_task
|
||||
|
||||
assert counter[0] == 3
|
36
tests/zvk/event/test_periodic.py
Normal file
36
tests/zvk/event/test_periodic.py
Normal file
@@ -0,0 +1,36 @@
|
||||
import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
from zvk.bot.event_type import BotEventType
|
||||
from zvk.event.event import Event
|
||||
from zvk.event.periodic import periodic
|
||||
from zvk.event.queue import EventQueue
|
||||
from zvk.util.zlogging import logger
|
||||
|
||||
|
||||
@periodic(period_secs=0.1)
|
||||
async def periodic_f(counter):
|
||||
counter[0] += 1
|
||||
logger.debug('tick')
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_periodic():
|
||||
event_queue = EventQueue()
|
||||
event_queue.register_consumer(periodic_f)
|
||||
|
||||
counter = [0]
|
||||
|
||||
starting_events = [Event(BotEventType.STARTUP, counter=counter)]
|
||||
|
||||
queue_task = asyncio.create_task(event_queue.run(starting_events))
|
||||
|
||||
await asyncio.sleep(0.45)
|
||||
assert counter[0] == 5
|
||||
|
||||
event_queue.omae_wa_mou_shindeiru()
|
||||
|
||||
assert counter[0] == 5
|
||||
|
||||
await queue_task
|
39
tests/zvk/event/test_reflection.py
Normal file
39
tests/zvk/event/test_reflection.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import pytest
|
||||
|
||||
from zvk.event.reflection import run_with_env
|
||||
|
||||
|
||||
def test_reflection():
|
||||
calls = 0
|
||||
|
||||
def no_args():
|
||||
nonlocal calls
|
||||
calls += 1
|
||||
|
||||
run_with_env(None, no_args)
|
||||
assert calls == 1
|
||||
|
||||
def some_args(a, b=1):
|
||||
nonlocal calls
|
||||
calls += 1
|
||||
|
||||
assert a == 1
|
||||
assert b == 2
|
||||
|
||||
run_with_env(dict(a=1, b=2), some_args)
|
||||
assert calls == 2
|
||||
|
||||
def default_check(a, b=1):
|
||||
nonlocal calls
|
||||
calls += 1
|
||||
|
||||
assert a == 1
|
||||
assert b == 1
|
||||
|
||||
run_with_env(dict(a=1), default_check)
|
||||
assert calls == 3
|
||||
|
||||
with pytest.raises(TypeError):
|
||||
run_with_env(None, default_check)
|
||||
|
||||
assert calls == 3
|
51
tests/zvk/event/test_registration.py
Normal file
51
tests/zvk/event/test_registration.py
Normal file
@@ -0,0 +1,51 @@
|
||||
import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
from zvk.bot.event_type import BotEventType
|
||||
from zvk.event.consumer import event_consumer
|
||||
from zvk.event.event import Event
|
||||
from zvk.event.periodic import periodic
|
||||
from zvk.event.queue import EventQueue
|
||||
|
||||
|
||||
@periodic(period_secs=0.1)
|
||||
async def loop1():
|
||||
yield Event('inc')
|
||||
|
||||
|
||||
@periodic(period_secs=0.1)
|
||||
async def loop2():
|
||||
yield Event('inc')
|
||||
|
||||
|
||||
@event_consumer(consumes=['inc'])
|
||||
async def inc(counter):
|
||||
counter[0] += 1
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_event_cancellation():
|
||||
event_queue = EventQueue()
|
||||
|
||||
counter = [0]
|
||||
|
||||
event_queue.register_consumer(loop1)
|
||||
event_queue.register_consumer(loop2)
|
||||
event_queue.register_consumer(inc)
|
||||
|
||||
starting_events = [Event(BotEventType.STARTUP, counter=counter)]
|
||||
|
||||
queue_task = asyncio.create_task(event_queue.run(starting_events))
|
||||
|
||||
await asyncio.sleep(0.15)
|
||||
assert counter[0] == 4
|
||||
|
||||
event_queue.deregister_consumer(loop2)
|
||||
await asyncio.sleep(0.2)
|
||||
assert counter[0] == 6
|
||||
|
||||
event_queue.omae_wa_mou_shindeiru()
|
||||
await queue_task
|
||||
|
||||
assert counter[0] == 6
|
Reference in New Issue
Block a user