bpo-45229: Make pickle tests discoverable (GH-28467)
This commit is contained in:
parent
f71300cb04
commit
e6ba992288
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user