[Python-checkins] cpython (merge 3.3 -> default): Issue #17225: JSON decoder now counts columns in the first line starting
serhiy.storchaka
python-checkins at python.org
Thu Feb 21 19:31:16 CET 2013
http://hg.python.org/cpython/rev/69f793cc34fc
changeset: 82303:69f793cc34fc
parent: 82299:d49685548a7a
parent: 82302:361ba6d4b7c9
user: Serhiy Storchaka <storchaka at gmail.com>
date: Thu Feb 21 20:26:52 2013 +0200
summary:
Issue #17225: JSON decoder now counts columns in the first line starting
with 1, as in other lines.
files:
Doc/library/json.rst | 2 +-
Lib/json/__init__.py | 2 +-
Lib/json/decoder.py | 2 +-
Lib/json/tool.py | 2 +-
Lib/test/json_tests/test_fail.py | 24 +++++++++++++++-----
Misc/NEWS | 3 ++
6 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/Doc/library/json.rst b/Doc/library/json.rst
--- a/Doc/library/json.rst
+++ b/Doc/library/json.rst
@@ -101,7 +101,7 @@
"json": "obj"
}
$ echo '{1.2:3.4}' | python -mjson.tool
- Expecting property name enclosed in double quotes: line 1 column 1 (char 1)
+ Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
.. highlight:: python3
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -96,7 +96,7 @@
"json": "obj"
}
$ echo '{ 1.2:3.4}' | python -m json.tool
- Expecting property name enclosed in double quotes: line 1 column 2 (char 2)
+ Expecting property name enclosed in double quotes: line 1 column 3 (char 2)
"""
__version__ = '2.0.9'
__all__ = [
diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py
--- a/Lib/json/decoder.py
+++ b/Lib/json/decoder.py
@@ -24,7 +24,7 @@
newline = '\n'
lineno = doc.count(newline, 0, pos) + 1
if lineno == 1:
- colno = pos
+ colno = pos + 1
else:
colno = pos - doc.rindex(newline, 0, pos)
return lineno, colno
diff --git a/Lib/json/tool.py b/Lib/json/tool.py
--- a/Lib/json/tool.py
+++ b/Lib/json/tool.py
@@ -7,7 +7,7 @@
"json": "obj"
}
$ echo '{ 1.2:3.4}' | python -m json.tool
- Expecting property name enclosed in double quotes: line 1 column 2 (char 2)
+ Expecting property name enclosed in double quotes: line 1 column 3 (char 2)
"""
import sys
diff --git a/Lib/test/json_tests/test_fail.py b/Lib/test/json_tests/test_fail.py
--- a/Lib/test/json_tests/test_fail.py
+++ b/Lib/test/json_tests/test_fail.py
@@ -125,8 +125,8 @@
]
for data, msg, idx in test_cases:
self.assertRaisesRegex(ValueError,
- r'^{0}: line 1 column {1} \(char {1}\)'.format(
- re.escape(msg), idx),
+ r'^{0}: line 1 column {1} \(char {2}\)'.format(
+ re.escape(msg), idx + 1, idx),
self.loads, data)
def test_unexpected_data(self):
@@ -155,8 +155,8 @@
]
for data, msg, idx in test_cases:
self.assertRaisesRegex(ValueError,
- r'^{0}: line 1 column {1} \(char {1}\)'.format(
- re.escape(msg), idx),
+ r'^{0}: line 1 column {1} \(char {2}\)'.format(
+ re.escape(msg), idx + 1, idx),
self.loads, data)
def test_extra_data(self):
@@ -173,10 +173,22 @@
for data, msg, idx in test_cases:
self.assertRaisesRegex(ValueError,
r'^{0}: line 1 column {1} - line 1 column {2}'
- r' \(char {1} - {2}\)'.format(
- re.escape(msg), idx, len(data)),
+ r' \(char {3} - {4}\)'.format(
+ re.escape(msg), idx + 1, len(data) + 1, idx, len(data)),
self.loads, data)
+ def test_linecol(self):
+ test_cases = [
+ ('!', 1, 1, 0),
+ (' !', 1, 2, 1),
+ ('\n!', 2, 1, 1),
+ ('\n \n\n !', 4, 6, 10),
+ ]
+ for data, line, col, idx in test_cases:
+ self.assertRaisesRegex(ValueError,
+ r'^Expecting value: line {0} column {1}'
+ r' \(char {2}\)$'.format(line, col, idx),
+ self.loads, data)
class TestPyFail(TestFail, PyTest): pass
class TestCFail(TestFail, CTest): pass
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -260,6 +260,9 @@
Library
-------
+- Issue #17225: JSON decoder now counts columns in the first line starting
+ with 1, as in other lines.
+
- Issue #6623: Added explicit DeprecationWarning for ftplib.netrc, which has
been deprecated and undocumented for a long time.
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list