summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorBob Ippolito <bob@redivi.com>2009-03-29 22:33:58 (GMT)
committerBob Ippolito <bob@redivi.com>2009-03-29 22:33:58 (GMT)
commit76a982a027d72287a6d9113b1d65ec6d327d744d (patch)
tree0c2536d595c4b31e9bc996609123129e02b4543c /Lib
parent8e1a3381293466a6d9a3873b46194a4ed9277619 (diff)
downloadcpython-76a982a027d72287a6d9113b1d65ec6d327d744d.zip
cpython-76a982a027d72287a6d9113b1d65ec6d327d744d.tar.gz
cpython-76a982a027d72287a6d9113b1d65ec6d327d744d.tar.bz2
Issue 5381: fix regression in pure python code path, Issue 5584: fix a decoder bug for unicode float literals outside of a container
Diffstat (limited to 'Lib')
-rw-r--r--Lib/json/__init__.py3
-rw-r--r--Lib/json/scanner.py3
-rw-r--r--Lib/json/tests/test_decode.py11
-rw-r--r--Lib/json/tests/test_float.py6
4 files changed, 16 insertions, 7 deletions
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index 01c26d9..ba584a3 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -266,7 +266,8 @@ def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None,
return loads(fp.read(),
encoding=encoding, cls=cls, object_hook=object_hook,
parse_float=parse_float, parse_int=parse_int,
- parse_constant=parse_constant, object_pairs_hook=None, **kw)
+ parse_constant=parse_constant, object_pairs_hook=object_pairs_hook,
+ **kw)
def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
diff --git a/Lib/json/scanner.py b/Lib/json/scanner.py
index 00c5470..74e6805 100644
--- a/Lib/json/scanner.py
+++ b/Lib/json/scanner.py
@@ -23,6 +23,7 @@ def py_make_scanner(context):
parse_int = context.parse_int
parse_constant = context.parse_constant
object_hook = context.object_hook
+ object_pairs_hook = context.object_pairs_hook
def _scan_once(string, idx):
try:
@@ -34,7 +35,7 @@ def py_make_scanner(context):
return parse_string(string, idx + 1, encoding, strict)
elif nextchar == '{':
return parse_object((string, idx + 1), encoding, strict,
- _scan_once, object_hook)
+ _scan_once, object_hook, object_pairs_hook)
elif nextchar == '[':
return parse_array((string, idx + 1), _scan_once)
elif nextchar == 'n' and string[idx:idx + 4] == 'null':
diff --git a/Lib/json/tests/test_decode.py b/Lib/json/tests/test_decode.py
index 0744b52..7109527 100644
--- a/Lib/json/tests/test_decode.py
+++ b/Lib/json/tests/test_decode.py
@@ -1,5 +1,6 @@
import decimal
from unittest import TestCase
+from StringIO import StringIO
import json
from collections import OrderedDict
@@ -27,12 +28,14 @@ class TestDecode(TestCase):
p = [("xkd", 1), ("kcw", 2), ("art", 3), ("hxm", 4),
("qrt", 5), ("pad", 6), ("hoy", 7)]
self.assertEqual(json.loads(s), eval(s))
- self.assertEqual(json.loads(s, object_pairs_hook = lambda x: x), p)
- od = json.loads(s, object_pairs_hook = OrderedDict)
+ self.assertEqual(json.loads(s, object_pairs_hook=lambda x: x), p)
+ self.assertEqual(json.load(StringIO(s),
+ object_pairs_hook=lambda x: x), p)
+ od = json.loads(s, object_pairs_hook=OrderedDict)
self.assertEqual(od, OrderedDict(p))
self.assertEqual(type(od), OrderedDict)
# the object_pairs_hook takes priority over the object_hook
self.assertEqual(json.loads(s,
- object_pairs_hook = OrderedDict,
- object_hook = lambda x: None),
+ object_pairs_hook=OrderedDict,
+ object_hook=lambda x: None),
OrderedDict(p))
diff --git a/Lib/json/tests/test_float.py b/Lib/json/tests/test_float.py
index 20d41d9..15e7913 100644
--- a/Lib/json/tests/test_float.py
+++ b/Lib/json/tests/test_float.py
@@ -5,11 +5,15 @@ import json
class TestFloat(TestCase):
def test_floats(self):
- for num in [1617161771.7650001, math.pi, math.pi**100, math.pi**-100, 3.1]:
+ for num in [1617161771.7650001, math.pi, math.pi**100,
+ math.pi**-100, 3.1]:
self.assertEquals(float(json.dumps(num)), num)
self.assertEquals(json.loads(json.dumps(num)), num)
+ self.assertEquals(json.loads(unicode(json.dumps(num))), num)
def test_ints(self):
for num in [1, 1L, 1<<32, 1<<64]:
self.assertEquals(json.dumps(num), str(num))
self.assertEquals(int(json.dumps(num)), num)
+ self.assertEquals(json.loads(json.dumps(num)), num)
+ self.assertEquals(json.loads(unicode(json.dumps(num))), num)