diff options
author | Ezio Melotti <ezio.melotti@gmail.com> | 2011-04-13 04:18:24 (GMT) |
---|---|---|
committer | Ezio Melotti <ezio.melotti@gmail.com> | 2011-04-13 04:18:24 (GMT) |
commit | 04c6423fbab6f4a525d56cedc91600a52d74f062 (patch) | |
tree | f6f0099cd34a142ddbc5f53569d46dadedc34cab /Lib | |
parent | 1a20c121ef3cfc53cf8ec754cbba8ef82933f175 (diff) | |
parent | d210aa1ad9329661625ca5f0b6754f84ffc25021 (diff) | |
download | cpython-04c6423fbab6f4a525d56cedc91600a52d74f062.zip cpython-04c6423fbab6f4a525d56cedc91600a52d74f062.tar.gz cpython-04c6423fbab6f4a525d56cedc91600a52d74f062.tar.bz2 |
Merge with 3.1.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/json/decoder.py | 6 | ||||
-rw-r--r-- | Lib/test/json_tests/test_decode.py | 5 | ||||
-rw-r--r-- | Lib/test/json_tests/test_scanstring.py | 9 | ||||
-rw-r--r-- | Lib/test/json_tests/test_speedups.py | 14 |
4 files changed, 28 insertions, 6 deletions
diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py index 5747fa6..a19cf0f 100644 --- a/Lib/json/decoder.py +++ b/Lib/json/decoder.py @@ -165,6 +165,12 @@ def JSONObject(s_and_end, strict, scan_once, object_hook, object_pairs_hook, nextchar = s[end:end + 1] # Trivial empty object if nextchar == '}': + if object_pairs_hook is not None: + result = object_pairs_hook(pairs) + return result, end + pairs = {} + if object_hook is not None: + pairs = object_hook(pairs) return pairs, end + 1 elif nextchar != '"': raise ValueError(errmsg("Expecting property name", s, end)) diff --git a/Lib/test/json_tests/test_decode.py b/Lib/test/json_tests/test_decode.py index f41e5b7..07dadfe 100644 --- a/Lib/test/json_tests/test_decode.py +++ b/Lib/test/json_tests/test_decode.py @@ -31,6 +31,11 @@ class TestDecode(TestCase): self.assertTrue(isinstance(rval, float)) self.assertEqual(rval, 1.0) + def test_empty_objects(self): + self.assertEqual(json.loads('{}'), {}) + self.assertEqual(json.loads('[]'), []) + self.assertEqual(json.loads('""'), "") + def test_object_pairs_hook(self): s = '{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}' p = [("xkd", 1), ("kcw", 2), ("art", 3), ("hxm", 4), diff --git a/Lib/test/json_tests/test_scanstring.py b/Lib/test/json_tests/test_scanstring.py index d503851..abd3253 100644 --- a/Lib/test/json_tests/test_scanstring.py +++ b/Lib/test/json_tests/test_scanstring.py @@ -1,14 +1,19 @@ import sys -import decimal -from unittest import TestCase +from unittest import TestCase, skipUnless import json import json.decoder +try: + import _json +except ImportError: + _json = None + class TestScanString(TestCase): def test_py_scanstring(self): self._test_scanstring(json.decoder.py_scanstring) + @skipUnless(_json, 'test requires the _json module') def test_c_scanstring(self): if json.decoder.c_scanstring is not None: self._test_scanstring(json.decoder.c_scanstring) diff --git a/Lib/test/json_tests/test_speedups.py b/Lib/test/json_tests/test_speedups.py index 2718409..b7c141f 100644 --- a/Lib/test/json_tests/test_speedups.py +++ b/Lib/test/json_tests/test_speedups.py @@ -1,16 +1,22 @@ -from unittest import TestCase +from unittest import TestCase, skipUnless from json import decoder, encoder, scanner +try: + import _json +except ImportError: + _json = None + +@skipUnless(_json, 'test requires the _json module') class TestSpeedups(TestCase): def test_scanstring(self): self.assertEqual(decoder.scanstring.__module__, "_json") - self.assertTrue(decoder.scanstring is decoder.c_scanstring) + self.assertIs(decoder.scanstring, decoder.c_scanstring) def test_encode_basestring_ascii(self): self.assertEqual(encoder.encode_basestring_ascii.__module__, "_json") - self.assertTrue(encoder.encode_basestring_ascii is - encoder.c_encode_basestring_ascii) + self.assertIs(encoder.encode_basestring_ascii, + encoder.c_encode_basestring_ascii) class TestDecode(TestCase): def test_make_scanner(self): |