#16559: Add more tests for the json module. Patch by Serhiy Storchaka.

This commit is contained in:
Ezio Melotti 2012-11-26 19:22:58 +02:00
parent 55b4cfb992
commit 282d331ec7
4 changed files with 47 additions and 15 deletions

View File

@ -1,13 +1,13 @@
from 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
u'["A\u001FZ control characters in string"]',
]

View File

@ -17,6 +17,21 @@ class TestFloat(object):
self.assertEqual(self.loads(self.dumps(num)), num)
self.assertEqual(self.loads(unicode(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

View File

@ -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(object):
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

View File

@ -518,6 +518,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 #16274: Fix test_asyncore on Solaris. Patch by Giampaolo Rodola'.
- Issue #15040: Close files in mailbox tests for PyPy compatibility.