diff options
| author | Jacob Kaplan-Moss <jacob@jacobian.org> | 2009-05-20 16:19:24 +0000 |
|---|---|---|
| committer | Jacob Kaplan-Moss <jacob@jacobian.org> | 2009-05-20 16:19:24 +0000 |
| commit | 10637a94cb215473a5aff3d1c7fa719a95d699ba (patch) | |
| tree | 8312722fcec60a0df506ba4ed37c3a3f3540b705 /tests | |
| parent | e00173806361ce0756bea8a2e2efaac773f56569 (diff) | |
[1.0.X] Fixed #11134: signals recievers that disconnect during their processing no longer mess things up for other handlers. Thanks, Honza Kral. Backport of [10831] from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10832 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/modeltests/signals/tests.py | 28 |
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, []) + |
