[Python-checkins] python/dist/src/Lib/test pickletester.py,1.52,1.53

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
Tue, 18 Feb 2003 14:41:28 -0800


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv798

Modified Files:
	pickletester.py 
Log Message:
Three test cases for __reduce_ex__.  This fails for cPickle, until Tim
checks in his changes to support this in cPickle.c.


Index: pickletester.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/pickletester.py,v
retrieving revision 1.52
retrieving revision 1.53
diff -C2 -d -r1.52 -r1.53
*** pickletester.py	15 Feb 2003 03:01:09 -0000	1.52
--- pickletester.py	18 Feb 2003 22:41:24 -0000	1.53
***************
*** 740,743 ****
--- 740,795 ----
          self.assertEqual(x.bar, y.bar)
  
+     def test_reduce_overrides_default_reduce_ex(self):
+         for proto in 0, 1, 2:
+             x = REX_one()
+             self.assertEqual(x._reduce_called, 0)
+             s = self.dumps(x, proto)
+             self.assertEqual(x._reduce_called, 1)
+             y = self.loads(s)
+             self.assertEqual(y._reduce_called, 0)
+ 
+     def test_reduce_ex_called(self):
+         for proto in 0, 1, 2:
+             x = REX_two()
+             self.assertEqual(x._proto, None)
+             s = self.dumps(x, proto)
+             self.assertEqual(x._proto, proto)
+             y = self.loads(s)
+             self.assertEqual(y._proto, None)
+ 
+     def test_reduce_ex_overrides_reduce(self):
+         for proto in 0, 1, 2:
+             x = REX_three()
+             self.assertEqual(x._proto, None)
+             s = self.dumps(x, proto)
+             self.assertEqual(x._proto, proto)
+             y = self.loads(s)
+             self.assertEqual(y._proto, None)
+ 
+ # Test classes for reduce_ex
+ 
+ class REX_one(object):
+     _reduce_called = 0
+     def __reduce__(self):
+         self._reduce_called = 1
+         return REX_one, ()
+     # No __reduce_ex__ here, but inheriting it from object
+ 
+ class REX_two(object):
+     _proto = None
+     def __reduce_ex__(self, proto):
+         self._proto = proto
+         return REX_two, ()
+     # No __reduce__ here, but inheriting it from object
+ 
+ class REX_three(object):
+     _proto = None
+     def __reduce_ex__(self, proto):
+         self._proto = proto
+         return REX_two, ()
+     def __reduce__(self):
+         raise TestFailed, "This __reduce__ shouldn't be called"
+ 
+ # Test classes for newobj
  
  class MyInt(int):