summaryrefslogtreecommitdiff
path: root/tests/test_signals.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_signals.py')
-rw-r--r--tests/test_signals.py36
1 files changed, 35 insertions, 1 deletions
diff --git a/tests/test_signals.py b/tests/test_signals.py
index e6142fb..e4fc24d 100644
--- a/tests/test_signals.py
+++ b/tests/test_signals.py
@@ -180,6 +180,40 @@ def test_signal_signals_weak_sender():
assert len(sentinel) == 1
+def test_memory_leaks():
+ sentinel = Sentinel()
+ sig = blinker.Signal()
+ receiver1 = sentinel.make_receiver('receiver1')
+ receiver2 = sentinel.make_receiver('receiver2')
+
+ class Sender(object):
+ """A weakref-able object."""
+
+ sender = Sender()
+ sig.connect(receiver1, sender=sender)
+ sig.connect(receiver2, sender=sender)
+
+ assert len(sig._by_sender) == 1
+ assert len(sig._by_receiver) == 2
+ receivers_bucket = list(sig._by_sender.values())[0]
+ assert len(receivers_bucket) == 2
+ senders_buckets = list(sig._by_receiver.values())
+ assert len(senders_buckets[0]) == 1
+ assert len(senders_buckets[1]) == 1
+
+ sig.disconnect(receiver1, sender=sender)
+ assert len(sig._by_sender) == 1
+ assert len(sig._by_receiver) == 1
+ receivers_bucket = list(sig._by_sender.values())[0]
+ assert len(receivers_bucket) == 1
+ senders_bucket = list(sig._by_receiver.values())[0]
+ assert len(senders_bucket) == 1
+
+ sig.disconnect(receiver2, sender=sender)
+ assert len(sig._by_sender) == 0
+ assert len(sig._by_receiver) == 0
+
+
def test_meta_connect_failure():
def meta_received(sender, **kw):
raise TypeError('boom')
@@ -194,7 +228,7 @@ def test_meta_connect_failure():
assert_raises(TypeError, sig.connect, receiver)
assert not sig.receivers
assert not sig._by_receiver
- assert sig._by_sender == {blinker.base.ANY_ID: set()}
+ assert not sig._by_sender
blinker.receiver_connected._clear_state()