forked from p15670423/monkey
UT: Add tests for PyPubSubIslandEventQueue
This commit is contained in:
parent
71c7a9a533
commit
237f6d01b6
|
@ -0,0 +1,67 @@
|
||||||
|
from typing import Any, Callable
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from pubsub import pub
|
||||||
|
from pubsub.core import Publisher
|
||||||
|
|
||||||
|
from common.event_queue import (
|
||||||
|
IIslandEventQueue,
|
||||||
|
IslandEventSubscriber,
|
||||||
|
IslandEventTopic,
|
||||||
|
PyPubSubIslandEventQueue,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def event_queue() -> IIslandEventQueue:
|
||||||
|
return PyPubSubIslandEventQueue(Publisher())
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def event_queue_subscriber() -> Callable[..., None]:
|
||||||
|
def fn(event, topic=pub.AUTO_TOPIC):
|
||||||
|
fn.call_count += 1
|
||||||
|
fn.call_topics |= {topic.getName()}
|
||||||
|
|
||||||
|
fn.call_count = 0
|
||||||
|
fn.call_topics = set()
|
||||||
|
|
||||||
|
return fn
|
||||||
|
|
||||||
|
|
||||||
|
def test_subscribe_publish(
|
||||||
|
event_queue: IIslandEventQueue, event_queue_subscriber: IslandEventSubscriber
|
||||||
|
):
|
||||||
|
event_queue.subscribe(topic=IslandEventTopic.AGENT_CONNECTED, subscriber=event_queue_subscriber)
|
||||||
|
event_queue.subscribe(
|
||||||
|
topic=IslandEventTopic.CLEAR_SIMULATION_DATA, subscriber=event_queue_subscriber
|
||||||
|
)
|
||||||
|
|
||||||
|
event_queue.publish(topic=IslandEventTopic.AGENT_CONNECTED)
|
||||||
|
event_queue.publish(topic=IslandEventTopic.CLEAR_SIMULATION_DATA)
|
||||||
|
event_queue.publish(topic=IslandEventTopic.RESET_AGENT_CONFIGURATION)
|
||||||
|
|
||||||
|
assert event_queue_subscriber.call_count == 2
|
||||||
|
assert event_queue_subscriber.call_topics == {
|
||||||
|
IslandEventTopic.AGENT_CONNECTED.value,
|
||||||
|
IslandEventTopic.CLEAR_SIMULATION_DATA.value,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_keep_subscriber_in_scope(event_queue: IIslandEventQueue):
|
||||||
|
class MyCallable:
|
||||||
|
called = False
|
||||||
|
|
||||||
|
def __call__(self, event: Any):
|
||||||
|
MyCallable.called = True
|
||||||
|
|
||||||
|
def subscribe():
|
||||||
|
# fn will go out of scope after subscribe() returns.
|
||||||
|
fn = MyCallable()
|
||||||
|
event_queue.subscribe(topic=IslandEventTopic.AGENT_CONNECTED, subscriber=fn)
|
||||||
|
|
||||||
|
subscribe()
|
||||||
|
|
||||||
|
event_queue.publish(topic=IslandEventTopic.AGENT_CONNECTED)
|
||||||
|
|
||||||
|
assert MyCallable.called
|
Loading…
Reference in New Issue