@@ -122,6 +122,7 @@ class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests,
122
122
123
123
pickler = pickle ._Pickler
124
124
unpickler = pickle ._Unpickler
125
+ persistent_load_error = pickle .UnpicklingError
125
126
126
127
@support .cpython_only
127
128
def test_pickler_reference_cycle (self ):
@@ -176,7 +177,6 @@ class DispatchTable:
176
177
support .gc_collect ()
177
178
self .assertIsNone (table_ref ())
178
179
179
-
180
180
@support .cpython_only
181
181
def test_unpickler_reference_cycle (self ):
182
182
def check (Unpickler ):
@@ -206,6 +206,28 @@ def persistent_load(pid):
206
206
return pid
207
207
check (PersUnpickler )
208
208
209
+ def test_pickler_super (self ):
210
+ class PersPickler (self .pickler ):
211
+ def persistent_id (subself , obj ):
212
+ self .assertIsNone (super ().persistent_id (obj ))
213
+ return obj
214
+
215
+ for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
216
+ f = io .BytesIO ()
217
+ pickler = PersPickler (f , proto )
218
+ pickler .dump ('abc' )
219
+ self .assertEqual (self .loads (f .getvalue ()), 'abc' )
220
+
221
+ def test_unpickler_super (self ):
222
+ class PersUnpickler (self .unpickler ):
223
+ def persistent_load (subself , pid ):
224
+ with self .assertRaises (self .persistent_load_error ):
225
+ super ().persistent_load (pid )
226
+ return pid
227
+
228
+ for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
229
+ unpickler = PersUnpickler (io .BytesIO (self .dumps ('abc' , proto )))
230
+ self .assertEqual (unpickler .load (), 'abc' )
209
231
210
232
class PyPicklerUnpicklerObjectTests (AbstractPicklerUnpicklerObjectTests , unittest .TestCase ):
211
233
@@ -256,6 +278,7 @@ class CPersPicklerTests(PyPersPicklerTests):
256
278
class CIdPersPicklerTests (PyIdPersPicklerTests ):
257
279
pickler = _pickle .Pickler
258
280
unpickler = _pickle .Unpickler
281
+ persistent_load_error = _pickle .UnpicklingError
259
282
260
283
class CDumpPickle_LoadPickle (PyPicklerTests ):
261
284
pickler = _pickle .Pickler
@@ -326,7 +349,7 @@ class SizeofTests(unittest.TestCase):
326
349
check_sizeof = support .check_sizeof
327
350
328
351
def test_pickler (self ):
329
- basesize = support .calcobjsize ('7P2n3i2n3i2P ' )
352
+ basesize = support .calcobjsize ('6P2n3i2n3i2P ' )
330
353
p = _pickle .Pickler (io .BytesIO ())
331
354
self .assertEqual (object .__sizeof__ (p ), basesize )
332
355
MT_size = struct .calcsize ('3nP0n' )
@@ -343,7 +366,7 @@ def test_pickler(self):
343
366
0 ) # Write buffer is cleared after every dump().
344
367
345
368
def test_unpickler (self ):
346
- basesize = support .calcobjsize ('2P2n2P 2P2n2i5P 2P3n8P2n2i' )
369
+ basesize = support .calcobjsize ('2P2nP 2P2n2i5P 2P3n8P2n2i' )
347
370
unpickler = _pickle .Unpickler
348
371
P = struct .calcsize ('P' ) # Size of memo table entry.
349
372
n = struct .calcsize ('n' ) # Size of mark table entry.
0 commit comments