summaryrefslogtreecommitdiff
path: root/t/unit/asynchronous/test_hub.py
diff options
context:
space:
mode:
Diffstat (limited to 't/unit/asynchronous/test_hub.py')
-rw-r--r--t/unit/asynchronous/test_hub.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/t/unit/asynchronous/test_hub.py b/t/unit/asynchronous/test_hub.py
index eae25357..27b048b9 100644
--- a/t/unit/asynchronous/test_hub.py
+++ b/t/unit/asynchronous/test_hub.py
@@ -1,5 +1,7 @@
+from __future__ import annotations
+
import errno
-from unittest.mock import Mock, call, patch
+from unittest.mock import ANY, Mock, call, patch
import pytest
from vine import promise
@@ -187,6 +189,12 @@ class test_Hub:
assert promise() in self.hub._ready
assert ret is promise()
+ def test_call_soon_uses_lock(self):
+ callback = Mock(name='callback')
+ with patch.object(self.hub, '_ready_lock', autospec=True) as lock:
+ self.hub.call_soon(callback)
+ assert lock.__enter__.called_once()
+
def test_call_soon__promise_argument(self):
callback = promise(Mock(name='callback'), (1, 2, 3))
ret = self.hub.call_soon(callback)
@@ -533,3 +541,31 @@ class test_Hub:
callbacks[0].assert_called_once_with()
callbacks[1].assert_called_once_with()
deferred.assert_not_called()
+
+ def test_loop__no_todo_tick_delay(self):
+ cb = Mock(name='parent')
+ cb.todo, cb.tick, cb.poller = Mock(), Mock(), Mock()
+ cb.poller.poll.side_effect = lambda obj: ()
+ self.hub.poller = cb.poller
+ self.hub.add(2, Mock(), READ)
+ self.hub.call_soon(cb.todo)
+ self.hub.on_tick = [cb.tick]
+
+ next(self.hub.loop)
+
+ cb.assert_has_calls([
+ call.todo(),
+ call.tick(),
+ call.poller.poll(ANY),
+ ])
+
+ def test__pop_ready_pops_ready_items(self):
+ self.hub._ready.add(None)
+ ret = self.hub._pop_ready()
+ assert ret == {None}
+ assert self.hub._ready == set()
+
+ def test__pop_ready_uses_lock(self):
+ with patch.object(self.hub, '_ready_lock', autospec=True) as lock:
+ self.hub._pop_ready()
+ assert lock.__enter__.called_once()