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 02:12:50 -0400 |
| commit | f0bc2865ff9d85c952fa86ae19aee062a5e883cd (patch) | |
| tree | c29b25ca440dc1b984d1e8508c938cc8d75ca96b /tests | |
| parent | e7a6eaf5fee9c5854e0d2d86f21132ac4a1415f6 (diff) | |
Fixed #20943 -- Weakly reference senders when caching their associated receivers
Backport of e55ca60903 from master.
Diffstat (limited to 'tests')
| -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 a1d4c7e176..2586aeee62 100644 --- a/tests/dispatch/tests/test_dispatcher.py +++ b/tests/dispatch/tests/test_dispatcher.py @@ -1,6 +1,7 @@ import gc import sys import time +import weakref from django.dispatch import Signal, receiver from django.utils import unittest @@ -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) |
