diff options
Diffstat (limited to 'simplejson/tests')
| -rw-r--r-- | simplejson/tests/test_dump.py | 76 |
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) |
