blob: cbcf4912df6d5a88ef8e648b5723fa3b3cb6a577 [file] [log] [blame]
Jeremy Hyltonbe467e52000-09-15 15:14:51 +00001import pickle
Jeremy Hylton66426532001-10-15 21:38:56 +00002from cStringIO import StringIO
Tim Peters47a6b132003-01-28 22:34:11 +00003
Barry Warsaw04f357c2002-07-23 19:04:11 +00004from test import test_support
Jeremy Hylton66426532001-10-15 21:38:56 +00005
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +03006from test.pickletester import (AbstractUnpickleTests,
7 AbstractPickleTests,
Serhiy Storchakacdc7a912013-02-12 21:36:47 +02008 AbstractPickleModuleTests,
9 AbstractPersistentPicklerTests,
10 AbstractPicklerUnpicklerObjectTests,
11 BigmemPickleTests)
Tim Peters47a6b132003-01-28 22:34:11 +000012
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030013class PickleTests(AbstractUnpickleTests, AbstractPickleTests,
14 AbstractPickleModuleTests):
Jeremy Hylton66426532001-10-15 21:38:56 +000015
Guido van Rossum5d9113d2003-01-29 17:58:45 +000016 def dumps(self, arg, proto=0, fast=0):
17 # Ignore fast
18 return pickle.dumps(arg, proto)
19
20 def loads(self, buf):
21 # Ignore fast
22 return pickle.loads(buf)
Tim Peterse0c446b2001-10-18 21:57:37 +000023
Jeremy Hylton66426532001-10-15 21:38:56 +000024 module = pickle
25 error = KeyError
Serhiy Storchaka5c137662015-11-23 15:20:43 +020026 bad_stack_errors = (IndexError,)
Jeremy Hylton66426532001-10-15 21:38:56 +000027
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030028class UnpicklerTests(AbstractUnpickleTests):
Jeremy Hylton66426532001-10-15 21:38:56 +000029
30 error = KeyError
Serhiy Storchaka5c137662015-11-23 15:20:43 +020031 bad_stack_errors = (IndexError,)
Jeremy Hylton66426532001-10-15 21:38:56 +000032
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030033 def loads(self, buf):
34 f = StringIO(buf)
35 u = pickle.Unpickler(f)
36 return u.load()
37
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030038class PicklerTests(AbstractPickleTests):
39
Guido van Rossum5d9113d2003-01-29 17:58:45 +000040 def dumps(self, arg, proto=0, fast=0):
Jeremy Hylton66426532001-10-15 21:38:56 +000041 f = StringIO()
Guido van Rossum9d32bb12003-01-28 03:51:53 +000042 p = pickle.Pickler(f, proto)
Guido van Rossum5d9113d2003-01-29 17:58:45 +000043 if fast:
44 p.fast = fast
Jeremy Hylton66426532001-10-15 21:38:56 +000045 p.dump(arg)
46 f.seek(0)
47 return f.read()
48
49 def loads(self, buf):
50 f = StringIO(buf)
51 u = pickle.Unpickler(f)
52 return u.load()
53
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000054class PersPicklerTests(AbstractPersistentPicklerTests):
55
Guido van Rossum5d9113d2003-01-29 17:58:45 +000056 def dumps(self, arg, proto=0, fast=0):
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000057 class PersPickler(pickle.Pickler):
58 def persistent_id(subself, obj):
59 return self.persistent_id(obj)
60 f = StringIO()
Guido van Rossum9d32bb12003-01-28 03:51:53 +000061 p = PersPickler(f, proto)
Guido van Rossum5d9113d2003-01-29 17:58:45 +000062 if fast:
63 p.fast = fast
Jeremy Hylton5e0f4e72002-11-13 22:01:27 +000064 p.dump(arg)
65 f.seek(0)
66 return f.read()
67
68 def loads(self, buf):
69 class PersUnpickler(pickle.Unpickler):
70 def persistent_load(subself, obj):
71 return self.persistent_load(obj)
72 f = StringIO(buf)
73 u = PersUnpickler(f)
74 return u.load()
75
Collin Winterf8089c72009-04-09 16:46:46 +000076class PicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):
77
78 pickler_class = pickle.Pickler
79 unpickler_class = pickle.Unpickler
80
Serhiy Storchakacdc7a912013-02-12 21:36:47 +020081class PickleBigmemPickleTests(BigmemPickleTests):
82
83 def dumps(self, arg, proto=0, fast=0):
84 # Ignore fast
85 return pickle.dumps(arg, proto)
86
87 def loads(self, buf):
88 # Ignore fast
89 return pickle.loads(buf)
90
Collin Winterf8089c72009-04-09 16:46:46 +000091
Fred Drake694ed092001-12-19 16:42:15 +000092def test_main():
Walter Dörwald21d3a322003-05-01 17:45:56 +000093 test_support.run_unittest(
94 PickleTests,
Serhiy Storchaka4d2cf552015-09-29 15:36:28 +030095 UnpicklerTests,
Walter Dörwald21d3a322003-05-01 17:45:56 +000096 PicklerTests,
Collin Winterf8089c72009-04-09 16:46:46 +000097 PersPicklerTests,
98 PicklerUnpicklerObjectTests,
Serhiy Storchakacdc7a912013-02-12 21:36:47 +020099 PickleBigmemPickleTests,
Walter Dörwald21d3a322003-05-01 17:45:56 +0000100 )
Tim Peterse14295c2003-01-30 21:27:37 +0000101 test_support.run_doctest(pickle)
Fred Drake694ed092001-12-19 16:42:15 +0000102
Jeremy Hylton66426532001-10-15 21:38:56 +0000103if __name__ == "__main__":
Fred Drake694ed092001-12-19 16:42:15 +0000104 test_main()