python-benedict/tests/github/test_issue_0046.py

90 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
from benedict import benedict
import json
import unittest
class github_issue_0046_test_case(unittest.TestCase):
"""
https://github.com/fabiocaccamo/python-benedict/issues/46
To run this specific test:
- Run python -m unittest tests.github.test_issue_0046
"""
def test_json_dumps_with_cloned_instance(self):
d = {
'id': '37e4f6e876',
'meta': {
'data': {
'category': 'category0',
'id': 'data_id',
'title': 'A title'
},
'id': '37e4f6e876',
'k0': {
'ka': {
'key1': '',
'key2': 'value2',
'key3': 'value3',
'key4': True
},
'kb': {
'key1': '',
'key2': 'value2',
'key3': 'value3',
'key4': True
},
'kc': {
'extra_key2': 'value2',
'key1': '',
'key2': 'value2',
'key3': 'value3',
'key4': True
},
'kd': {
'key1': '',
'key2': 'value2',
'key3': 'value3',
'key4': True
},
'ke': {
'key1': '',
'key2': 'value2',
'key3': 'value3',
'key4': True
},
'kf': {
'key1': '',
'key2': 'value2',
'key3': 'separated',
'key4': True
}
},
'language': 'en',
'name': 'name_value'
}
}
keypaths = ['id', 'meta.k0.kc', 'meta.language']
d = benedict(d)
d_new = benedict()
d_new = d.subset(keypaths)
# patch the json module to force the use of the python encoder - #46
# import json
# json.encoder.c_make_encoder = None
json_encoder = None
json_dumps = lambda d: json.dumps(d, sort_keys=True, cls=json_encoder)
d_new_raw = {'id': '37e4f6e876', 'meta': {'k0': {'kc': {'extra_key2': 'value2', 'key1': '', 'key2': 'value2', 'key3': 'value3', 'key4': True}}, 'language': 'en'}}
self.assertEqual(d_new, d_new_raw)
self.assertEqual(json_dumps(d_new), json_dumps(d_new_raw))
self.assertEqual(d_new.to_json(sort_keys=True, cls=json_encoder), json_dumps(d_new_raw))
d_new_cloned = d_new.clone()
self.assertEqual(d_new, d_new_cloned)
self.assertEqual(json_dumps(d_new), json_dumps(d_new_cloned))
self.assertEqual(d_new.to_json(sort_keys=True), d_new_cloned.to_json(sort_keys=True))