|
20 | 20 | import re
|
21 | 21 | import sys
|
22 | 22 | import uuid
|
| 23 | +from collections import OrderedDict |
23 | 24 | from typing import Any, List, MutableMapping, Tuple, Type
|
24 | 25 |
|
25 | 26 | from bson.codec_options import CodecOptions, DatetimeConversion
|
@@ -557,15 +558,13 @@ def test_numberlong(self):
|
557 | 558 | )
|
558 | 559 |
|
559 | 560 | def test_loads_document_class(self):
|
560 |
| - # document_class dict should always work |
561 |
| - self.assertEqual( |
562 |
| - {"foo": "bar"}, |
563 |
| - json_util.loads('{"foo": "bar"}', json_options=JSONOptions(document_class=dict)), |
564 |
| - ) |
565 |
| - self.assertEqual( |
566 |
| - SON([("foo", "bar"), ("b", 1)]), |
567 |
| - json_util.loads('{"foo": "bar", "b": 1}', json_options=JSONOptions(document_class=SON)), |
568 |
| - ) |
| 561 | + json_doc = '{"foo": "bar", "b": 1, "d": {"a": 1}}' |
| 562 | + expected_doc = {"foo": "bar", "b": 1, "d": {"a": 1}} |
| 563 | + for cls in (dict, SON, OrderedDict): |
| 564 | + doc = json_util.loads(json_doc, json_options=JSONOptions(document_class=cls)) |
| 565 | + self.assertEqual(doc, expected_doc) |
| 566 | + self.assertIsInstance(doc, cls) |
| 567 | + self.assertIsInstance(doc["d"], cls) |
569 | 568 |
|
570 | 569 | def test_encode_subclass(self):
|
571 | 570 | cases: list[Tuple[Type, Any]] = [
|
|
0 commit comments