From 03d12815f178d34416b657ebc9b8b4c80ec28a67 Mon Sep 17 00:00:00 2001 From: Shane Harvey Date: Mon, 5 Feb 2024 14:00:04 -0800 Subject: [PATCH] PYTHON-4179 Verify document_class type in json_util.loads test --- test/test_json_util.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/test/test_json_util.py b/test/test_json_util.py index 74cf12f33c..0f73a8efd9 100644 --- a/test/test_json_util.py +++ b/test/test_json_util.py @@ -20,6 +20,7 @@ import re import sys import uuid +from collections import OrderedDict from typing import Any, List, MutableMapping, Tuple, Type from bson.codec_options import CodecOptions, DatetimeConversion @@ -557,15 +558,13 @@ def test_numberlong(self): ) def test_loads_document_class(self): - # document_class dict should always work - self.assertEqual( - {"foo": "bar"}, - json_util.loads('{"foo": "bar"}', json_options=JSONOptions(document_class=dict)), - ) - self.assertEqual( - SON([("foo", "bar"), ("b", 1)]), - json_util.loads('{"foo": "bar", "b": 1}', json_options=JSONOptions(document_class=SON)), - ) + json_doc = '{"foo": "bar", "b": 1, "d": {"a": 1}}' + expected_doc = {"foo": "bar", "b": 1, "d": {"a": 1}} + for cls in (dict, SON, OrderedDict): + doc = json_util.loads(json_doc, json_options=JSONOptions(document_class=cls)) + self.assertEqual(doc, expected_doc) + self.assertIsInstance(doc, cls) + self.assertIsInstance(doc["d"], cls) def test_encode_subclass(self): cases: list[Tuple[Type, Any]] = [