mirror of https://github.com/python/cpython.git
Issue #17225: JSON decoder now counts columns in the first line starting
with 1, as in other lines.
This commit is contained in:
commit
920007ad76
|
@ -101,7 +101,7 @@ Using json.tool from the shell to validate and pretty-print::
|
||||||
"json": "obj"
|
"json": "obj"
|
||||||
}
|
}
|
||||||
$ echo '{1.2:3.4}' | python -mjson.tool
|
$ 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
|
.. highlight:: python3
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@
|
||||||
"json": "obj"
|
"json": "obj"
|
||||||
}
|
}
|
||||||
$ echo '{ 1.2:3.4}' | python -m json.tool
|
$ 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'
|
__version__ = '2.0.9'
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|
|
@ -24,7 +24,7 @@ def linecol(doc, pos):
|
||||||
newline = '\n'
|
newline = '\n'
|
||||||
lineno = doc.count(newline, 0, pos) + 1
|
lineno = doc.count(newline, 0, pos) + 1
|
||||||
if lineno == 1:
|
if lineno == 1:
|
||||||
colno = pos
|
colno = pos + 1
|
||||||
else:
|
else:
|
||||||
colno = pos - doc.rindex(newline, 0, pos)
|
colno = pos - doc.rindex(newline, 0, pos)
|
||||||
return lineno, colno
|
return lineno, colno
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"json": "obj"
|
"json": "obj"
|
||||||
}
|
}
|
||||||
$ echo '{ 1.2:3.4}' | python -m json.tool
|
$ 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
|
import sys
|
||||||
|
|
|
@ -125,8 +125,8 @@ def test_truncated_input(self):
|
||||||
]
|
]
|
||||||
for data, msg, idx in test_cases:
|
for data, msg, idx in test_cases:
|
||||||
self.assertRaisesRegex(ValueError,
|
self.assertRaisesRegex(ValueError,
|
||||||
r'^{0}: line 1 column {1} \(char {1}\)'.format(
|
r'^{0}: line 1 column {1} \(char {2}\)'.format(
|
||||||
re.escape(msg), idx),
|
re.escape(msg), idx + 1, idx),
|
||||||
self.loads, data)
|
self.loads, data)
|
||||||
|
|
||||||
def test_unexpected_data(self):
|
def test_unexpected_data(self):
|
||||||
|
@ -155,8 +155,8 @@ def test_unexpected_data(self):
|
||||||
]
|
]
|
||||||
for data, msg, idx in test_cases:
|
for data, msg, idx in test_cases:
|
||||||
self.assertRaisesRegex(ValueError,
|
self.assertRaisesRegex(ValueError,
|
||||||
r'^{0}: line 1 column {1} \(char {1}\)'.format(
|
r'^{0}: line 1 column {1} \(char {2}\)'.format(
|
||||||
re.escape(msg), idx),
|
re.escape(msg), idx + 1, idx),
|
||||||
self.loads, data)
|
self.loads, data)
|
||||||
|
|
||||||
def test_extra_data(self):
|
def test_extra_data(self):
|
||||||
|
@ -173,10 +173,22 @@ def test_extra_data(self):
|
||||||
for data, msg, idx in test_cases:
|
for data, msg, idx in test_cases:
|
||||||
self.assertRaisesRegex(ValueError,
|
self.assertRaisesRegex(ValueError,
|
||||||
r'^{0}: line 1 column {1} - line 1 column {2}'
|
r'^{0}: line 1 column {1} - line 1 column {2}'
|
||||||
r' \(char {1} - {2}\)'.format(
|
r' \(char {3} - {4}\)'.format(
|
||||||
re.escape(msg), idx, len(data)),
|
re.escape(msg), idx + 1, len(data) + 1, idx, len(data)),
|
||||||
self.loads, 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 TestPyFail(TestFail, PyTest): pass
|
||||||
class TestCFail(TestFail, CTest): pass
|
class TestCFail(TestFail, CTest): pass
|
||||||
|
|
|
@ -260,6 +260,9 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #6623: Added explicit DeprecationWarning for ftplib.netrc, which has
|
||||||
been deprecated and undocumented for a long time.
|
been deprecated and undocumented for a long time.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue