test_pickle.py 1.75 KB
Newer Older
Jeremy Hylton's avatar
Jeremy Hylton committed
1
import pickle
2
import unittest
3
from cStringIO import StringIO
4

5
from test import test_support
6

7 8 9 10
from test.pickletester import AbstractPickleTests
from test.pickletester import AbstractPickleModuleTests
from test.pickletester import AbstractPersistentPicklerTests

11
class PickleTests(AbstractPickleTests, AbstractPickleModuleTests):
12

13 14 15 16 17 18 19
    def dumps(self, arg, proto=0, fast=0):
        # Ignore fast
        return pickle.dumps(arg, proto)

    def loads(self, buf):
        # Ignore fast
        return pickle.loads(buf)
Tim Peters's avatar
Tim Peters committed
20

21 22 23 24 25 26 27
    module = pickle
    error = KeyError

class PicklerTests(AbstractPickleTests):

    error = KeyError

28
    def dumps(self, arg, proto=0, fast=0):
29
        f = StringIO()
30
        p = pickle.Pickler(f, proto)
31 32
        if fast:
            p.fast = fast
33 34 35 36 37 38 39 40 41
        p.dump(arg)
        f.seek(0)
        return f.read()

    def loads(self, buf):
        f = StringIO(buf)
        u = pickle.Unpickler(f)
        return u.load()

42 43
class PersPicklerTests(AbstractPersistentPicklerTests):

44
    def dumps(self, arg, proto=0, fast=0):
45 46 47 48
        class PersPickler(pickle.Pickler):
            def persistent_id(subself, obj):
                return self.persistent_id(obj)
        f = StringIO()
49
        p = PersPickler(f, proto)
50 51
        if fast:
            p.fast = fast
52 53 54 55 56 57 58 59 60 61 62 63
        p.dump(arg)
        f.seek(0)
        return f.read()

    def loads(self, buf):
        class PersUnpickler(pickle.Unpickler):
            def persistent_load(subself, obj):
                return self.persistent_load(obj)
        f = StringIO(buf)
        u = PersUnpickler(f)
        return u.load()

64
def test_main():
65 66 67 68 69
    test_support.run_unittest(
        PickleTests,
        PicklerTests,
        PersPicklerTests
    )
70
    test_support.run_doctest(pickle)
71

72
if __name__ == "__main__":
73
    test_main()