diff options
Diffstat (limited to 'tests/utils_tests/test_json.py')
| -rw-r--r-- | tests/utils_tests/test_json.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/utils_tests/test_json.py b/tests/utils_tests/test_json.py new file mode 100644 index 0000000000..9d137149ed --- /dev/null +++ b/tests/utils_tests/test_json.py @@ -0,0 +1,46 @@ +import json +from collections import UserList, defaultdict +from datetime import datetime +from decimal import Decimal + +from django.test import SimpleTestCase +from django.utils.json import normalize_json + + +class JSONNormalizeTestCase(SimpleTestCase): + def test_converts_json_types(self): + for test_case, expected in [ + (None, "null"), + (True, "true"), + (False, "false"), + (2, "2"), + (3.0, "3.0"), + (1e23 + 1, "1e+23"), + ("1", '"1"'), + (b"hello", '"hello"'), + ([], "[]"), + (UserList([1, 2]), "[1, 2]"), + ({}, "{}"), + ({1: "a"}, '{"1": "a"}'), + ({"foo": (1, 2, 3)}, '{"foo": [1, 2, 3]}'), + (defaultdict(list), "{}"), + (float("nan"), "NaN"), + (float("inf"), "Infinity"), + (float("-inf"), "-Infinity"), + ]: + with self.subTest(test_case): + normalized = normalize_json(test_case) + # Ensure that the normalized result is serializable. + self.assertEqual(json.dumps(normalized), expected) + + def test_bytes_decode_error(self): + with self.assertRaisesMessage(ValueError, "Unsupported value"): + normalize_json(b"\xff") + + def test_encode_error(self): + for test_case in [self, any, object(), datetime.now(), set(), Decimal("3.42")]: + with ( + self.subTest(test_case), + self.assertRaisesMessage(TypeError, "Unsupported type"), + ): + normalize_json(test_case) |
