summaryrefslogtreecommitdiff
path: root/simplejson/tests
diff options
context:
space:
mode:
Diffstat (limited to 'simplejson/tests')
-rw-r--r--simplejson/tests/test_dump.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/simplejson/tests/test_dump.py b/simplejson/tests/test_dump.py
index 2a30125..6b36c20 100644
--- a/simplejson/tests/test_dump.py
+++ b/simplejson/tests/test_dump.py
@@ -11,6 +11,9 @@ def as_text_type(s):
return s.decode('ascii')
return s
+def decode_iso_8859_15(b):
+ return b.decode('iso-8859-15')
+
class TestDump(TestCase):
def test_dump(self):
sio = StringIO()
@@ -140,3 +143,76 @@ class TestDump(TestCase):
json.dumps(MisbehavingTextSubtype(text)),
json.dumps(text)
)
+
+ def test_bytes_toplevel(self):
+ self.assertEqual(json.dumps(b('\xe2\x82\xac')), r'"\u20ac"')
+ self.assertRaises(UnicodeDecodeError, json.dumps, b('\xa4'))
+ self.assertEqual(json.dumps(b('\xa4'), encoding='iso-8859-1'),
+ r'"\u00a4"')
+ self.assertEqual(json.dumps(b('\xa4'), encoding='iso-8859-15'),
+ r'"\u20ac"')
+ if PY3:
+ self.assertRaises(TypeError, json.dumps, b('\xe2\x82\xac'),
+ encoding=None)
+ self.assertRaises(TypeError, json.dumps, b('\xa4'),
+ encoding=None)
+ self.assertEqual(json.dumps(b('\xa4'), encoding=None,
+ default=decode_iso_8859_15),
+ r'"\u20ac"')
+ else:
+ self.assertEqual(json.dumps(b('\xe2\x82\xac'), encoding=None),
+ r'"\u20ac"')
+ self.assertRaises(UnicodeDecodeError, json.dumps, b('\xa4'),
+ encoding=None)
+ self.assertRaises(UnicodeDecodeError, json.dumps, b('\xa4'),
+ encoding=None, default=decode_iso_8859_15)
+
+ def test_bytes_nested(self):
+ self.assertEqual(json.dumps([b('\xe2\x82\xac')]), r'["\u20ac"]')
+ self.assertRaises(UnicodeDecodeError, json.dumps, [b('\xa4')])
+ self.assertEqual(json.dumps([b('\xa4')], encoding='iso-8859-1'),
+ r'["\u00a4"]')
+ self.assertEqual(json.dumps([b('\xa4')], encoding='iso-8859-15'),
+ r'["\u20ac"]')
+ if PY3:
+ self.assertRaises(TypeError, json.dumps, [b('\xe2\x82\xac')],
+ encoding=None)
+ self.assertRaises(TypeError, json.dumps, [b('\xa4')],
+ encoding=None)
+ self.assertEqual(json.dumps([b('\xa4')], encoding=None,
+ default=decode_iso_8859_15),
+ r'["\u20ac"]')
+ else:
+ self.assertEqual(json.dumps([b('\xe2\x82\xac')], encoding=None),
+ r'["\u20ac"]')
+ self.assertRaises(UnicodeDecodeError, json.dumps, [b('\xa4')],
+ encoding=None)
+ self.assertRaises(UnicodeDecodeError, json.dumps, [b('\xa4')],
+ encoding=None, default=decode_iso_8859_15)
+
+ def test_bytes_key(self):
+ self.assertEqual(json.dumps({b('\xe2\x82\xac'): 42}), r'{"\u20ac": 42}')
+ self.assertRaises(UnicodeDecodeError, json.dumps, {b('\xa4'): 42})
+ self.assertEqual(json.dumps({b('\xa4'): 42}, encoding='iso-8859-1'),
+ r'{"\u00a4": 42}')
+ self.assertEqual(json.dumps({b('\xa4'): 42}, encoding='iso-8859-15'),
+ r'{"\u20ac": 42}')
+ if PY3:
+ self.assertRaises(TypeError, json.dumps, {b('\xe2\x82\xac'): 42},
+ encoding=None)
+ self.assertRaises(TypeError, json.dumps, {b('\xa4'): 42},
+ encoding=None)
+ self.assertRaises(TypeError, json.dumps, {b('\xa4'): 42},
+ encoding=None, default=decode_iso_8859_15)
+ self.assertEqual(json.dumps({b('\xa4'): 42}, encoding=None,
+ skipkeys=True),
+ r'{}')
+ else:
+ self.assertEqual(json.dumps({b('\xe2\x82\xac'): 42}, encoding=None),
+ r'{"\u20ac": 42}')
+ self.assertRaises(UnicodeDecodeError, json.dumps, {b('\xa4'): 42},
+ encoding=None)
+ self.assertRaises(UnicodeDecodeError, json.dumps, {b('\xa4'): 42},
+ encoding=None, default=decode_iso_8859_15)
+ self.assertRaises(UnicodeDecodeError, json.dumps, {b('\xa4'): 42},
+ encoding=None, skipkeys=True)