Skip to content

Commit 6545256

Browse files
bpo-32032: Test both implementations of module-level pickle API. (#4401)
1 parent 2ae4ad7 commit 6545256

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

Lib/test/pickletester.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2534,7 +2534,7 @@ def test_dump_closed_file(self):
25342534
f = open(TESTFN, "wb")
25352535
try:
25362536
f.close()
2537-
self.assertRaises(ValueError, pickle.dump, 123, f)
2537+
self.assertRaises(ValueError, self.dump, 123, f)
25382538
finally:
25392539
os.remove(TESTFN)
25402540

@@ -2543,16 +2543,16 @@ def test_load_closed_file(self):
25432543
f = open(TESTFN, "wb")
25442544
try:
25452545
f.close()
2546-
self.assertRaises(ValueError, pickle.dump, 123, f)
2546+
self.assertRaises(ValueError, self.dump, 123, f)
25472547
finally:
25482548
os.remove(TESTFN)
25492549

25502550
def test_load_from_and_dump_to_file(self):
25512551
stream = io.BytesIO()
25522552
data = [123, {}, 124]
2553-
pickle.dump(data, stream)
2553+
self.dump(data, stream)
25542554
stream.seek(0)
2555-
unpickled = pickle.load(stream)
2555+
unpickled = self.load(stream)
25562556
self.assertEqual(unpickled, data)
25572557

25582558
def test_highest_protocol(self):
@@ -2562,20 +2562,20 @@ def test_highest_protocol(self):
25622562
def test_callapi(self):
25632563
f = io.BytesIO()
25642564
# With and without keyword arguments
2565-
pickle.dump(123, f, -1)
2566-
pickle.dump(123, file=f, protocol=-1)
2567-
pickle.dumps(123, -1)
2568-
pickle.dumps(123, protocol=-1)
2569-
pickle.Pickler(f, -1)
2570-
pickle.Pickler(f, protocol=-1)
2565+
self.dump(123, f, -1)
2566+
self.dump(123, file=f, protocol=-1)
2567+
self.dumps(123, -1)
2568+
self.dumps(123, protocol=-1)
2569+
self.Pickler(f, -1)
2570+
self.Pickler(f, protocol=-1)
25712571

25722572
def test_bad_init(self):
25732573
# Test issue3664 (pickle can segfault from a badly initialized Pickler).
25742574
# Override initialization without calling __init__() of the superclass.
2575-
class BadPickler(pickle.Pickler):
2575+
class BadPickler(self.Pickler):
25762576
def __init__(self): pass
25772577

2578-
class BadUnpickler(pickle.Unpickler):
2578+
class BadUnpickler(self.Unpickler):
25792579
def __init__(self): pass
25802580

25812581
self.assertRaises(pickle.PicklingError, BadPickler().dump, 0)

Lib/test/test_pickle.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,13 @@
2626
has_c_implementation = False
2727

2828

29-
class PickleTests(AbstractPickleModuleTests):
30-
pass
29+
class PyPickleTests(AbstractPickleModuleTests):
30+
dump = staticmethod(pickle._dump)
31+
dumps = staticmethod(pickle._dumps)
32+
load = staticmethod(pickle._load)
33+
loads = staticmethod(pickle._loads)
34+
Pickler = pickle._Pickler
35+
Unpickler = pickle._Unpickler
3136

3237

3338
class PyUnpicklerTests(AbstractUnpickleTests):
@@ -136,6 +141,9 @@ def get_dispatch_table(self):
136141

137142

138143
if has_c_implementation:
144+
class CPickleTests(AbstractPickleModuleTests):
145+
from _pickle import dump, dumps, load, loads, Pickler, Unpickler
146+
139147
class CUnpicklerTests(PyUnpicklerTests):
140148
unpickler = _pickle.Unpickler
141149
bad_stack_errors = (pickle.UnpicklingError,)
@@ -426,12 +434,12 @@ def test_multiprocessing_exceptions(self):
426434

427435

428436
def test_main():
429-
tests = [PickleTests, PyUnpicklerTests, PyPicklerTests,
437+
tests = [PyPickleTests, PyUnpicklerTests, PyPicklerTests,
430438
PyPersPicklerTests, PyIdPersPicklerTests,
431439
PyDispatchTableTests, PyChainDispatchTableTests,
432440
CompatPickleTests]
433441
if has_c_implementation:
434-
tests.extend([CUnpicklerTests, CPicklerTests,
442+
tests.extend([CPickleTests, CUnpicklerTests, CPicklerTests,
435443
CPersPicklerTests, CIdPersPicklerTests,
436444
CDumpPickle_LoadPickle, DumpPickle_CLoadPickle,
437445
PyPicklerUnpicklerObjectTests,

Lib/test/test_pickletools.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
import pickletools
33
from test import support
44
from test.pickletester import AbstractPickleTests
5-
from test.pickletester import AbstractPickleModuleTests
65
import unittest
76

8-
class OptimizedPickleTests(AbstractPickleTests, AbstractPickleModuleTests):
7+
class OptimizedPickleTests(AbstractPickleTests):
98

109
def dumps(self, arg, proto=None):
1110
return pickletools.optimize(pickle.dumps(arg, proto))

0 commit comments

Comments
 (0)