diff -r da3f4774b939 Lib/test/test_cpickle.py --- a/Lib/test/test_cpickle.py Mon Mar 11 09:14:09 2013 +0200 +++ b/Lib/test/test_cpickle.py Tue Mar 12 01:45:01 2013 +0530 @@ -1,5 +1,8 @@ -import cPickle, unittest -from cStringIO import StringIO +import cPickle +import unittest +import cStringIO +import io +import os from test.pickletester import (AbstractPickleTests, AbstractPickleModuleTests, AbstractPicklerUnpicklerObjectTests, @@ -15,23 +18,27 @@ error = cPickle.BadPickleGet module = cPickle -class cPicklePicklerTests(AbstractPickleTests): +class AbstractIOCPicklerTests(AbstractPickleTests): def dumps(self, arg, proto=0): - f = StringIO() + f = self.output() p = cPickle.Pickler(f, proto) p.dump(arg) f.seek(0) - return f.read() + contents = f.read() + self.close(f) + return contents def loads(self, buf): - f = StringIO(buf) + f = self.input(buf) p = cPickle.Unpickler(f) - return p.load() + contents = p.load() + self.close(f) + return contents error = cPickle.BadPickleGet -class cPickleListPicklerTests(AbstractPickleTests): +class AbstractIOCPicklerListTests(AbstractPickleTests): def dumps(self, arg, proto=0): p = cPickle.Pickler(proto) @@ -39,26 +46,38 @@ return p.getvalue() def loads(self, *args): - f = StringIO(args[0]) + f = self.input(args[0]) p = cPickle.Unpickler(f) - return p.load() + contents = p.load() + self.close(f) + return contents + + def close(self, f): + pass error = cPickle.BadPickleGet -class cPickleFastPicklerTests(AbstractPickleTests): +class AbstractIOCPicklerFastTests(AbstractPickleTests): def dumps(self, arg, proto=0): - f = StringIO() + f = self.output() p = cPickle.Pickler(f, proto) p.fast = 1 p.dump(arg) f.seek(0) - return f.read() + contents = f.read() + self.close(f) + return contents def loads(self, *args): - f = StringIO(args[0]) + f = self.input(args[0]) p = cPickle.Unpickler(f) - return p.load() + contents = p.load() + self.close(f) + return contents + + def close(self, f): + pass error = cPickle.BadPickleGet @@ -98,6 +117,62 @@ b = self.loads(self.dumps(a)) self.assertEqual(a, b) +class cStringIOMixin: + output = input = cStringIO.StringIO + def close(self, f): + pass + +class BytesIOMixin: + output = input = io.BytesIO + def close(self, f): + pass + +class FileIOMixin: + + def output(self): + return open(test_support.TESTFN, 'w+') + + def input(self, data): + f = open(test_support.TESTFN, 'w+') + try: + f.write(data) + f.seek(0) + return f + except: + f.close() + raise + + def close(self, f): + f.close() + os.remove(test_support.TESTFN) + +class cStringIOCPicklerTests(cStringIOMixin, AbstractIOCPicklerTests): + pass + +class cStringIOCPicklerListTests(cStringIOMixin, AbstractIOCPicklerListTests): + pass + +class cStringIOCPicklerFastTests(cStringIOMixin, AbstractIOCPicklerFastTests): + pass + +class BytesIOCPicklerTests(BytesIOMixin, AbstractIOCPicklerTests): + pass + +class BytesIOCPicklerListTests(BytesIOMixin, AbstractIOCPicklerListTests): + pass + +class BytesIOCPicklerFastTests(BytesIOMixin, AbstractIOCPicklerFastTests): + pass + +class FileIOCPicklerTests(FileIOMixin, AbstractIOCPicklerTests): + pass + +class FileIOCPicklerListTests(FileIOMixin, AbstractIOCPicklerListTests): + pass + +class FileIOCPicklerFastTests(FileIOMixin, AbstractIOCPicklerFastTests): + pass + class cPicklePicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): pickler_class = cPickle.Pickler @@ -140,9 +215,15 @@ def test_main(): test_support.run_unittest( cPickleTests, - cPicklePicklerTests, - cPickleListPicklerTests, - cPickleFastPicklerTests, + cStringIOCPicklerTests, + cStringIOCPicklerListTests, + cStringIOCPicklerFastTests, + BytesIOCPicklerTests, + BytesIOCPicklerListTests, + BytesIOCPicklerFastTests, + FileIOCPicklerTests, + FileIOCPicklerListTests, + FileIOCPicklerFastTests, cPickleDeepRecursive, cPicklePicklerUnpicklerObjectTests, cPickleBigmemPickleTests,