diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-07-17 11:35:35 +0300 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-07-17 11:35:35 +0300 |
commit | 3410c01d83d70ceef48b735c247aebd2d5bd3411 (patch) | |
tree | 31bd2f79a937309132d92e75ae53c25d5309bbbd /Lib/test/pickletester.py | |
parent | fb2125daf35f7f21d04b5c567c639c20b0565a9c (diff) | |
parent | dec25afab1c325c28621dda3ba2b32dbc200c8b3 (diff) | |
download | cpython-git-3410c01d83d70ceef48b735c247aebd2d5bd3411.tar.gz |
Issue #17711: Fixed unpickling by the persistent ID with protocol 0.
Original patch by Alexandre Vassalotti.
Diffstat (limited to 'Lib/test/pickletester.py')
-rw-r--r-- | Lib/test/pickletester.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index 8deb56fa0f..5c83361027 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -2622,6 +2622,35 @@ class AbstractPersistentPicklerTests(unittest.TestCase): self.assertEqual(self.load_false_count, 1) +class AbstractIdentityPersistentPicklerTests(unittest.TestCase): + + def persistent_id(self, obj): + return obj + + def persistent_load(self, pid): + return pid + + def _check_return_correct_type(self, obj, proto): + unpickled = self.loads(self.dumps(obj, proto)) + self.assertIsInstance(unpickled, type(obj)) + self.assertEqual(unpickled, obj) + + def test_return_correct_type(self): + for proto in protocols: + # Protocol 0 supports only ASCII strings. + if proto == 0: + self._check_return_correct_type("abc", 0) + else: + for obj in [b"abc\n", "abc\n", -1, -1.1 * 0.1, str]: + self._check_return_correct_type(obj, proto) + + def test_protocol0_is_ascii_only(self): + non_ascii_str = "\N{EMPTY SET}" + self.assertRaises(pickle.PicklingError, self.dumps, non_ascii_str, 0) + pickled = pickle.PERSID + non_ascii_str.encode('utf-8') + b'\n.' + self.assertRaises(pickle.UnpicklingError, self.loads, pickled) + + class AbstractPicklerUnpicklerObjectTests(unittest.TestCase): pickler_class = None |