test_whitespace_eater_unicode(): Make this test Python 2.1 compatible.
[python/dscho.git] / Lib / test / test_cpickle.py
blob238fff21a995bf603ebf98be90783b3316a9bf9b
1 import cPickle
2 import unittest
3 from cStringIO import StringIO
4 from pickletester import AbstractPickleTests, AbstractPickleModuleTests
5 from test import test_support
7 class cPickleTests(AbstractPickleTests, AbstractPickleModuleTests):
9 def setUp(self):
10 self.dumps = cPickle.dumps
11 self.loads = cPickle.loads
13 error = cPickle.BadPickleGet
14 module = cPickle
16 class cPicklePicklerTests(AbstractPickleTests):
18 def dumps(self, arg, proto=0):
19 f = StringIO()
20 p = cPickle.Pickler(f, proto)
21 p.dump(arg)
22 f.seek(0)
23 return f.read()
25 def loads(self, buf):
26 f = StringIO(buf)
27 p = cPickle.Unpickler(f)
28 return p.load()
30 error = cPickle.BadPickleGet
32 class cPickleListPicklerTests(AbstractPickleTests):
34 def dumps(self, arg, proto=0):
35 p = cPickle.Pickler(proto)
36 p.dump(arg)
37 return p.getvalue()
39 def loads(self, *args):
40 f = StringIO(args[0])
41 p = cPickle.Unpickler(f)
42 return p.load()
44 error = cPickle.BadPickleGet
46 class cPickleFastPicklerTests(AbstractPickleTests):
48 def dumps(self, arg, proto=0):
49 f = StringIO()
50 p = cPickle.Pickler(f, proto)
51 p.fast = 1
52 p.dump(arg)
53 f.seek(0)
54 return f.read()
56 def loads(self, *args):
57 f = StringIO(args[0])
58 p = cPickle.Unpickler(f)
59 return p.load()
61 error = cPickle.BadPickleGet
63 def test_recursive_list(self):
64 self.assertRaises(ValueError,
65 AbstractPickleTests.test_recursive_list,
66 self)
68 def test_recursive_inst(self):
69 self.assertRaises(ValueError,
70 AbstractPickleTests.test_recursive_inst,
71 self)
73 def test_recursive_dict(self):
74 self.assertRaises(ValueError,
75 AbstractPickleTests.test_recursive_dict,
76 self)
78 def test_recursive_multi(self):
79 self.assertRaises(ValueError,
80 AbstractPickleTests.test_recursive_multi,
81 self)
83 def test_nonrecursive_deep(self):
84 # If it's not cyclic, it should pickle OK even if the nesting
85 # depth exceeds PY_CPICKLE_FAST_LIMIT. That happens to be
86 # 50 today. Jack Jansen reported stack overflow on Mac OS 9
87 # at 64.
88 a = []
89 for i in range(60):
90 a = [a]
91 b = self.loads(self.dumps(a))
92 self.assertEqual(a, b)
94 def test_main():
95 loader = unittest.TestLoader()
96 suite = unittest.TestSuite()
97 suite.addTest(loader.loadTestsFromTestCase(cPickleTests))
98 suite.addTest(loader.loadTestsFromTestCase(cPicklePicklerTests))
99 suite.addTest(loader.loadTestsFromTestCase(cPickleListPicklerTests))
100 suite.addTest(loader.loadTestsFromTestCase(cPickleFastPicklerTests))
101 test_support.run_suite(suite)
103 if __name__ == "__main__":
104 test_main()