git reimport

This commit is contained in:
2019-03-15 15:02:19 +04:00
commit 742797309a
90 changed files with 4411 additions and 0 deletions

View File

View 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

View 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

View 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

View 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

View 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

View 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