summaryrefslogtreecommitdiff
path: root/tests/utils_tests/test_json.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/utils_tests/test_json.py')
-rw-r--r--tests/utils_tests/test_json.py46
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)