test_cpickle.py 2.68 KB
Newer Older
1
import cPickle
2
import unittest
3 4
from cStringIO import StringIO
from pickletester import AbstractPickleTests, AbstractPickleModuleTests
5
from test import test_support
6 7

class cPickleTests(AbstractPickleTests, AbstractPickleModuleTests):
Tim Peters's avatar
Tim Peters committed
8

9 10 11 12 13 14 15 16 17
    def setUp(self):
        self.dumps = cPickle.dumps
        self.loads = cPickle.loads

    error = cPickle.BadPickleGet
    module = cPickle

class cPicklePicklerTests(AbstractPickleTests):

18
    def dumps(self, arg, proto=0):
19
        f = StringIO()
20
        p = cPickle.Pickler(f, proto)
21 22 23 24 25 26 27 28 29 30 31 32 33
        p.dump(arg)
        f.seek(0)
        return f.read()

    def loads(self, buf):
        f = StringIO(buf)
        p = cPickle.Unpickler(f)
        return p.load()

    error = cPickle.BadPickleGet

class cPickleListPicklerTests(AbstractPickleTests):

34 35
    def dumps(self, arg, proto=0):
        p = cPickle.Pickler(proto)
36 37 38 39 40 41 42 43 44 45 46 47
        p.dump(arg)
        return p.getvalue()

    def loads(self, *args):
        f = StringIO(args[0])
        p = cPickle.Unpickler(f)
        return p.load()

    error = cPickle.BadPickleGet

class cPickleFastPicklerTests(AbstractPickleTests):

48
    def dumps(self, arg, proto=0):
49
        f = StringIO()
50
        p = cPickle.Pickler(f, proto)
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
        p.fast = 1
        p.dump(arg)
        f.seek(0)
        return f.read()

    def loads(self, *args):
        f = StringIO(args[0])
        p = cPickle.Unpickler(f)
        return p.load()

    error = cPickle.BadPickleGet

    def test_recursive_list(self):
        self.assertRaises(ValueError,
                          AbstractPickleTests.test_recursive_list,
                          self)

    def test_recursive_inst(self):
        self.assertRaises(ValueError,
                          AbstractPickleTests.test_recursive_inst,
                          self)

    def test_recursive_dict(self):
        self.assertRaises(ValueError,
                          AbstractPickleTests.test_recursive_dict,
                          self)

    def test_recursive_multi(self):
        self.assertRaises(ValueError,
                          AbstractPickleTests.test_recursive_multi,
                          self)

83 84 85 86 87 88 89
    def test_nonrecursive_deep(self):
        a = []
        for i in range(100):
            a = [a]
        b = self.loads(self.dumps(a))
        self.assertEqual(a, b)

90 91 92 93 94 95 96 97 98
def test_main():
    loader = unittest.TestLoader()
    suite = unittest.TestSuite()
    suite.addTest(loader.loadTestsFromTestCase(cPickleTests))
    suite.addTest(loader.loadTestsFromTestCase(cPicklePicklerTests))
    suite.addTest(loader.loadTestsFromTestCase(cPickleListPicklerTests))
    suite.addTest(loader.loadTestsFromTestCase(cPickleFastPicklerTests))
    test_support.run_suite(suite)

99
if __name__ == "__main__":
100
    test_main()