2015-03-23 20:58:26 +00:00
|
|
|
import sys, pickle
|
2013-09-07 05:46:52 +00:00
|
|
|
from unittest import TestCase
|
|
|
|
|
|
|
|
import simplejson as json
|
|
|
|
from simplejson.compat import u, b
|
|
|
|
|
|
|
|
class TestErrors(TestCase):
|
|
|
|
def test_string_keys_error(self):
|
|
|
|
data = [{'a': 'A', 'b': (2, 4), 'c': 3.0, ('d',): 'D tuple'}]
|
|
|
|
self.assertRaises(TypeError, json.dumps, data)
|
|
|
|
|
|
|
|
def test_decode_error(self):
|
|
|
|
err = None
|
|
|
|
try:
|
|
|
|
json.loads('{}\na\nb')
|
|
|
|
except json.JSONDecodeError:
|
|
|
|
err = sys.exc_info()[1]
|
|
|
|
else:
|
|
|
|
self.fail('Expected JSONDecodeError')
|
|
|
|
self.assertEqual(err.lineno, 2)
|
|
|
|
self.assertEqual(err.colno, 1)
|
|
|
|
self.assertEqual(err.endlineno, 3)
|
|
|
|
self.assertEqual(err.endcolno, 2)
|
|
|
|
|
|
|
|
def test_scan_error(self):
|
|
|
|
err = None
|
|
|
|
for t in (u, b):
|
|
|
|
try:
|
|
|
|
json.loads(t('{"asdf": "'))
|
|
|
|
except json.JSONDecodeError:
|
|
|
|
err = sys.exc_info()[1]
|
|
|
|
else:
|
|
|
|
self.fail('Expected JSONDecodeError')
|
|
|
|
self.assertEqual(err.lineno, 1)
|
|
|
|
self.assertEqual(err.colno, 10)
|
2015-03-23 20:58:26 +00:00
|
|
|
|
|
|
|
def test_error_is_pickable(self):
|
|
|
|
err = None
|
|
|
|
try:
|
|
|
|
json.loads('{}\na\nb')
|
|
|
|
except json.JSONDecodeError:
|
|
|
|
err = sys.exc_info()[1]
|
|
|
|
else:
|
|
|
|
self.fail('Expected JSONDecodeError')
|
|
|
|
s = pickle.dumps(err)
|
|
|
|
e = pickle.loads(s)
|
|
|
|
|
|
|
|
self.assertEqual(err.msg, e.msg)
|
|
|
|
self.assertEqual(err.doc, e.doc)
|
|
|
|
self.assertEqual(err.pos, e.pos)
|
|
|
|
self.assertEqual(err.end, e.end)
|