From a8f4553aaecc7bc6775e0fd54f8c615c792b3d97 Mon Sep 17 00:00:00 2001 From: Loic Bistuer Date: Wed, 4 Dec 2013 14:11:34 +0700 Subject: Fixed #21555 -- Made ValidationError pickable. Thanks trac username zanuxzan for the report and original patch. --- tests/validation/test_picklable.py | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/validation/test_picklable.py (limited to 'tests/validation') diff --git a/tests/validation/test_picklable.py b/tests/validation/test_picklable.py new file mode 100644 index 0000000000..a8d84dba20 --- /dev/null +++ b/tests/validation/test_picklable.py @@ -0,0 +1,41 @@ +import pickle +from unittest import TestCase + +from django.core.exceptions import ValidationError + + +class PickableValidationErrorTestCase(TestCase): + + def test_validationerror_is_picklable(self): + original = ValidationError('a', code='something') + unpickled = pickle.loads(pickle.dumps(original)) + self.assertIs(unpickled, unpickled.error_list[0]) + self.assertEqual(original.message, unpickled.message) + self.assertEqual(original.code, unpickled.code) + + original = ValidationError('a', code='something') + unpickled = pickle.loads(pickle.dumps(ValidationError(original))) + self.assertIs(unpickled, unpickled.error_list[0]) + self.assertEqual(original.message, unpickled.message) + self.assertEqual(original.code, unpickled.code) + + original = ValidationError(['a', 'b']) + unpickled = pickle.loads(pickle.dumps(original)) + self.assertEqual(original.error_list[0].message, unpickled.error_list[0].message) + self.assertEqual(original.error_list[1].message, unpickled.error_list[1].message) + + original = ValidationError(['a', 'b']) + unpickled = pickle.loads(pickle.dumps(ValidationError(original))) + self.assertEqual(original.error_list[0].message, unpickled.error_list[0].message) + self.assertEqual(original.error_list[1].message, unpickled.error_list[1].message) + + original = ValidationError([ValidationError('a'), ValidationError('b')]) + unpickled = pickle.loads(pickle.dumps(original)) + self.assertIs(unpickled.args[0][0], unpickled.error_list[0]) + self.assertEqual(original.error_list[0].message, unpickled.error_list[0].message) + self.assertEqual(original.error_list[1].message, unpickled.error_list[1].message) + + message_dict = {'field1': ['a', 'b'], 'field2': ['c', 'd']} + original = ValidationError(message_dict) + unpickled = pickle.loads(pickle.dumps(original)) + self.assertEqual(unpickled.message_dict, message_dict) -- cgit v1.3