blob: 65a7adcf644051cb415b16b5ae53632433bea1cc [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
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000010try:
11 import _pickle
12 has_c_implementation = True
13except ImportError:
14 has_c_implementation = False
Jeremy Hylton66426532001-10-15 21:38:56 +000015
Guido van Rossum98297ee2007-11-06 21:34:58 +000016
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000017class PickleTests(AbstractPickleModuleTests):
18 pass
Guido van Rossum5d9113d2003-01-29 17:58:45 +000019
Tim Peterse0c446b2001-10-18 21:57:37 +000020
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000021class PyPicklerTests(AbstractPickleTests):
Jeremy Hylton66426532001-10-15 21:38:56 +000022
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000023 pickler = pickle._Pickler
24 unpickler = pickle._Unpickler
Jeremy Hylton66426532001-10-15 21:38:56 +000025
Guido van Rossumf4169812008-03-17 22:56:06 +000026 def dumps(self, arg, proto=None):
Guido van Rossumcfe5f202007-05-08 21:26:54 +000027 f = io.BytesIO()
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000028 p = self.pickler(f, proto)
Jeremy Hylton66426532001-10-15 21:38:56 +000029 p.dump(arg)
30 f.seek(0)
Guido van Rossumcfe5f202007-05-08 21:26:54 +000031 return bytes(f.read())
Jeremy Hylton66426532001-10-15 21:38:56 +000032
33 def loads(self, buf):
Guido van Rossumcfe5f202007-05-08 21:26:54 +000034 f = io.BytesIO(buf)
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000035 u = self.unpickler(f)
Jeremy Hylton66426532001-10-15 21:38:56 +000036 return u.load()
37
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000038
39class PyPersPicklerTests(AbstractPersistentPicklerTests):
40
41 pickler = pickle._Pickler
42 unpickler = pickle._Unpickler
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000043
Guido van Rossumf4169812008-03-17 22:56:06 +000044 def dumps(self, arg, proto=None):
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000045 class PersPickler(self.pickler):
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000046 def persistent_id(subself, obj):
47 return self.persistent_id(obj)
Guido van Rossumcfe5f202007-05-08 21:26:54 +000048 f = io.BytesIO()
Guido van Rossum9d32bb12003-01-28 03:51:53 +000049 p = PersPickler(f, proto)
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000050 p.dump(arg)
51 f.seek(0)
52 return f.read()
53
54 def loads(self, buf):
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000055 class PersUnpickler(self.unpickler):
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000056 def persistent_load(subself, obj):
57 return self.persistent_load(obj)
Guido van Rossumcfe5f202007-05-08 21:26:54 +000058 f = io.BytesIO(buf)
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000059 u = PersUnpickler(f)
60 return u.load()
61
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000062
63if has_c_implementation:
64 class CPicklerTests(PyPicklerTests):
65 pickler = _pickle.Pickler
66 unpickler = _pickle.Unpickler
67
68 class CPersPicklerTests(PyPersPicklerTests):
69 pickler = _pickle.Pickler
70 unpickler = _pickle.Unpickler
71
72
Fred Drake694ed092001-12-19 16:42:15 +000073def test_main():
Alexandre Vassalottica2d6102008-06-12 18:26:05 +000074 tests = [PickleTests, PyPicklerTests, PyPersPicklerTests]
75 if has_c_implementation:
76 tests.extend([CPicklerTests, CPersPicklerTests])
77 support.run_unittest(*tests)
Benjamin Petersonee8712c2008-05-20 21:35:26 +000078 support.run_doctest(pickle)
Fred Drake694ed092001-12-19 16:42:15 +000079
Jeremy Hylton66426532001-10-15 21:38:56 +000080if __name__ == "__main__":
Fred Drake694ed092001-12-19 16:42:15 +000081 test_main()