bpo-45229: Make pickle tests discoverable (GH-28467)

This commit is contained in:
Serhiy Storchaka 2021-09-20 18:21:33 +03:00 committed by GitHub
parent f71300cb04
commit e6ba992288
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 47 deletions

View File

@ -828,7 +828,7 @@ def create_data():
return x return x
class AbstractUnpickleTests(unittest.TestCase): class AbstractUnpickleTests:
# Subclass must define self.loads. # Subclass must define self.loads.
_testdata = create_data() _testdata = create_data()
@ -1441,7 +1441,7 @@ class AbstractUnpickleTests(unittest.TestCase):
class AbstractPickleTests(unittest.TestCase): class AbstractPickleTests:
# Subclass must define self.dumps, self.loads. # Subclass must define self.dumps, self.loads.
optimized = False optimized = False
@ -3032,7 +3032,7 @@ class AbstractPickleTests(unittest.TestCase):
check_array(arr[::2]) check_array(arr[::2])
class BigmemPickleTests(unittest.TestCase): class BigmemPickleTests:
# Binary protocols can serialize longs of up to 2 GiB-1 # Binary protocols can serialize longs of up to 2 GiB-1
@ -3305,7 +3305,7 @@ class BadGetattr:
self.foo self.foo
class AbstractPickleModuleTests(unittest.TestCase): class AbstractPickleModuleTests:
def test_dump_closed_file(self): def test_dump_closed_file(self):
f = open(TESTFN, "wb") f = open(TESTFN, "wb")
@ -3412,7 +3412,7 @@ class AbstractPickleModuleTests(unittest.TestCase):
self.check_dumps_loads_oob_buffers(dumps, loads) self.check_dumps_loads_oob_buffers(dumps, loads)
class AbstractPersistentPicklerTests(unittest.TestCase): class AbstractPersistentPicklerTests:
# This class defines persistent_id() and persistent_load() # This class defines persistent_id() and persistent_load()
# functions that should be used by the pickler. All even integers # functions that should be used by the pickler. All even integers
@ -3452,7 +3452,7 @@ class AbstractPersistentPicklerTests(unittest.TestCase):
self.assertEqual(self.load_false_count, 1) self.assertEqual(self.load_false_count, 1)
class AbstractIdentityPersistentPicklerTests(unittest.TestCase): class AbstractIdentityPersistentPicklerTests:
def persistent_id(self, obj): def persistent_id(self, obj):
return obj return obj
@ -3481,7 +3481,7 @@ class AbstractIdentityPersistentPicklerTests(unittest.TestCase):
self.assertRaises(pickle.UnpicklingError, self.loads, pickled) self.assertRaises(pickle.UnpicklingError, self.loads, pickled)
class AbstractPicklerUnpicklerObjectTests(unittest.TestCase): class AbstractPicklerUnpicklerObjectTests:
pickler_class = None pickler_class = None
unpickler_class = None unpickler_class = None
@ -3695,7 +3695,7 @@ class AbstractCustomPicklerClass:
return NotImplemented return NotImplemented
class AbstractHookTests(unittest.TestCase): class AbstractHookTests:
def test_pickler_hook(self): def test_pickler_hook(self):
# test the ability of a custom, user-defined CPickler subclass to # test the ability of a custom, user-defined CPickler subclass to
# override the default reducing routines of any type using the method # override the default reducing routines of any type using the method
@ -3761,7 +3761,7 @@ class AbstractHookTests(unittest.TestCase):
self.assertIsNone(wr()) self.assertIsNone(wr())
class AbstractDispatchTableTests(unittest.TestCase): class AbstractDispatchTableTests:
def test_default_dispatch_table(self): def test_default_dispatch_table(self):
# No dispatch_table attribute by default # No dispatch_table attribute by default

View File

@ -9,6 +9,7 @@ import sys
import warnings import warnings
import weakref import weakref
import doctest
import unittest import unittest
from test import support from test import support
from test.support import import_helper from test.support import import_helper
@ -31,7 +32,7 @@ except ImportError:
has_c_implementation = False has_c_implementation = False
class PyPickleTests(AbstractPickleModuleTests): class PyPickleTests(AbstractPickleModuleTests, unittest.TestCase):
dump = staticmethod(pickle._dump) dump = staticmethod(pickle._dump)
dumps = staticmethod(pickle._dumps) dumps = staticmethod(pickle._dumps)
load = staticmethod(pickle._load) load = staticmethod(pickle._load)
@ -40,7 +41,7 @@ class PyPickleTests(AbstractPickleModuleTests):
Unpickler = pickle._Unpickler Unpickler = pickle._Unpickler
class PyUnpicklerTests(AbstractUnpickleTests): class PyUnpicklerTests(AbstractUnpickleTests, unittest.TestCase):
unpickler = pickle._Unpickler unpickler = pickle._Unpickler
bad_stack_errors = (IndexError,) bad_stack_errors = (IndexError,)
@ -54,7 +55,7 @@ class PyUnpicklerTests(AbstractUnpickleTests):
return u.load() return u.load()
class PyPicklerTests(AbstractPickleTests): class PyPicklerTests(AbstractPickleTests, unittest.TestCase):
pickler = pickle._Pickler pickler = pickle._Pickler
unpickler = pickle._Unpickler unpickler = pickle._Unpickler
@ -73,7 +74,7 @@ class PyPicklerTests(AbstractPickleTests):
class InMemoryPickleTests(AbstractPickleTests, AbstractUnpickleTests, class InMemoryPickleTests(AbstractPickleTests, AbstractUnpickleTests,
BigmemPickleTests): BigmemPickleTests, unittest.TestCase):
bad_stack_errors = (pickle.UnpicklingError, IndexError) bad_stack_errors = (pickle.UnpicklingError, IndexError)
truncated_errors = (pickle.UnpicklingError, EOFError, truncated_errors = (pickle.UnpicklingError, EOFError,
@ -110,14 +111,14 @@ class PersistentPicklerUnpicklerMixin(object):
class PyPersPicklerTests(AbstractPersistentPicklerTests, class PyPersPicklerTests(AbstractPersistentPicklerTests,
PersistentPicklerUnpicklerMixin): PersistentPicklerUnpicklerMixin, unittest.TestCase):
pickler = pickle._Pickler pickler = pickle._Pickler
unpickler = pickle._Unpickler unpickler = pickle._Unpickler
class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests, class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests,
PersistentPicklerUnpicklerMixin): PersistentPicklerUnpicklerMixin, unittest.TestCase):
pickler = pickle._Pickler pickler = pickle._Pickler
unpickler = pickle._Unpickler unpickler = pickle._Unpickler
@ -183,13 +184,13 @@ class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests,
check(PersUnpickler) check(PersUnpickler)
class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests, unittest.TestCase):
pickler_class = pickle._Pickler pickler_class = pickle._Pickler
unpickler_class = pickle._Unpickler unpickler_class = pickle._Unpickler
class PyDispatchTableTests(AbstractDispatchTableTests): class PyDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
pickler_class = pickle._Pickler pickler_class = pickle._Pickler
@ -197,7 +198,7 @@ class PyDispatchTableTests(AbstractDispatchTableTests):
return pickle.dispatch_table.copy() return pickle.dispatch_table.copy()
class PyChainDispatchTableTests(AbstractDispatchTableTests): class PyChainDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
pickler_class = pickle._Pickler pickler_class = pickle._Pickler
@ -205,7 +206,7 @@ class PyChainDispatchTableTests(AbstractDispatchTableTests):
return collections.ChainMap({}, pickle.dispatch_table) return collections.ChainMap({}, pickle.dispatch_table)
class PyPicklerHookTests(AbstractHookTests): class PyPicklerHookTests(AbstractHookTests, unittest.TestCase):
class CustomPyPicklerClass(pickle._Pickler, class CustomPyPicklerClass(pickle._Pickler,
AbstractCustomPicklerClass): AbstractCustomPicklerClass):
pass pass
@ -213,7 +214,7 @@ class PyPicklerHookTests(AbstractHookTests):
if has_c_implementation: if has_c_implementation:
class CPickleTests(AbstractPickleModuleTests): class CPickleTests(AbstractPickleModuleTests, unittest.TestCase):
from _pickle import dump, dumps, load, loads, Pickler, Unpickler from _pickle import dump, dumps, load, loads, Pickler, Unpickler
class CUnpicklerTests(PyUnpicklerTests): class CUnpicklerTests(PyUnpicklerTests):
@ -241,7 +242,7 @@ if has_c_implementation:
pickler = pickle._Pickler pickler = pickle._Pickler
unpickler = _pickle.Unpickler unpickler = _pickle.Unpickler
class CPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): class CPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests, unittest.TestCase):
pickler_class = _pickle.Pickler pickler_class = _pickle.Pickler
unpickler_class = _pickle.Unpickler unpickler_class = _pickle.Unpickler
@ -254,17 +255,17 @@ if has_c_implementation:
unpickler.memo = {-1: None} unpickler.memo = {-1: None}
unpickler.memo = {1: None} unpickler.memo = {1: None}
class CDispatchTableTests(AbstractDispatchTableTests): class CDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
pickler_class = pickle.Pickler pickler_class = pickle.Pickler
def get_dispatch_table(self): def get_dispatch_table(self):
return pickle.dispatch_table.copy() return pickle.dispatch_table.copy()
class CChainDispatchTableTests(AbstractDispatchTableTests): class CChainDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
pickler_class = pickle.Pickler pickler_class = pickle.Pickler
def get_dispatch_table(self): def get_dispatch_table(self):
return collections.ChainMap({}, pickle.dispatch_table) return collections.ChainMap({}, pickle.dispatch_table)
class CPicklerHookTests(AbstractHookTests): class CPicklerHookTests(AbstractHookTests, unittest.TestCase):
class CustomCPicklerClass(_pickle.Pickler, AbstractCustomPicklerClass): class CustomCPicklerClass(_pickle.Pickler, AbstractCustomPicklerClass):
pass pass
pickler_class = CustomCPicklerClass pickler_class = CustomCPicklerClass
@ -514,22 +515,10 @@ class CompatPickleTests(unittest.TestCase):
('multiprocessing.context', name)) ('multiprocessing.context', name))
def test_main(): def load_tests(loader, tests, pattern):
tests = [PyPickleTests, PyUnpicklerTests, PyPicklerTests, tests.addTest(doctest.DocTestSuite())
PyPersPicklerTests, PyIdPersPicklerTests, return tests
PyDispatchTableTests, PyChainDispatchTableTests,
CompatPickleTests, PyPicklerHookTests]
if has_c_implementation:
tests.extend([CPickleTests, CUnpicklerTests, CPicklerTests,
CPersPicklerTests, CIdPersPicklerTests,
CDumpPickle_LoadPickle, DumpPickle_CLoadPickle,
PyPicklerUnpicklerObjectTests,
CPicklerUnpicklerObjectTests,
CDispatchTableTests, CChainDispatchTableTests,
CPicklerHookTests,
InMemoryPickleTests, SizeofTests])
support.run_unittest(*tests)
support.run_doctest(pickle)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View File

@ -2,9 +2,10 @@ import pickle
import pickletools import pickletools
from test import support from test import support
from test.pickletester import AbstractPickleTests from test.pickletester import AbstractPickleTests
import doctest
import unittest import unittest
class OptimizedPickleTests(AbstractPickleTests): class OptimizedPickleTests(AbstractPickleTests, unittest.TestCase):
def dumps(self, arg, proto=None, **kwargs): def dumps(self, arg, proto=None, **kwargs):
return pickletools.optimize(pickle.dumps(arg, proto, **kwargs)) return pickletools.optimize(pickle.dumps(arg, proto, **kwargs))
@ -94,11 +95,10 @@ class MiscTestCase(unittest.TestCase):
support.check__all__(self, pickletools, not_exported=not_exported) support.check__all__(self, pickletools, not_exported=not_exported)
def test_main(): def load_tests(loader, tests, pattern):
support.run_unittest(OptimizedPickleTests) tests.addTest(doctest.DocTestSuite(pickletools))
support.run_unittest(MiscTestCase) return tests
support.run_doctest(pickletools)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()