summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2009-05-20 16:13:55 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2009-05-20 16:13:55 +0000
commitc935d7ffe37cf9376aa30cb74c6fdaffe346255f (patch)
tree540480b7b2c58502e5b770b274ff58fb35378c9d /tests
parentca365b4113b89e269d8a2f731a288cff5be97422 (diff)
Fixed #11134: signals recievers that disconnect during their processing no longer mess things up for other handlers. Thanks, Honza Kral.
While I was at it I also cleaned up the formatting of the docstrings a bit. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10831 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/modeltests/signals/tests.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/modeltests/signals/tests.py b/tests/modeltests/signals/tests.py
new file mode 100644
index 0000000000..329636c306
--- /dev/null
+++ b/tests/modeltests/signals/tests.py
@@ -0,0 +1,28 @@
+from django.db.models import signals
+from django.test import TestCase
+from modeltests.signals.models import Person
+
+class MyReceiver(object):
+ def __init__(self, param):
+ self.param = param
+ self._run = False
+
+ def __call__(self, signal, sender, **kwargs):
+ self._run = True
+ signal.disconnect(receiver=self, sender=sender)
+
+class SignalTests(TestCase):
+ def test_disconnect_in_dispatch(self):
+ """
+ Test that signals that disconnect when being called don't mess future
+ dispatching.
+ """
+ a, b = MyReceiver(1), MyReceiver(2)
+ signals.post_save.connect(sender=Person, receiver=a)
+ signals.post_save.connect(sender=Person, receiver=b)
+ p = Person.objects.create(first_name='John', last_name='Smith')
+
+ self.failUnless(a._run)
+ self.failUnless(b._run)
+ self.assertEqual(signals.post_save.receivers, [])
+