blob: bb436562bf8a68de3c30d2bc8a830b547cec0dc3 [file] [log] [blame]
Jeremy Hyltonbe467e52000-09-15 15:14:51 +00001import pickle
Serhiy Storchakabf19ce22015-11-29 13:12:40 +02002import struct
Jeremy Hylton66426532001-10-15 21:38:56 +00003from cStringIO import StringIO
Tim Peters47a6b132003-01-28 22:34:11 +00004
Barry Warsaw04f357c2002-07-23 19:04:11 +00005from test import test_support
Jeremy Hylton66426532001-10-15 21:38:56 +00006
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +03007from test.pickletester import (AbstractUnpickleTests,
8 AbstractPickleTests,
Serhiy Storchakacdc7a912013-02-12 21:36:47 +02009 AbstractPickleModuleTests,
10 AbstractPersistentPicklerTests,
11 AbstractPicklerUnpicklerObjectTests,
12 BigmemPickleTests)
Tim Peters47a6b132003-01-28 22:34:11 +000013
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030014class PickleTests(AbstractUnpickleTests, AbstractPickleTests,
15 AbstractPickleModuleTests):
Jeremy Hylton66426532001-10-15 21:38:56 +000016
Guido van Rossum5d9113d2003-01-29 17:58:45 +000017 def dumps(self, arg, proto=0, fast=0):
18 # Ignore fast
19 return pickle.dumps(arg, proto)
20
21 def loads(self, buf):
22 # Ignore fast
23 return pickle.loads(buf)
Tim Peterse0c446b2001-10-18 21:57:37 +000024
Jeremy Hylton66426532001-10-15 21:38:56 +000025 module = pickle
26 error = KeyError
Serhiy Storchaka5c137662015-11-23 15:20:43 +020027 bad_stack_errors = (IndexError,)
Serhiy Storchakabf19ce22015-11-29 13:12:40 +020028 bad_mark_errors = (IndexError, pickle.UnpicklingError,
29 TypeError, AttributeError, EOFError)
30 truncated_errors = (pickle.UnpicklingError, EOFError,
31 AttributeError, ValueError,
32 struct.error, IndexError, ImportError,
33 TypeError, KeyError)
Jeremy Hylton66426532001-10-15 21:38:56 +000034
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030035class UnpicklerTests(AbstractUnpickleTests):
Jeremy Hylton66426532001-10-15 21:38:56 +000036
37 error = KeyError
Serhiy Storchaka5c137662015-11-23 15:20:43 +020038 bad_stack_errors = (IndexError,)
Serhiy Storchakabf19ce22015-11-29 13:12:40 +020039 bad_mark_errors = (IndexError, pickle.UnpicklingError,
40 TypeError, AttributeError, EOFError)
41 truncated_errors = (pickle.UnpicklingError, EOFError,
42 AttributeError, ValueError,
43 struct.error, IndexError, ImportError,
44 TypeError, KeyError)
Jeremy Hylton66426532001-10-15 21:38:56 +000045
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030046 def loads(self, buf):
47 f = StringIO(buf)
48 u = pickle.Unpickler(f)
49 return u.load()
50
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030051class PicklerTests(AbstractPickleTests):
52
Guido van Rossum5d9113d2003-01-29 17:58:45 +000053 def dumps(self, arg, proto=0, fast=0):
Jeremy Hylton66426532001-10-15 21:38:56 +000054 f = StringIO()
Guido van Rossum9d32bb12003-01-28 03:51:53 +000055 p = pickle.Pickler(f, proto)
Guido van Rossum5d9113d2003-01-29 17:58:45 +000056 if fast:
57 p.fast = fast
Jeremy Hylton66426532001-10-15 21:38:56 +000058 p.dump(arg)
59 f.seek(0)
60 return f.read()
61
62 def loads(self, buf):
63 f = StringIO(buf)
64 u = pickle.Unpickler(f)
65 return u.load()
66
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000067class PersPicklerTests(AbstractPersistentPicklerTests):
68
Guido van Rossum5d9113d2003-01-29 17:58:45 +000069 def dumps(self, arg, proto=0, fast=0):
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000070 class PersPickler(pickle.Pickler):
71 def persistent_id(subself, obj):
72 return self.persistent_id(obj)
73 f = StringIO()
Guido van Rossum9d32bb12003-01-28 03:51:53 +000074 p = PersPickler(f, proto)
Guido van Rossum5d9113d2003-01-29 17:58:45 +000075 if fast:
76 p.fast = fast
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000077 p.dump(arg)
78 f.seek(0)
79 return f.read()
80
81 def loads(self, buf):
82 class PersUnpickler(pickle.Unpickler):
83 def persistent_load(subself, obj):
84 return self.persistent_load(obj)
85 f = StringIO(buf)
86 u = PersUnpickler(f)
87 return u.load()
88
Collin Winterf8089c72009-04-09 16:46:46 +000089class PicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):
90
91 pickler_class = pickle.Pickler
92 unpickler_class = pickle.Unpickler
93
Serhiy Storchakacdc7a912013-02-12 21:36:47 +020094class PickleBigmemPickleTests(BigmemPickleTests):
95
96 def dumps(self, arg, proto=0, fast=0):
97 # Ignore fast
98 return pickle.dumps(arg, proto)
99
100 def loads(self, buf):
101 # Ignore fast
102 return pickle.loads(buf)
103
Collin Winterf8089c72009-04-09 16:46:46 +0000104
Fred Drake694ed092001-12-19 16:42:15 +0000105def test_main():
Walter Dörwald21d3a322003-05-01 17:45:56 +0000106 test_support.run_unittest(
107 PickleTests,
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +0300108 UnpicklerTests,
Walter Dörwald21d3a322003-05-01 17:45:56 +0000109 PicklerTests,
Collin Winterf8089c72009-04-09 16:46:46 +0000110 PersPicklerTests,
111 PicklerUnpicklerObjectTests,
Serhiy Storchakacdc7a912013-02-12 21:36:47 +0200112 PickleBigmemPickleTests,
Walter Dörwald21d3a322003-05-01 17:45:56 +0000113 )
Tim Peterse14295c2003-01-30 21:27:37 +0000114 test_support.run_doctest(pickle)
Fred Drake694ed092001-12-19 16:42:15 +0000115
Jeremy Hylton66426532001-10-15 21:38:56 +0000116if __name__ == "__main__":
Fred Drake694ed092001-12-19 16:42:15 +0000117 test_main()