test_errors.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import sys, pickle
  2. from unittest import TestCase
  3. import simplejson as json
  4. from simplejson.compat import u, b
  5. class TestErrors(TestCase):
  6. def test_string_keys_error(self):
  7. data = [{'a': 'A', 'b': (2, 4), 'c': 3.0, ('d',): 'D tuple'}]
  8. self.assertRaises(TypeError, json.dumps, data)
  9. def test_decode_error(self):
  10. err = None
  11. try:
  12. json.loads('{}\na\nb')
  13. except json.JSONDecodeError:
  14. err = sys.exc_info()[1]
  15. else:
  16. self.fail('Expected JSONDecodeError')
  17. self.assertEqual(err.lineno, 2)
  18. self.assertEqual(err.colno, 1)
  19. self.assertEqual(err.endlineno, 3)
  20. self.assertEqual(err.endcolno, 2)
  21. def test_scan_error(self):
  22. err = None
  23. for t in (u, b):
  24. try:
  25. json.loads(t('{"asdf": "'))
  26. except json.JSONDecodeError:
  27. err = sys.exc_info()[1]
  28. else:
  29. self.fail('Expected JSONDecodeError')
  30. self.assertEqual(err.lineno, 1)
  31. self.assertEqual(err.colno, 10)
  32. def test_error_is_pickable(self):
  33. err = None
  34. try:
  35. json.loads('{}\na\nb')
  36. except json.JSONDecodeError:
  37. err = sys.exc_info()[1]
  38. else:
  39. self.fail('Expected JSONDecodeError')
  40. s = pickle.dumps(err)
  41. e = pickle.loads(s)
  42. self.assertEqual(err.msg, e.msg)
  43. self.assertEqual(err.doc, e.doc)
  44. self.assertEqual(err.pos, e.pos)
  45. self.assertEqual(err.end, e.end)