Skip to content

Commit 04dea46

Browse files
bpo-45229: Make pickle tests discoverable (GH-28467) (GH-28479)
(cherry picked from commit e6ba992) Co-authored-by: Serhiy Storchaka <[email protected]>
1 parent 29e4314 commit 04dea46

File tree

3 files changed

+36
-47
lines changed

3 files changed

+36
-47
lines changed

Lib/test/pickletester.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -824,7 +824,7 @@ def create_data():
824824
return x
825825

826826

827-
class AbstractUnpickleTests(unittest.TestCase):
827+
class AbstractUnpickleTests:
828828
# Subclass must define self.loads.
829829

830830
_testdata = create_data()
@@ -1437,7 +1437,7 @@ def t():
14371437

14381438

14391439

1440-
class AbstractPickleTests(unittest.TestCase):
1440+
class AbstractPickleTests:
14411441
# Subclass must define self.dumps, self.loads.
14421442

14431443
optimized = False
@@ -3020,7 +3020,7 @@ def check_array(arr):
30203020
check_array(arr[::2])
30213021

30223022

3023-
class BigmemPickleTests(unittest.TestCase):
3023+
class BigmemPickleTests:
30243024

30253025
# Binary protocols can serialize longs of up to 2 GiB-1
30263026

@@ -3293,7 +3293,7 @@ def __getattr__(self, key):
32933293
self.foo
32943294

32953295

3296-
class AbstractPickleModuleTests(unittest.TestCase):
3296+
class AbstractPickleModuleTests:
32973297

32983298
def test_dump_closed_file(self):
32993299
f = open(TESTFN, "wb")
@@ -3400,7 +3400,7 @@ def loads(data, **kwargs):
34003400
self.check_dumps_loads_oob_buffers(dumps, loads)
34013401

34023402

3403-
class AbstractPersistentPicklerTests(unittest.TestCase):
3403+
class AbstractPersistentPicklerTests:
34043404

34053405
# This class defines persistent_id() and persistent_load()
34063406
# functions that should be used by the pickler. All even integers
@@ -3440,7 +3440,7 @@ def test_persistence(self):
34403440
self.assertEqual(self.load_false_count, 1)
34413441

34423442

3443-
class AbstractIdentityPersistentPicklerTests(unittest.TestCase):
3443+
class AbstractIdentityPersistentPicklerTests:
34443444

34453445
def persistent_id(self, obj):
34463446
return obj
@@ -3469,7 +3469,7 @@ def test_protocol0_is_ascii_only(self):
34693469
self.assertRaises(pickle.UnpicklingError, self.loads, pickled)
34703470

34713471

3472-
class AbstractPicklerUnpicklerObjectTests(unittest.TestCase):
3472+
class AbstractPicklerUnpicklerObjectTests:
34733473

34743474
pickler_class = None
34753475
unpickler_class = None
@@ -3683,7 +3683,7 @@ def reducer_override(self, obj):
36833683

36843684
return NotImplemented
36853685

3686-
class AbstractHookTests(unittest.TestCase):
3686+
class AbstractHookTests:
36873687
def test_pickler_hook(self):
36883688
# test the ability of a custom, user-defined CPickler subclass to
36893689
# override the default reducing routines of any type using the method
@@ -3749,7 +3749,7 @@ def f():
37493749
self.assertIsNone(wr())
37503750

37513751

3752-
class AbstractDispatchTableTests(unittest.TestCase):
3752+
class AbstractDispatchTableTests:
37533753

37543754
def test_default_dispatch_table(self):
37553755
# No dispatch_table attribute by default

Lib/test/test_pickle.py

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import warnings
1010
import weakref
1111

12+
import doctest
1213
import unittest
1314
from test import support
1415

@@ -30,7 +31,7 @@
3031
has_c_implementation = False
3132

3233

33-
class PyPickleTests(AbstractPickleModuleTests):
34+
class PyPickleTests(AbstractPickleModuleTests, unittest.TestCase):
3435
dump = staticmethod(pickle._dump)
3536
dumps = staticmethod(pickle._dumps)
3637
load = staticmethod(pickle._load)
@@ -39,7 +40,7 @@ class PyPickleTests(AbstractPickleModuleTests):
3940
Unpickler = pickle._Unpickler
4041

4142

42-
class PyUnpicklerTests(AbstractUnpickleTests):
43+
class PyUnpicklerTests(AbstractUnpickleTests, unittest.TestCase):
4344

4445
unpickler = pickle._Unpickler
4546
bad_stack_errors = (IndexError,)
@@ -53,7 +54,7 @@ def loads(self, buf, **kwds):
5354
return u.load()
5455

5556

56-
class PyPicklerTests(AbstractPickleTests):
57+
class PyPicklerTests(AbstractPickleTests, unittest.TestCase):
5758

5859
pickler = pickle._Pickler
5960
unpickler = pickle._Unpickler
@@ -72,7 +73,7 @@ def loads(self, buf, **kwds):
7273

7374

7475
class InMemoryPickleTests(AbstractPickleTests, AbstractUnpickleTests,
75-
BigmemPickleTests):
76+
BigmemPickleTests, unittest.TestCase):
7677

7778
bad_stack_errors = (pickle.UnpicklingError, IndexError)
7879
truncated_errors = (pickle.UnpicklingError, EOFError,
@@ -109,14 +110,14 @@ def persistent_load(subself, obj):
109110

110111

111112
class PyPersPicklerTests(AbstractPersistentPicklerTests,
112-
PersistentPicklerUnpicklerMixin):
113+
PersistentPicklerUnpicklerMixin, unittest.TestCase):
113114

114115
pickler = pickle._Pickler
115116
unpickler = pickle._Unpickler
116117

117118

118119
class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests,
119-
PersistentPicklerUnpicklerMixin):
120+
PersistentPicklerUnpicklerMixin, unittest.TestCase):
120121

121122
pickler = pickle._Pickler
122123
unpickler = pickle._Unpickler
@@ -182,37 +183,37 @@ def persistent_load(pid):
182183
check(PersUnpickler)
183184

184185

185-
class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):
186+
class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests, unittest.TestCase):
186187

187188
pickler_class = pickle._Pickler
188189
unpickler_class = pickle._Unpickler
189190

190191

191-
class PyDispatchTableTests(AbstractDispatchTableTests):
192+
class PyDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
192193

193194
pickler_class = pickle._Pickler
194195

195196
def get_dispatch_table(self):
196197
return pickle.dispatch_table.copy()
197198

198199

199-
class PyChainDispatchTableTests(AbstractDispatchTableTests):
200+
class PyChainDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
200201

201202
pickler_class = pickle._Pickler
202203

203204
def get_dispatch_table(self):
204205
return collections.ChainMap({}, pickle.dispatch_table)
205206

206207

207-
class PyPicklerHookTests(AbstractHookTests):
208+
class PyPicklerHookTests(AbstractHookTests, unittest.TestCase):
208209
class CustomPyPicklerClass(pickle._Pickler,
209210
AbstractCustomPicklerClass):
210211
pass
211212
pickler_class = CustomPyPicklerClass
212213

213214

214215
if has_c_implementation:
215-
class CPickleTests(AbstractPickleModuleTests):
216+
class CPickleTests(AbstractPickleModuleTests, unittest.TestCase):
216217
from _pickle import dump, dumps, load, loads, Pickler, Unpickler
217218

218219
class CUnpicklerTests(PyUnpicklerTests):
@@ -240,7 +241,7 @@ class DumpPickle_CLoadPickle(PyPicklerTests):
240241
pickler = pickle._Pickler
241242
unpickler = _pickle.Unpickler
242243

243-
class CPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):
244+
class CPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests, unittest.TestCase):
244245
pickler_class = _pickle.Pickler
245246
unpickler_class = _pickle.Unpickler
246247

@@ -253,17 +254,17 @@ def test_issue18339(self):
253254
unpickler.memo = {-1: None}
254255
unpickler.memo = {1: None}
255256

256-
class CDispatchTableTests(AbstractDispatchTableTests):
257+
class CDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
257258
pickler_class = pickle.Pickler
258259
def get_dispatch_table(self):
259260
return pickle.dispatch_table.copy()
260261

261-
class CChainDispatchTableTests(AbstractDispatchTableTests):
262+
class CChainDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
262263
pickler_class = pickle.Pickler
263264
def get_dispatch_table(self):
264265
return collections.ChainMap({}, pickle.dispatch_table)
265266

266-
class CPicklerHookTests(AbstractHookTests):
267+
class CPicklerHookTests(AbstractHookTests, unittest.TestCase):
267268
class CustomCPicklerClass(_pickle.Pickler, AbstractCustomPicklerClass):
268269
pass
269270
pickler_class = CustomCPicklerClass
@@ -512,22 +513,10 @@ def test_multiprocessing_exceptions(self):
512513
('multiprocessing.context', name))
513514

514515

515-
def test_main():
516-
tests = [PyPickleTests, PyUnpicklerTests, PyPicklerTests,
517-
PyPersPicklerTests, PyIdPersPicklerTests,
518-
PyDispatchTableTests, PyChainDispatchTableTests,
519-
CompatPickleTests, PyPicklerHookTests]
520-
if has_c_implementation:
521-
tests.extend([CPickleTests, CUnpicklerTests, CPicklerTests,
522-
CPersPicklerTests, CIdPersPicklerTests,
523-
CDumpPickle_LoadPickle, DumpPickle_CLoadPickle,
524-
PyPicklerUnpicklerObjectTests,
525-
CPicklerUnpicklerObjectTests,
526-
CDispatchTableTests, CChainDispatchTableTests,
527-
CPicklerHookTests,
528-
InMemoryPickleTests, SizeofTests])
529-
support.run_unittest(*tests)
530-
support.run_doctest(pickle)
516+
def load_tests(loader, tests, pattern):
517+
tests.addTest(doctest.DocTestSuite())
518+
return tests
519+
531520

532521
if __name__ == "__main__":
533-
test_main()
522+
unittest.main()

Lib/test/test_pickletools.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
import pickletools
33
from test import support
44
from test.pickletester import AbstractPickleTests
5+
import doctest
56
import unittest
67

7-
class OptimizedPickleTests(AbstractPickleTests):
8+
class OptimizedPickleTests(AbstractPickleTests, unittest.TestCase):
89

910
def dumps(self, arg, proto=None, **kwargs):
1011
return pickletools.optimize(pickle.dumps(arg, proto, **kwargs))
@@ -93,11 +94,10 @@ def test__all__(self):
9394
support.check__all__(self, pickletools, blacklist=blacklist)
9495

9596

96-
def test_main():
97-
support.run_unittest(OptimizedPickleTests)
98-
support.run_unittest(MiscTestCase)
99-
support.run_doctest(pickletools)
97+
def load_tests(loader, tests, pattern):
98+
tests.addTest(doctest.DocTestSuite(pickletools))
99+
return tests
100100

101101

102102
if __name__ == "__main__":
103-
test_main()
103+
unittest.main()

0 commit comments

Comments
 (0)