From 1bc9e690475dc15969b7df0bd352ebef3678f720 Mon Sep 17 00:00:00 2001 From: David Slavicek Date: Sun, 19 Jul 2026 16:41:14 +0200 Subject: [PATCH 1/2] add test for object hook --- Lib/test/test_json/test_decode.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py index 33aeefa92f282a..7bff16ddf2155e 100644 --- a/Lib/test/test_json/test_decode.py +++ b/Lib/test/test_json/test_decode.py @@ -48,6 +48,26 @@ def test_empty_objects(self): self.assertEqual(self.loads('[]'), []) self.assertEqual(self.loads('""'), "") + def test_object_hook(self): + s = '{"a":{"b":{}}}' + + expected_result = {"a":{"b":{"x":1}, "x":1}, "x":1} + expected_hook_arguments = [ + {}, {"b": {"x":1}}, {"a": {"b": {"x":1}, "x":1}} + ] + + hook_arguments = [] + + def hook(x): + hook_arguments.append(x) + return {**x, "x":1} + + result = self.loads(s, object_hook=hook) + + self.assertEqual(result, expected_result) + self.assertEqual(hook_arguments, expected_hook_arguments) + + def test_object_pairs_hook(self): s = '{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}' p = [("xkd", 1), ("kcw", 2), ("art", 3), ("hxm", 4), From 4a7361a867e35ac46b85ec04df9f641f1333e2d5 Mon Sep 17 00:00:00 2001 From: David Slavicek Date: Sun, 19 Jul 2026 16:52:31 +0200 Subject: [PATCH 2/2] add test for JsonDecodeError pickleability --- Lib/test/test_json/test_pickleable.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Lib/test/test_json/test_pickleable.py diff --git a/Lib/test/test_json/test_pickleable.py b/Lib/test/test_json/test_pickleable.py new file mode 100644 index 00000000000000..517cfcdd41a351 --- /dev/null +++ b/Lib/test/test_json/test_pickleable.py @@ -0,0 +1,14 @@ +import json +import pickle +import unittest + +class TestPickleable(unittest.TestCase): + def test_json_decode_error_is_pickleable(self): + e = json.JSONDecodeError(msg="abc", doc="def", pos=7) + + pickled = pickle.dumps(e) + unpickled = pickle.loads(pickled) + + self.assertEqual(unpickled.msg, e.msg) + self.assertEqual(unpickled.doc, e.doc) + self.assertEqual(unpickled.pos, e.pos)