test_iterable.py 1.4 KB

12345678910111213141516171819202122232425262728293031
  1. import unittest
  2. from simplejson.compat import StringIO
  3. import simplejson as json
  4. def iter_dumps(obj, **kw):
  5. return ''.join(json.JSONEncoder(**kw).iterencode(obj))
  6. def sio_dump(obj, **kw):
  7. sio = StringIO()
  8. json.dumps(obj, **kw)
  9. return sio.getvalue()
  10. class TestIterable(unittest.TestCase):
  11. def test_iterable(self):
  12. for l in ([], [1], [1, 2], [1, 2, 3]):
  13. for opts in [{}, {'indent': 2}]:
  14. for dumps in (json.dumps, iter_dumps, sio_dump):
  15. expect = dumps(l, **opts)
  16. default_expect = dumps(sum(l), **opts)
  17. # Default is False
  18. self.assertRaises(TypeError, dumps, iter(l), **opts)
  19. self.assertRaises(TypeError, dumps, iter(l), iterable_as_array=False, **opts)
  20. self.assertEqual(expect, dumps(iter(l), iterable_as_array=True, **opts))
  21. # Ensure that the "default" gets called
  22. self.assertEqual(default_expect, dumps(iter(l), default=sum, **opts))
  23. self.assertEqual(default_expect, dumps(iter(l), iterable_as_array=False, default=sum, **opts))
  24. # Ensure that the "default" does not get called
  25. self.assertEqual(
  26. expect,
  27. dumps(iter(l), iterable_as_array=True, default=sum, **opts))