From c935d7ffe37cf9376aa30cb74c6fdaffe346255f Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Wed, 20 May 2009 16:13:55 +0000 Subject: 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 --- tests/modeltests/signals/tests.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 tests/modeltests/signals/tests.py (limited to 'tests') 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, []) + -- cgit v1.3