summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Ippolito <bob@redivi.com>2013-05-01 11:23:52 -0700
committerBob Ippolito <bob@redivi.com>2013-05-01 11:29:42 -0700
commit928421f68ff2128c5397553a57f3d76a75e39ca4 (patch)
tree5c90d196326282cbedcd85ea4967d47d71d20b99
parentc5512d65c2085f6ed91b5f7e3684dbf557bc29f3 (diff)
downloadsimplejson-928421f68ff2128c5397553a57f3d76a75e39ca4.tar.gz
update CHANGES and testsfor_json-69
-rw-r--r--CHANGES.txt6
-rw-r--r--simplejson/tests/__init__.py1
-rw-r--r--simplejson/tests/test_for_json.py121
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)