summaryrefslogtreecommitdiff
path: root/tests/dispatch
diff options
context:
space:
mode:
authorAdam Chainz <adam@adamj.eu>2016-11-20 18:02:10 +0000
committerTim Graham <timograham@gmail.com>2016-11-22 09:07:42 -0500
commitc70ffeeb8b70b42693a340724f00eba656c6e51a (patch)
tree263b4c2f8b1b8afa956c9685b1ae7e7c7892b676 /tests/dispatch
parent66505b72c58099ded7420a7f90792d5bdf48ff01 (diff)
downloaddjango-c70ffeeb8b70b42693a340724f00eba656c6e51a.tar.gz
Completed django.dispatch test coverage.
Diffstat (limited to 'tests/dispatch')
-rw-r--r--tests/dispatch/test_removedindjango20.py24
-rw-r--r--tests/dispatch/tests.py78
2 files changed, 83 insertions, 19 deletions
diff --git a/tests/dispatch/test_removedindjango20.py b/tests/dispatch/test_removedindjango20.py
new file mode 100644
index 0000000000..9b28cf789d
--- /dev/null
+++ b/tests/dispatch/test_removedindjango20.py
@@ -0,0 +1,24 @@
+import warnings
+
+from django.dispatch import Signal
+from django.test import SimpleTestCase
+
+a_signal = Signal(providing_args=['val'])
+
+
+def receiver_1_arg(val, **kwargs):
+ return val
+
+
+class DispatcherTests(SimpleTestCase):
+
+ def test_disconnect_weak_deprecated(self):
+ a_signal.connect(receiver_1_arg)
+ with warnings.catch_warnings(record=True) as warns:
+ warnings.simplefilter('always')
+ a_signal.disconnect(receiver_1_arg, weak=True)
+ self.assertEqual(len(warns), 1)
+ self.assertEqual(
+ str(warns[0].message),
+ 'Passing `weak` to disconnect has no effect.',
+ )
diff --git a/tests/dispatch/tests.py b/tests/dispatch/tests.py
index ce48157d70..d36dde9720 100644
--- a/tests/dispatch/tests.py
+++ b/tests/dispatch/tests.py
@@ -1,11 +1,12 @@
import gc
import sys
import time
-import unittest
import weakref
from types import TracebackType
from django.dispatch import Signal, receiver
+from django.test import SimpleTestCase
+from django.test.utils import override_settings
if sys.platform.startswith('java'):
def garbage_collect():
@@ -42,8 +43,7 @@ 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)"""
+class DispatcherTests(SimpleTestCase):
def assertTestIsClean(self, signal):
"""Assert that everything has been cleaned up automatically"""
@@ -53,30 +53,55 @@ class DispatcherTests(unittest.TestCase):
self.assertFalse(signal.has_listeners())
self.assertEqual(signal.receivers, [])
- def test_exact(self):
+ @override_settings(DEBUG=True)
+ def test_cannot_connect_no_kwargs(self):
+ def receiver_no_kwargs(sender):
+ pass
+
+ msg = 'Signal receivers must accept keyword arguments (**kwargs).'
+ with self.assertRaisesMessage(ValueError, msg):
+ a_signal.connect(receiver_no_kwargs)
+ self.assertTestIsClean(a_signal)
+
+ @override_settings(DEBUG=True)
+ def test_cannot_connect_non_callable(self):
+ msg = 'Signal receivers must be callable.'
+ with self.assertRaisesMessage(AssertionError, msg):
+ a_signal.connect(object())
+ self.assertTestIsClean(a_signal)
+
+ def test_send(self):
a_signal.connect(receiver_1_arg, sender=self)
- expected = [(receiver_1_arg, "test")]
- result = a_signal.send(sender=self, val="test")
- self.assertEqual(result, expected)
+ result = a_signal.send(sender=self, val='test')
+ self.assertEqual(result, [(receiver_1_arg, 'test')])
a_signal.disconnect(receiver_1_arg, sender=self)
self.assertTestIsClean(a_signal)
- def test_ignored_sender(self):
+ def test_send_no_receivers(self):
+ result = a_signal.send(sender=self, val='test')
+ self.assertEqual(result, [])
+
+ def test_send_connected_no_sender(self):
a_signal.connect(receiver_1_arg)
- expected = [(receiver_1_arg, "test")]
- result = a_signal.send(sender=self, val="test")
- self.assertEqual(result, expected)
+ result = a_signal.send(sender=self, val='test')
+ self.assertEqual(result, [(receiver_1_arg, 'test')])
a_signal.disconnect(receiver_1_arg)
self.assertTestIsClean(a_signal)
+ def test_send_different_no_sender(self):
+ a_signal.connect(receiver_1_arg, sender=object)
+ result = a_signal.send(sender=self, val='test')
+ self.assertEqual(result, [])
+ a_signal.disconnect(receiver_1_arg, sender=object)
+ self.assertTestIsClean(a_signal)
+
def test_garbage_collected(self):
a = Callable()
a_signal.connect(a.a, sender=self)
- expected = []
del a
garbage_collect()
result = a_signal.send(sender=self, val="test")
- self.assertEqual(result, expected)
+ self.assertEqual(result, [])
self.assertTestIsClean(a_signal)
def test_cached_garbaged_collected(self):
@@ -126,8 +151,25 @@ class DispatcherTests(unittest.TestCase):
a_signal.disconnect(dispatch_uid="uid")
self.assertTestIsClean(a_signal)
- def test_robust(self):
- """Test the send_robust() function"""
+ def test_send_robust_success(self):
+ a_signal.connect(receiver_1_arg)
+ result = a_signal.send_robust(sender=self, val='test')
+ self.assertEqual(result, [(receiver_1_arg, 'test')])
+ a_signal.disconnect(receiver_1_arg)
+ self.assertTestIsClean(a_signal)
+
+ def test_send_robust_no_receivers(self):
+ result = a_signal.send_robust(sender=self, val='test')
+ self.assertEqual(result, [])
+
+ def test_send_robust_ignored_sender(self):
+ a_signal.connect(receiver_1_arg)
+ result = a_signal.send_robust(sender=self, val='test')
+ self.assertEqual(result, [(receiver_1_arg, 'test')])
+ a_signal.disconnect(receiver_1_arg)
+ self.assertTestIsClean(a_signal)
+
+ def test_send_robust_fail(self):
def fails(val, **kwargs):
raise ValueError('this')
a_signal.connect(fails)
@@ -175,10 +217,8 @@ class DispatcherTests(unittest.TestCase):
self.assertFalse(a_signal.has_listeners(sender=object()))
-class ReceiverTestCase(unittest.TestCase):
- """
- Test suite for receiver.
- """
+class ReceiverTestCase(SimpleTestCase):
+
def test_receiver_single_signal(self):
@receiver(a_signal)
def f(val, **kwargs):