diff Lib/test/pickletester.py @ 27482:7c8dfd3f4ae9 legacy-trunk

Some experimental support for generating NEWOBJ with proto=2, and fixed a bug in load_newobj().
author Guido van Rossum <guido@python.org>
date Tue, 28 Jan 2003 17:55:05 +0000
parents 883af28b9a0d
children e9578747f43d
line wrap: on
line diff
--- a/Lib/test/pickletester.py	Tue Jan 28 17:48:21 2003 +0000
+++ b/Lib/test/pickletester.py	Tue Jan 28 17:55:05 2003 +0000
@@ -300,6 +300,45 @@
                 y = self.loads(s)
                 self.assert_(x is y, (proto, x, s, y))
 
+    def test_newobj_tuple(self):
+        x = MyTuple([1, 2, 3], foo=42, bar="hello")
+        s = self.dumps(x, 2)
+        y = self.loads(s)
+        self.assertEqual(tuple(x), tuple(y))
+        self.assertEqual(x.__dict__, y.__dict__)
+
+    def test_newobj_list(self):
+        x = MyList([1, 2, 3], foo=42, bar="hello")
+        s = self.dumps(x, 2)
+        y = self.loads(s)
+        self.assertEqual(list(x), list(y))
+        self.assertEqual(x.__dict__, y.__dict__)
+
+class MyTuple(tuple):
+    def __new__(cls, *args, **kwds):
+        # Ignore **kwds
+        return tuple.__new__(cls, *args)
+    def __getnewargs__(self):
+        return (tuple(self),)
+    def __init__(self, *args, **kwds):
+        for k, v in kwds.items():
+            setattr(self, k, v)
+
+class MyList(list):
+    def __new__(cls, *args, **kwds):
+        # Ignore **kwds
+        return list.__new__(cls, *args)
+    def __init__(self, *args, **kwds):
+        for k, v in kwds.items():
+            setattr(self, k, v)
+    def __getstate__(self):
+        return list(self), self.__dict__
+    def __setstate__(self, arg):
+        lst, dct = arg
+        for x in lst:
+            self.append(x)
+        self.__init__(**dct)
+
 class AbstractPickleModuleTests(unittest.TestCase):
 
     def test_dump_closed_file(self):