52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
import asyncio
|
|
import unittest
|
|
from unittest.mock import MagicMock
|
|
|
|
from hippolyzer.lib.base.events import Event
|
|
|
|
|
|
class TestEvents(unittest.IsolatedAsyncioTestCase):
|
|
async def asyncSetUp(self):
|
|
self.event = Event()
|
|
|
|
async def test_trigger_sync(self):
|
|
mock = MagicMock(return_value=False)
|
|
self.event.subscribe(mock)
|
|
self.event.notify("foo")
|
|
mock.assert_called_with("foo")
|
|
self.assertIn(mock, [x[0] for x in self.event.subscribers])
|
|
|
|
async def test_trigger_sync_unsub(self):
|
|
mock = MagicMock(return_value=True)
|
|
self.event.subscribe(mock)
|
|
self.event.notify("foo")
|
|
mock.assert_called_with("foo")
|
|
self.assertNotIn(mock, [x[0] for x in self.event.subscribers])
|
|
|
|
async def test_trigger_async(self):
|
|
called = asyncio.Event()
|
|
mock = MagicMock()
|
|
|
|
async def _mock_wrapper(*args, **kwargs):
|
|
called.set()
|
|
mock(*args, **kwargs)
|
|
self.event.subscribe(_mock_wrapper)
|
|
self.event.notify("foo")
|
|
await called.wait()
|
|
mock.assert_called_with("foo")
|
|
self.assertIn(_mock_wrapper, [x[0] for x in self.event.subscribers])
|
|
|
|
async def test_trigger_async_unsub(self):
|
|
called = asyncio.Event()
|
|
mock = MagicMock()
|
|
|
|
async def _mock_wrapper(*args, **kwargs):
|
|
called.set()
|
|
mock(*args, **kwargs)
|
|
return True
|
|
self.event.subscribe(_mock_wrapper)
|
|
self.event.notify("foo")
|
|
await called.wait()
|
|
mock.assert_called_with("foo")
|
|
self.assertNotIn(_mock_wrapper, [x[0] for x in self.event.subscribers])
|