From 928421f68ff2128c5397553a57f3d76a75e39ca4 Mon Sep 17 00:00:00 2001 From: Bob Ippolito Date: Wed, 1 May 2013 11:23:52 -0700 Subject: update CHANGES and tests --- CHANGES.txt | 6 ++ simplejson/tests/__init__.py | 1 + simplejson/tests/test_for_json.py | 121 +++++++++++++++----------------------- 3 files changed, 53 insertions(+), 75 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index beb086a..7c30cb1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,9 @@ +Version 3.2.0 released 2013-05-XX + +* New for_json kwarg in encoder to make it possible to for + subclasses of dict and list to be specialized. + https://github.com/simplejson/simplejson/pull/69 + Version 3.1.3 released 2013-04-06 * Updated documentation to discourage subclassing whenever possible. diff --git a/simplejson/tests/__init__.py b/simplejson/tests/__init__.py index 61540d5..c01dfcb 100644 --- a/simplejson/tests/__init__.py +++ b/simplejson/tests/__init__.py @@ -60,6 +60,7 @@ def all_tests_suite(): 'simplejson.tests.test_tuple', 'simplejson.tests.test_namedtuple', 'simplejson.tests.test_tool', + 'simplejson.tests.test_for_json', ]) suite = additional_tests(suite) return OptionalExtensionTestSuite([suite]) diff --git a/simplejson/tests/test_for_json.py b/simplejson/tests/test_for_json.py index 2906bdb..b791b88 100644 --- a/simplejson/tests/test_for_json.py +++ b/simplejson/tests/test_for_json.py @@ -27,100 +27,71 @@ class ListForJson(list): return ['list'] -class TestForJsonWithSpeedups(unittest.TestCase): - def setUp(self): - if not json.encoder.c_make_encoder: - raise unittest.SkipTest("No speedups.") - - @staticmethod - def _dump(obj): - return json.dumps(obj, for_json=True) - - def test_for_json_encodes_stand_alone_object(self): - self.assertEqual(self._dump(ForJson()), '{"for_json": 1}') - - def test_for_json_encodes_object_nested_in_dict(self): - self.assertEqual(self._dump({'hooray': ForJson()}), '{"hooray": ' - '{"for_json": 1}}') - - def test_for_json_encodes_object_nested_in_list_within_dict(self): - self.assertEqual(self._dump({'list': [0, ForJson(), 2, 3]}), - '{"list": [0, {"for_json": 1}, 2, 3]}') - - def test_for_json_encodes_object_nested_within_object(self): - self.assertEqual(self._dump(NestedForJson()), - '{"nested": {"for_json": 1}}') - - def test_for_json_encodes_list(self): - self.assertEqual(self._dump(ForJsonList()), '["list"]') - - def test_for_json_encodes_list_within_object(self): - self.assertEqual(self._dump({'nested': ForJsonList()}), - '{"nested": ["list"]}') - - def test_for_json_encodes_dict_subclass(self): - self.assertEqual(self._dump(DictForJson(a=1)), '{"alpha": 1}') - - def test_for_json_encodes_list_subclass(self): - self.assertEqual(self._dump(ListForJson(['l'])), '["list"]') - - def tset_for_json_ignored_if_not_true_with_dict_subclass(self): - self.assertEqual(json.dumps(DictForJson(a=1)), '{"a": 1}') - - def test_for_json_ignored_if_not_true_with_list_subclass(self): - self.assertEqual(json.dumps(ListForJson(['l'])), '["l"]') - - def test_raises_typeerror_if_for_json_not_true_with_object(self): - self.assertRaises(TypeError, json.dumps, ForJson()) - - -class TestForJsonWithoutSpeedups(unittest.TestCase): - def setUp(self): - if json.encoder.c_make_encoder: - json._toggle_speedups(False) - - def tearDown(self): - if json.encoder.c_make_encoder: - json._toggle_speedups(True) - - @staticmethod - def _dump(obj): - return json.dumps(obj, for_json=True) +class TestForJson(unittest.TestCase): + def assertRoundTrip(self, obj, other, for_json=True): + if for_json is None: + # None will use the default + s = json.dumps(obj) + else: + s = json.dumps(obj, for_json=for_json) + self.assertEqual( + json.loads(s), + other) def test_for_json_encodes_stand_alone_object(self): - self.assertEqual(self._dump(ForJson()), '{"for_json": 1}') + self.assertRoundTrip( + ForJson(), + ForJson().for_json()) def test_for_json_encodes_object_nested_in_dict(self): - self.assertEqual(self._dump({'hooray': ForJson()}), '{"hooray": ' - '{"for_json": 1}}') + self.assertRoundTrip( + {'hooray': ForJson()}, + {'hooray': ForJson().for_json()}) def test_for_json_encodes_object_nested_in_list_within_dict(self): - self.assertEqual(self._dump({'list': [0, ForJson(), 2, 3]}), - '{"list": [0, {"for_json": 1}, 2, 3]}') + self.assertRoundTrip( + {'list': [0, ForJson(), 2, 3]}, + {'list': [0, ForJson().for_json(), 2, 3]}) def test_for_json_encodes_object_nested_within_object(self): - self.assertEqual(self._dump(NestedForJson()), - '{"nested": {"for_json": 1}}') + self.assertRoundTrip( + NestedForJson(), + {'nested': {'for_json': 1}}) def test_for_json_encodes_list(self): - self.assertEqual(self._dump(ForJsonList()), '["list"]') + self.assertRoundTrip( + ForJsonList(), + ForJsonList().for_json()) def test_for_json_encodes_list_within_object(self): - self.assertEqual(self._dump({'nested': ForJsonList()}), - '{"nested": ["list"]}') + self.assertRoundTrip( + {'nested': ForJsonList()}, + {'nested': ForJsonList().for_json()}) def test_for_json_encodes_dict_subclass(self): - self.assertEqual(self._dump(DictForJson(a=1)), '{"alpha": 1}') + self.assertRoundTrip( + DictForJson(a=1), + DictForJson(a=1).for_json()) def test_for_json_encodes_list_subclass(self): - self.assertEqual(self._dump(ListForJson(['l'])), '["list"]') + self.assertRoundTrip( + ListForJson(['l']), + ListForJson(['l']).for_json()) - def tset_for_json_ignored_if_not_true_with_dict_subclass(self): - self.assertEqual(json.dumps(DictForJson(a=1)), '{"a": 1}') + def test_for_json_ignored_if_not_true_with_dict_subclass(self): + for for_json in (None, False): + self.assertRoundTrip( + DictForJson(a=1), + {'a': 1}, + for_json=for_json) def test_for_json_ignored_if_not_true_with_list_subclass(self): - self.assertEqual(json.dumps(ListForJson(['l'])), '["l"]') + for for_json in (None, False): + self.assertRoundTrip( + ListForJson(['l']), + ['l'], + for_json=for_json) def test_raises_typeerror_if_for_json_not_true_with_object(self): self.assertRaises(TypeError, json.dumps, ForJson()) - + self.assertRaises(TypeError, json.dumps, ForJson(), for_json=False) -- cgit v1.2.1