blob: 42fb33ee7a2bfb0a28f44f676263125e8db76697 [file] [log] [blame]
Jeremy Hyltonbe467e52000-09-15 15:14:51 +00001import pickle
Guido van Rossumcfe5f202007-05-08 21:26:54 +00002import io
Tim Peters47a6b132003-01-28 22:34:11 +00003
Benjamin Petersonee8712c2008-05-20 21:35:26 +00004from test import support
Jeremy Hylton66426532001-10-15 21:38:56 +00005
Tim Peters47a6b132003-01-28 22:34:11 +00006from test.pickletester import AbstractPickleTests
Tim Peters47a6b132003-01-28 22:34:11 +00007from test.pickletester import AbstractPickleModuleTests
8from test.pickletester import AbstractPersistentPicklerTests
9
Benjamin Peterson75f25f22008-06-12 03:10:02 +000010class PickleTests(AbstractPickleTests, AbstractPickleModuleTests):
Jeremy Hylton66426532001-10-15 21:38:56 +000011
Benjamin Peterson75f25f22008-06-12 03:10:02 +000012 module = pickle
13 error = KeyError
Guido van Rossum98297ee2007-11-06 21:34:58 +000014
Benjamin Peterson75f25f22008-06-12 03:10:02 +000015 def dumps(self, arg, proto=None):
16 return pickle.dumps(arg, proto)
Guido van Rossum5d9113d2003-01-29 17:58:45 +000017
Benjamin Peterson75f25f22008-06-12 03:10:02 +000018 def loads(self, buf):
19 return pickle.loads(buf)
Tim Peterse0c446b2001-10-18 21:57:37 +000020
Benjamin Peterson75f25f22008-06-12 03:10:02 +000021class PicklerTests(AbstractPickleTests):
Jeremy Hylton66426532001-10-15 21:38:56 +000022
Benjamin Peterson75f25f22008-06-12 03:10:02 +000023 error = KeyError
Jeremy Hylton66426532001-10-15 21:38:56 +000024
Guido van Rossumf4169812008-03-17 22:56:06 +000025 def dumps(self, arg, proto=None):
Guido van Rossumcfe5f202007-05-08 21:26:54 +000026 f = io.BytesIO()
Benjamin Peterson75f25f22008-06-12 03:10:02 +000027 p = pickle.Pickler(f, proto)
Jeremy Hylton66426532001-10-15 21:38:56 +000028 p.dump(arg)
29 f.seek(0)
Guido van Rossumcfe5f202007-05-08 21:26:54 +000030 return bytes(f.read())
Jeremy Hylton66426532001-10-15 21:38:56 +000031
32 def loads(self, buf):
Guido van Rossumcfe5f202007-05-08 21:26:54 +000033 f = io.BytesIO(buf)
Benjamin Peterson75f25f22008-06-12 03:10:02 +000034 u = pickle.Unpickler(f)
Jeremy Hylton66426532001-10-15 21:38:56 +000035 return u.load()
36
Benjamin Peterson75f25f22008-06-12 03:10:02 +000037class PersPicklerTests(AbstractPersistentPicklerTests):
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000038
Guido van Rossumf4169812008-03-17 22:56:06 +000039 def dumps(self, arg, proto=None):
Benjamin Peterson75f25f22008-06-12 03:10:02 +000040 class PersPickler(pickle.Pickler):
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000041 def persistent_id(subself, obj):
42 return self.persistent_id(obj)
Guido van Rossumcfe5f202007-05-08 21:26:54 +000043 f = io.BytesIO()
Guido van Rossum9d32bb12003-01-28 03:51:53 +000044 p = PersPickler(f, proto)
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000045 p.dump(arg)
46 f.seek(0)
47 return f.read()
48
49 def loads(self, buf):
Benjamin Peterson75f25f22008-06-12 03:10:02 +000050 class PersUnpickler(pickle.Unpickler):
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000051 def persistent_load(subself, obj):
52 return self.persistent_load(obj)
Guido van Rossumcfe5f202007-05-08 21:26:54 +000053 f = io.BytesIO(buf)
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000054 u = PersUnpickler(f)
55 return u.load()
56
Fred Drake694ed092001-12-19 16:42:15 +000057def test_main():
Benjamin Peterson75f25f22008-06-12 03:10:02 +000058 support.run_unittest(
59 PickleTests,
60 PicklerTests,
61 PersPicklerTests
62 )
Benjamin Petersonee8712c2008-05-20 21:35:26 +000063 support.run_doctest(pickle)
Fred Drake694ed092001-12-19 16:42:15 +000064
Jeremy Hylton66426532001-10-15 21:38:56 +000065if __name__ == "__main__":
Fred Drake694ed092001-12-19 16:42:15 +000066 test_main()