Skip to content

bpo-45229: Make pickle tests discoverable #28467

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions Lib/test/pickletester.py
Original file line number Diff line number Diff line change
Expand Up @@ -828,7 +828,7 @@ def create_data():
return x


class AbstractUnpickleTests(unittest.TestCase):
class AbstractUnpickleTests:
# Subclass must define self.loads.

_testdata = create_data()
Expand Down Expand Up @@ -1441,7 +1441,7 @@ def t():



class AbstractPickleTests(unittest.TestCase):
class AbstractPickleTests:
# Subclass must define self.dumps, self.loads.

optimized = False
Expand Down Expand Up @@ -3032,7 +3032,7 @@ def check_array(arr):
check_array(arr[::2])


class BigmemPickleTests(unittest.TestCase):
class BigmemPickleTests:

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

Expand Down Expand Up @@ -3305,7 +3305,7 @@ def __getattr__(self, key):
self.foo


class AbstractPickleModuleTests(unittest.TestCase):
class AbstractPickleModuleTests:

def test_dump_closed_file(self):
f = open(TESTFN, "wb")
Expand Down Expand Up @@ -3412,7 +3412,7 @@ def loads(data, **kwargs):
self.check_dumps_loads_oob_buffers(dumps, loads)


class AbstractPersistentPicklerTests(unittest.TestCase):
class AbstractPersistentPicklerTests:

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


class AbstractIdentityPersistentPicklerTests(unittest.TestCase):
class AbstractIdentityPersistentPicklerTests:

def persistent_id(self, obj):
return obj
Expand Down Expand Up @@ -3481,7 +3481,7 @@ def test_protocol0_is_ascii_only(self):
self.assertRaises(pickle.UnpicklingError, self.loads, pickled)


class AbstractPicklerUnpicklerObjectTests(unittest.TestCase):
class AbstractPicklerUnpicklerObjectTests:

pickler_class = None
unpickler_class = None
Expand Down Expand Up @@ -3695,7 +3695,7 @@ def reducer_override(self, obj):

return NotImplemented

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


class AbstractDispatchTableTests(unittest.TestCase):
class AbstractDispatchTableTests:

def test_default_dispatch_table(self):
# No dispatch_table attribute by default
Expand Down
53 changes: 21 additions & 32 deletions Lib/test/test_pickle.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import warnings
import weakref

import doctest
import unittest
from test import support
from test.support import import_helper
Expand All @@ -31,7 +32,7 @@
has_c_implementation = False


class PyPickleTests(AbstractPickleModuleTests):
class PyPickleTests(AbstractPickleModuleTests, unittest.TestCase):
dump = staticmethod(pickle._dump)
dumps = staticmethod(pickle._dumps)
load = staticmethod(pickle._load)
Expand All @@ -40,7 +41,7 @@ class PyPickleTests(AbstractPickleModuleTests):
Unpickler = pickle._Unpickler


class PyUnpicklerTests(AbstractUnpickleTests):
class PyUnpicklerTests(AbstractUnpickleTests, unittest.TestCase):

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


class PyPicklerTests(AbstractPickleTests):
class PyPicklerTests(AbstractPickleTests, unittest.TestCase):

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


class InMemoryPickleTests(AbstractPickleTests, AbstractUnpickleTests,
BigmemPickleTests):
BigmemPickleTests, unittest.TestCase):

bad_stack_errors = (pickle.UnpicklingError, IndexError)
truncated_errors = (pickle.UnpicklingError, EOFError,
Expand Down Expand Up @@ -110,14 +111,14 @@ def persistent_load(subself, obj):


class PyPersPicklerTests(AbstractPersistentPicklerTests,
PersistentPicklerUnpicklerMixin):
PersistentPicklerUnpicklerMixin, unittest.TestCase):

pickler = pickle._Pickler
unpickler = pickle._Unpickler


class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests,
PersistentPicklerUnpicklerMixin):
PersistentPicklerUnpicklerMixin, unittest.TestCase):

pickler = pickle._Pickler
unpickler = pickle._Unpickler
Expand Down Expand Up @@ -183,37 +184,37 @@ def persistent_load(pid):
check(PersUnpickler)


class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):
class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests, unittest.TestCase):

pickler_class = pickle._Pickler
unpickler_class = pickle._Unpickler


class PyDispatchTableTests(AbstractDispatchTableTests):
class PyDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):

pickler_class = pickle._Pickler

def get_dispatch_table(self):
return pickle.dispatch_table.copy()


class PyChainDispatchTableTests(AbstractDispatchTableTests):
class PyChainDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):

pickler_class = pickle._Pickler

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


class PyPicklerHookTests(AbstractHookTests):
class PyPicklerHookTests(AbstractHookTests, unittest.TestCase):
class CustomPyPicklerClass(pickle._Pickler,
AbstractCustomPicklerClass):
pass
pickler_class = CustomPyPicklerClass


if has_c_implementation:
class CPickleTests(AbstractPickleModuleTests):
class CPickleTests(AbstractPickleModuleTests, unittest.TestCase):
from _pickle import dump, dumps, load, loads, Pickler, Unpickler

class CUnpicklerTests(PyUnpicklerTests):
Expand Down Expand Up @@ -241,7 +242,7 @@ class DumpPickle_CLoadPickle(PyPicklerTests):
pickler = pickle._Pickler
unpickler = _pickle.Unpickler

class CPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):
class CPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests, unittest.TestCase):
pickler_class = _pickle.Pickler
unpickler_class = _pickle.Unpickler

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

class CDispatchTableTests(AbstractDispatchTableTests):
class CDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
pickler_class = pickle.Pickler
def get_dispatch_table(self):
return pickle.dispatch_table.copy()

class CChainDispatchTableTests(AbstractDispatchTableTests):
class CChainDispatchTableTests(AbstractDispatchTableTests, unittest.TestCase):
pickler_class = pickle.Pickler
def get_dispatch_table(self):
return collections.ChainMap({}, pickle.dispatch_table)

class CPicklerHookTests(AbstractHookTests):
class CPicklerHookTests(AbstractHookTests, unittest.TestCase):
class CustomCPicklerClass(_pickle.Pickler, AbstractCustomPicklerClass):
pass
pickler_class = CustomCPicklerClass
Expand Down Expand Up @@ -514,22 +515,10 @@ def test_multiprocessing_exceptions(self):
('multiprocessing.context', name))


def test_main():
tests = [PyPickleTests, PyUnpicklerTests, PyPicklerTests,
PyPersPicklerTests, PyIdPersPicklerTests,
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)
def load_tests(loader, tests, pattern):
tests.addTest(doctest.DocTestSuite())
return tests


if __name__ == "__main__":
test_main()
unittest.main()
12 changes: 6 additions & 6 deletions Lib/test/test_pickletools.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
import pickletools
from test import support
from test.pickletester import AbstractPickleTests
import doctest
import unittest

class OptimizedPickleTests(AbstractPickleTests):
class OptimizedPickleTests(AbstractPickleTests, unittest.TestCase):

def dumps(self, arg, proto=None, **kwargs):
return pickletools.optimize(pickle.dumps(arg, proto, **kwargs))
Expand Down Expand Up @@ -94,11 +95,10 @@ def test__all__(self):
support.check__all__(self, pickletools, not_exported=not_exported)


def test_main():
support.run_unittest(OptimizedPickleTests)
support.run_unittest(MiscTestCase)
support.run_doctest(pickletools)
def load_tests(loader, tests, pattern):
tests.addTest(doctest.DocTestSuite(pickletools))
return tests


if __name__ == "__main__":
test_main()
unittest.main()