diff options
author | Simon Charette <charette.s@gmail.com> | 2013-08-19 23:14:21 -0400 |
---|---|---|
committer | Simon Charette <charette.s@gmail.com> | 2013-08-20 01:53:58 -0400 |
commit | e55ca60903adcfd525938335b1ad9dbb6fd96c3e (patch) | |
tree | f501f11becc8c0c1bf7fdd56d4f270c3e0d336fd /tests/dispatch | |
parent | fdbf492946a030bdf394aae8896bbad9a446e0fd (diff) | |
download | django-e55ca60903adcfd525938335b1ad9dbb6fd96c3e.tar.gz |
Fixed #20943 -- Weakly reference senders when caching their associated receivers
Diffstat (limited to 'tests/dispatch')
-rw-r--r-- | tests/dispatch/tests/test_dispatcher.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/dispatch/tests/test_dispatcher.py b/tests/dispatch/tests/test_dispatcher.py index 5f7dca87cc..e25f60b0c7 100644 --- a/tests/dispatch/tests/test_dispatcher.py +++ b/tests/dispatch/tests/test_dispatcher.py @@ -2,6 +2,7 @@ import gc import sys import time import unittest +import weakref from django.dispatch import Signal, receiver @@ -35,6 +36,8 @@ class Callable(object): a_signal = Signal(providing_args=["val"]) b_signal = Signal(providing_args=["val"]) c_signal = Signal(providing_args=["val"]) +d_signal = Signal(providing_args=["val"], use_caching=True) + class DispatcherTests(unittest.TestCase): """Test suite for dispatcher (barely started)""" @@ -72,6 +75,24 @@ class DispatcherTests(unittest.TestCase): self.assertEqual(result, expected) self._testIsClean(a_signal) + def testCachedGarbagedCollected(self): + """ + Make sure signal caching sender receivers don't prevent garbage + collection of senders. + """ + class sender: + pass + wref = weakref.ref(sender) + d_signal.connect(receiver_1_arg) + d_signal.send(sender, val='garbage') + del sender + garbage_collect() + try: + self.assertIsNone(wref()) + finally: + # Disconnect after reference check since it flushes the tested cache. + d_signal.disconnect(receiver_1_arg) + def testMultipleRegistration(self): a = Callable() a_signal.connect(a) |