Skip to content

Commit e6ba992

Browse files
bpo-45229: Make pickle tests discoverable (GH-28467)
1 parent f71300c commit e6ba992

File tree

3 files changed

+36
-47
lines changed

3 files changed

+36
-47
lines changed

Lib/test/pickletester.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@ def create_data():
828828
return x
829829

830830

831-
class AbstractUnpickleTests(unittest.TestCase):
831+
class AbstractUnpickleTests:
832832
# Subclass must define self.loads.
833833

834834
_testdata = create_data()
@@ -1441,7 +1441,7 @@ def t():
14411441

14421442

14431443

1444-
class AbstractPickleTests(unittest.TestCase):
1444+
class AbstractPickleTests:
14451445
# Subclass must define self.dumps, self.loads.
14461446

14471447
optimized = False
@@ -3032,7 +3032,7 @@ def check_array(arr):
30323032
check_array(arr[::2])
30333033

30343034

3035-
class BigmemPickleTests(unittest.TestCase):
3035+
class BigmemPickleTests:
30363036

30373037
# Binary protocols can serialize longs of up to 2 GiB-1
30383038

@@ -3305,7 +3305,7 @@ def __getattr__(self, key):
33053305
self.foo
33063306

33073307

3308-
class AbstractPickleModuleTests(unittest.TestCase):
3308+
class AbstractPickleModuleTests:
33093309

33103310
def test_dump_closed_file(self):
33113311
f = open(TESTFN, "wb")
@@ -3412,7 +3412,7 @@ def loads(data, **kwargs):
34123412
self.check_dumps_loads_oob_buffers(dumps, loads)
34133413

34143414

3415-
class AbstractPersistentPicklerTests(unittest.TestCase):
3415+
class AbstractPersistentPicklerTests:
34163416

34173417
# This class defines persistent_id() and persistent_load()
34183418
# functions that should be used by the pickler. All even integers
@@ -3452,7 +3452,7 @@ def test_persistence(self):
34523452
self.assertEqual(self.load_false_count, 1)
34533453

34543454

3455-
class AbstractIdentityPersistentPicklerTests(unittest.TestCase):
3455+
class AbstractIdentityPersistentPicklerTests:
34563456

34573457
def persistent_id(self, obj):
34583458
return obj
@@ -3481,7 +3481,7 @@ def test_protocol0_is_ascii_only(self):
34813481
self.assertRaises(pickle.UnpicklingError, self.loads, pickled)
34823482

34833483

3484-
class AbstractPicklerUnpicklerObjectTests(unittest.TestCase):
3484+
class AbstractPicklerUnpicklerObjectTests:
34853485

34863486
pickler_class = None
34873487
unpickler_class = None
@@ -3695,7 +3695,7 @@ def reducer_override(self, obj):
36953695

36963696
return NotImplemented
36973697

3698-
class AbstractHookTests(unittest.TestCase):
3698+
class AbstractHookTests:
36993699
def test_pickler_hook(self):
37003700
# test the ability of a custom, user-defined CPickler subclass to
37013701
# override the default reducing routines of any type using the method
@@ -3761,7 +3761,7 @@ def f():
37613761
self.assertIsNone(wr())
37623762

37633763

3764-
class AbstractDispatchTableTests(unittest.TestCase):
3764+
class AbstractDispatchTableTests:
37653765

37663766
def test_default_dispatch_table(self):
37673767
# No dispatch_table attribute by default

Lib/test/test_pickle.py

+21-32
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
from test.support import import_helper
@@ -31,7 +32,7 @@
3132
has_c_implementation = False
3233

3334

34-
class PyPickleTests(AbstractPickleModuleTests):
35+
class PyPickleTests(AbstractPickleModuleTests, unittest.TestCase):
3536
dump = staticmethod(pickle._dump)
3637
dumps = staticmethod(pickle._dumps)
3738
load = staticmethod(pickle._load)
@@ -40,7 +41,7 @@ class PyPickleTests(AbstractPickleModuleTests):
4041
Unpickler = pickle._Unpickler
4142

4243

43-
class PyUnpicklerTests(AbstractUnpickleTests):
44+
class PyUnpicklerTests(AbstractUnpickleTests, unittest.TestCase):
4445

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

5657

57-
class PyPicklerTests(AbstractPickleTests):
58+
class PyPicklerTests(AbstractPickleTests, unittest.TestCase):
5859

5960
pickler = pickle._Pickler
6061
unpickler = pickle._Unpickler
@@ -73,7 +74,7 @@ def loads(self, buf, **kwds):
7374

7475

7576
class InMemoryPickleTests(AbstractPickleTests, AbstractUnpickleTests,
76-
BigmemPickleTests):
77+
BigmemPickleTests, unittest.TestCase):
7778

7879
bad_stack_errors = (pickle.UnpicklingError, IndexError)
7980
truncated_errors = (pickle.UnpicklingError, EOFError,
@@ -110,14 +111,14 @@ def persistent_load(subself, obj):
110111

111112

112113
class PyPersPicklerTests(AbstractPersistentPicklerTests,
113-
PersistentPicklerUnpicklerMixin):
114+
PersistentPicklerUnpicklerMixin, unittest.TestCase):
114115

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

118119

119120
class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests,
120-
PersistentPicklerUnpicklerMixin):
121+
PersistentPicklerUnpicklerMixin, unittest.TestCase):
121122

122123
pickler = pickle._Pickler
123124
unpickler = pickle._Unpickler
@@ -183,37 +184,37 @@ def persistent_load(pid):
183184
check(PersUnpickler)
184185

185186

186-
class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):
187+
class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests, unittest.TestCase):
187188

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

191192

192-
class PyDispatchTableTests(AbstractDispatchTableTests):
193+
class PyDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
193194

194195
pickler_class = pickle._Pickler
195196

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

199200

200-
class PyChainDispatchTableTests(AbstractDispatchTableTests):
201+
class PyChainDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
201202

202203
pickler_class = pickle._Pickler
203204

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

207208

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

214215

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

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

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

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

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

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

267-
class CPicklerHookTests(AbstractHookTests):
268+
class CPicklerHookTests(AbstractHookTests, unittest.TestCase):
268269
class CustomCPicklerClass(_pickle.Pickler, AbstractCustomPicklerClass):
269270
pass
270271
pickler_class = CustomCPicklerClass
@@ -514,22 +515,10 @@ def test_multiprocessing_exceptions(self):
514515
('multiprocessing.context', name))
515516

516517

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

534523
if __name__ == "__main__":
535-
test_main()
524+
unittest.main()

Lib/test/test_pickletools.py

+6-6
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))
@@ -94,11 +95,10 @@ def test__all__(self):
9495
support.check__all__(self, pickletools, not_exported=not_exported)
9596

9697

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

102102

103103
if __name__ == "__main__":
104-
test_main()
104+
unittest.main()

0 commit comments

Comments
 (0)