+++ /dev/null
-import cPickle, unittest\r
-from cStringIO import StringIO\r
-from test.pickletester import AbstractPickleTests, AbstractPickleModuleTests\r
-from test.pickletester import AbstractPicklerUnpicklerObjectTests\r
-from test import test_support\r
-\r
-class cPickleTests(AbstractPickleTests, AbstractPickleModuleTests):\r
-\r
- def setUp(self):\r
- self.dumps = cPickle.dumps\r
- self.loads = cPickle.loads\r
-\r
- error = cPickle.BadPickleGet\r
- module = cPickle\r
-\r
-class cPicklePicklerTests(AbstractPickleTests):\r
-\r
- def dumps(self, arg, proto=0):\r
- f = StringIO()\r
- p = cPickle.Pickler(f, proto)\r
- p.dump(arg)\r
- f.seek(0)\r
- return f.read()\r
-\r
- def loads(self, buf):\r
- f = StringIO(buf)\r
- p = cPickle.Unpickler(f)\r
- return p.load()\r
-\r
- error = cPickle.BadPickleGet\r
-\r
-class cPickleListPicklerTests(AbstractPickleTests):\r
-\r
- def dumps(self, arg, proto=0):\r
- p = cPickle.Pickler(proto)\r
- p.dump(arg)\r
- return p.getvalue()\r
-\r
- def loads(self, *args):\r
- f = StringIO(args[0])\r
- p = cPickle.Unpickler(f)\r
- return p.load()\r
-\r
- error = cPickle.BadPickleGet\r
-\r
-class cPickleFastPicklerTests(AbstractPickleTests):\r
-\r
- def dumps(self, arg, proto=0):\r
- f = StringIO()\r
- p = cPickle.Pickler(f, proto)\r
- p.fast = 1\r
- p.dump(arg)\r
- f.seek(0)\r
- return f.read()\r
-\r
- def loads(self, *args):\r
- f = StringIO(args[0])\r
- p = cPickle.Unpickler(f)\r
- return p.load()\r
-\r
- error = cPickle.BadPickleGet\r
-\r
- def test_recursive_list(self):\r
- self.assertRaises(ValueError,\r
- AbstractPickleTests.test_recursive_list,\r
- self)\r
-\r
- def test_recursive_tuple(self):\r
- self.assertRaises(ValueError,\r
- AbstractPickleTests.test_recursive_tuple,\r
- self)\r
-\r
- def test_recursive_inst(self):\r
- self.assertRaises(ValueError,\r
- AbstractPickleTests.test_recursive_inst,\r
- self)\r
-\r
- def test_recursive_dict(self):\r
- self.assertRaises(ValueError,\r
- AbstractPickleTests.test_recursive_dict,\r
- self)\r
-\r
- def test_recursive_multi(self):\r
- self.assertRaises(ValueError,\r
- AbstractPickleTests.test_recursive_multi,\r
- self)\r
-\r
- def test_nonrecursive_deep(self):\r
- # If it's not cyclic, it should pickle OK even if the nesting\r
- # depth exceeds PY_CPICKLE_FAST_LIMIT. That happens to be\r
- # 50 today. Jack Jansen reported stack overflow on Mac OS 9\r
- # at 64.\r
- a = []\r
- for i in range(60):\r
- a = [a]\r
- b = self.loads(self.dumps(a))\r
- self.assertEqual(a, b)\r
-\r
-class cPicklePicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):\r
-\r
- pickler_class = cPickle.Pickler\r
- unpickler_class = cPickle.Unpickler\r
-\r
-\r
-class Node(object):\r
- pass\r
-\r
-class cPickleDeepRecursive(unittest.TestCase):\r
- def test_issue2702(self):\r
- # This should raise a RecursionLimit but in some\r
- # platforms (FreeBSD, win32) sometimes raises KeyError instead,\r
- # or just silently terminates the interpreter (=crashes).\r
- nodes = [Node() for i in range(500)]\r
- for n in nodes:\r
- n.connections = list(nodes)\r
- n.connections.remove(n)\r
- self.assertRaises((AttributeError, RuntimeError), cPickle.dumps, n)\r
-\r
- def test_issue3179(self):\r
- # Safe test, because I broke this case when fixing the\r
- # behaviour for the previous test.\r
- res=[]\r
- for x in range(1,2000):\r
- res.append(dict(doc=x, similar=[]))\r
- cPickle.dumps(res)\r
-\r
-\r
-def test_main():\r
- test_support.run_unittest(\r
- cPickleTests,\r
- cPicklePicklerTests,\r
- cPickleListPicklerTests,\r
- cPickleFastPicklerTests,\r
- cPickleDeepRecursive,\r
- cPicklePicklerUnpicklerObjectTests,\r
- )\r
-\r
-if __name__ == "__main__":\r
- test_main()\r