diff options
| author | Serhiy Storchaka <storchaka@gmail.com> | 2018-04-25 00:39:48 +0300 |
|---|---|---|
| committer | Serhiy Storchaka <storchaka@gmail.com> | 2018-04-25 01:01:59 +0300 |
| commit | 12e30827bc6224a133a1ccfb977c0bccb0c84576 (patch) | |
| tree | 57e111e7df0b5fae214cde92767dc3d52c1971b7 /simplejson/tests/test_dump.py | |
| parent | 2ec708bbc884b956c453eb057547cf0150294be9 (diff) | |
| download | simplejson-bytes-encoding.tar.gz | |
Allow to disable serializing bytes by default in Python 3.bytes-encoding
If encoding is None, then bytes objects will be passed to the
default() method instead of transforming into unicode.
Diffstat (limited to 'simplejson/tests/test_dump.py')
| -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) |
