import pickle import struct from cStringIO import StringIO from test import test_support from test.pickletester import (AbstractUnpickleTests, AbstractPickleTests, AbstractPickleModuleTests, AbstractPersistentPicklerTests, AbstractPicklerUnpicklerObjectTests, BigmemPickleTests) class PickleTests(AbstractUnpickleTests, AbstractPickleTests, AbstractPickleModuleTests): def dumps(self, arg, proto=0, fast=0): # Ignore fast return pickle.dumps(arg, proto) def loads(self, buf): # Ignore fast return pickle.loads(buf) module = pickle error = KeyError bad_stack_errors = (IndexError,) bad_mark_errors = (IndexError, pickle.UnpicklingError, TypeError, AttributeError, EOFError) truncated_errors = (pickle.UnpicklingError, EOFError, AttributeError, ValueError, struct.error, IndexError, ImportError, TypeError, KeyError) class UnpicklerTests(AbstractUnpickleTests): error = KeyError bad_stack_errors = (IndexError,) bad_mark_errors = (IndexError, pickle.UnpicklingError, TypeError, AttributeError, EOFError) truncated_errors = (pickle.UnpicklingError, EOFError, AttributeError, ValueError, struct.error, IndexError, ImportError, TypeError, KeyError) def loads(self, buf): f = StringIO(buf) u = pickle.Unpickler(f) return u.load() class PicklerTests(AbstractPickleTests): def dumps(self, arg, proto=0, fast=0): f = StringIO() p = pickle.Pickler(f, proto) if fast: p.fast = fast p.dump(arg) f.seek(0) return f.read() def loads(self, buf): f = StringIO(buf) u = pickle.Unpickler(f) return u.load() class PersPicklerTests(AbstractPersistentPicklerTests): def dumps(self, arg, proto=0, fast=0): class PersPickler(pickle.Pickler): def persistent_id(subself, obj): return self.persistent_id(obj) f = StringIO() p = PersPickler(f, proto) if fast: p.fast = fast p.dump(arg) f.seek(0) return f.read() def loads(self, buf): class PersUnpickler(pickle.Unpickler): def persistent_load(subself, obj): return self.persistent_load(obj) f = StringIO(buf) u = PersUnpickler(f) return u.load() class PicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): pickler_class = pickle.Pickler unpickler_class = pickle.Unpickler class PickleBigmemPickleTests(BigmemPickleTests): def dumps(self, arg, proto=0, fast=0): # Ignore fast return pickle.dumps(arg, proto) def loads(self, buf): # Ignore fast return pickle.loads(buf) def test_main(): test_support.run_unittest( PickleTests, UnpicklerTests, PicklerTests, PersPicklerTests, PicklerUnpicklerObjectTests, PickleBigmemPickleTests, ) test_support.run_doctest(pickle) if __name__ == "__main__": test_main()