summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEzio Melotti <ezio.melotti@gmail.com>2012-11-26 17:24:20 (GMT)
committerEzio Melotti <ezio.melotti@gmail.com>2012-11-26 17:24:20 (GMT)
commit8c523704031ffa5c4b55e2954aac11ee548ab5dc (patch)
treedb16aa948f842c69023b06cc72dd33572e500461
parent0b502ff33b107d5e30f8e2176ac88f7a0993c8d0 (diff)
downloadcpython-8c523704031ffa5c4b55e2954aac11ee548ab5dc.zip
cpython-8c523704031ffa5c4b55e2954aac11ee548ab5dc.tar.gz
cpython-8c523704031ffa5c4b55e2954aac11ee548ab5dc.tar.bz2
#16559: Add more tests for the json module. Patch by Serhiy Storchaka.
-rw-r--r--Lib/test/json_tests/test_fail.py24
-rw-r--r--Lib/test/json_tests/test_float.py15
-rw-r--r--Lib/test/json_tests/test_pass1.py20
-rw-r--r--Misc/NEWS3
4 files changed, 47 insertions, 15 deletions
diff --git a/Lib/test/json_tests/test_fail.py b/Lib/test/json_tests/test_fail.py
index fcff1d4..7809056 100644
--- a/Lib/test/json_tests/test_fail.py
+++ b/Lib/test/json_tests/test_fail.py
@@ -1,13 +1,13 @@
from test.json_tests import PyTest, CTest
-# Fri Dec 30 18:57:26 2005
+# 2007-10-05
JSONDOCS = [
# http://json.org/JSON_checker/test/fail1.json
'"A JSON payload should be an object or array, not a string."',
# http://json.org/JSON_checker/test/fail2.json
'["Unclosed array"',
# http://json.org/JSON_checker/test/fail3.json
- '{unquoted_key: "keys must be quoted}',
+ '{unquoted_key: "keys must be quoted"}',
# http://json.org/JSON_checker/test/fail4.json
'["extra comma",]',
# http://json.org/JSON_checker/test/fail5.json
@@ -33,7 +33,7 @@ JSONDOCS = [
# http://json.org/JSON_checker/test/fail15.json
'["Illegal backslash escape: \\x15"]',
# http://json.org/JSON_checker/test/fail16.json
- '["Illegal backslash escape: \\\'"]',
+ '[\\naked]',
# http://json.org/JSON_checker/test/fail17.json
'["Illegal backslash escape: \\017"]',
# http://json.org/JSON_checker/test/fail18.json
@@ -50,6 +50,24 @@ JSONDOCS = [
'["Bad value", truth]',
# http://json.org/JSON_checker/test/fail24.json
"['single quote']",
+ # http://json.org/JSON_checker/test/fail25.json
+ '["\ttab\tcharacter\tin\tstring\t"]',
+ # http://json.org/JSON_checker/test/fail26.json
+ '["tab\\ character\\ in\\ string\\ "]',
+ # http://json.org/JSON_checker/test/fail27.json
+ '["line\nbreak"]',
+ # http://json.org/JSON_checker/test/fail28.json
+ '["line\\\nbreak"]',
+ # http://json.org/JSON_checker/test/fail29.json
+ '[0e]',
+ # http://json.org/JSON_checker/test/fail30.json
+ '[0e+]',
+ # http://json.org/JSON_checker/test/fail31.json
+ '[0e+-1]',
+ # http://json.org/JSON_checker/test/fail32.json
+ '{"Comma instead if closing brace": true,',
+ # http://json.org/JSON_checker/test/fail33.json
+ '["mismatch"}',
# http://code.google.com/p/simplejson/issues/detail?id=3
'["A\u001FZ control characters in string"]',
]
diff --git a/Lib/test/json_tests/test_float.py b/Lib/test/json_tests/test_float.py
index a3441cf..38ef7e9 100644
--- a/Lib/test/json_tests/test_float.py
+++ b/Lib/test/json_tests/test_float.py
@@ -13,6 +13,21 @@ class TestFloat:
self.assertEqual(self.dumps(num), str(num))
self.assertEqual(int(self.dumps(num)), num)
+ def test_out_of_range(self):
+ self.assertEqual(self.loads('[23456789012E666]'), [float('inf')])
+ self.assertEqual(self.loads('[-23456789012E666]'), [float('-inf')])
+
+ def test_allow_nan(self):
+ for val in (float('inf'), float('-inf'), float('nan')):
+ out = self.dumps([val])
+ if val == val: # inf
+ self.assertEqual(self.loads(out), [val])
+ else: # nan
+ res = self.loads(out)
+ self.assertEqual(len(res), 1)
+ self.assertNotEqual(res[0], res[0])
+ self.assertRaises(ValueError, self.dumps, [val], allow_nan=False)
+
class TestPyFloat(TestFloat, PyTest): pass
class TestCFloat(TestFloat, CTest): pass
diff --git a/Lib/test/json_tests/test_pass1.py b/Lib/test/json_tests/test_pass1.py
index 036a2e4..52445f3 100644
--- a/Lib/test/json_tests/test_pass1.py
+++ b/Lib/test/json_tests/test_pass1.py
@@ -17,7 +17,7 @@ JSON = r'''
"real": -9876.543210,
"e": 0.123456789e-12,
"E": 1.234567890E+34,
- "": 23456789012E666,
+ "": 23456789012E66,
"zero": 0,
"one": 1,
"space": " ",
@@ -28,6 +28,7 @@ JSON = r'''
"alpha": "abcdefghijklmnopqrstuvwyz",
"ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
"digit": "0123456789",
+ "0123456789": "digit",
"special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
"hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
"true": true,
@@ -43,8 +44,7 @@ JSON = r'''
,
-4 , 5 , 6 ,7 ],
- "compact": [1,2,3,4,5,6,7],
+4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],
"jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
"quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
"\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
@@ -55,9 +55,11 @@ JSON = r'''
99.44
,
-1066
-
-
+1066,
+1e1,
+0.1e1,
+1e-1,
+1e00,2e+00,2e-00
,"rosebud"]
'''
@@ -67,12 +69,6 @@ class TestPass1:
res = self.loads(JSON)
out = self.dumps(res)
self.assertEqual(res, self.loads(out))
- try:
- self.dumps(res, allow_nan=False)
- except ValueError:
- pass
- else:
- self.fail("23456789012E666 should be out of range")
class TestPyPass1(TestPass1, PyTest): pass
diff --git a/Misc/NEWS b/Misc/NEWS
index e10ebc6..b04986b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -641,6 +641,9 @@ Extension Modules
Tests
-----
+- Issue #16559: Add more tests for the json module, including some from the
+ official test suite at json.org. Patch by Serhiy Storchaka.
+
- Issue #15304: Fix warning message when os.chdir() fails inside
test.support.temp_cwd(). Patch by Chris Jerdonek.