diff options
author | Adam Chainz <adam@adamj.eu> | 2016-11-20 18:02:10 +0000 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2016-11-22 09:07:42 -0500 |
commit | c70ffeeb8b70b42693a340724f00eba656c6e51a (patch) | |
tree | 263b4c2f8b1b8afa956c9685b1ae7e7c7892b676 /tests/dispatch | |
parent | 66505b72c58099ded7420a7f90792d5bdf48ff01 (diff) | |
download | django-c70ffeeb8b70b42693a340724f00eba656c6e51a.tar.gz |
Completed django.dispatch test coverage.
Diffstat (limited to 'tests/dispatch')
-rw-r--r-- | tests/dispatch/test_removedindjango20.py | 24 | ||||
-rw-r--r-- | tests/dispatch/tests.py | 78 |
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): |