Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2a30b21

Browse files
committed
Three test cases for __reduce_ex__. This fails for cPickle, until Tim
checks in his changes to support this in cPickle.c.
1 parent d6cfccf commit 2a30b21

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

Lib/test/pickletester.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,58 @@ def test_newobj_list_slots(self):
739739
self.assertEqual(x.foo, y.foo)
740740
self.assertEqual(x.bar, y.bar)
741741

742+
def test_reduce_overrides_default_reduce_ex(self):
743+
for proto in 0, 1, 2:
744+
x = REX_one()
745+
self.assertEqual(x._reduce_called, 0)
746+
s = self.dumps(x, proto)
747+
self.assertEqual(x._reduce_called, 1)
748+
y = self.loads(s)
749+
self.assertEqual(y._reduce_called, 0)
750+
751+
def test_reduce_ex_called(self):
752+
for proto in 0, 1, 2:
753+
x = REX_two()
754+
self.assertEqual(x._proto, None)
755+
s = self.dumps(x, proto)
756+
self.assertEqual(x._proto, proto)
757+
y = self.loads(s)
758+
self.assertEqual(y._proto, None)
759+
760+
def test_reduce_ex_overrides_reduce(self):
761+
for proto in 0, 1, 2:
762+
x = REX_three()
763+
self.assertEqual(x._proto, None)
764+
s = self.dumps(x, proto)
765+
self.assertEqual(x._proto, proto)
766+
y = self.loads(s)
767+
self.assertEqual(y._proto, None)
768+
769+
# Test classes for reduce_ex
770+
771+
class REX_one(object):
772+
_reduce_called = 0
773+
def __reduce__(self):
774+
self._reduce_called = 1
775+
return REX_one, ()
776+
# No __reduce_ex__ here, but inheriting it from object
777+
778+
class REX_two(object):
779+
_proto = None
780+
def __reduce_ex__(self, proto):
781+
self._proto = proto
782+
return REX_two, ()
783+
# No __reduce__ here, but inheriting it from object
784+
785+
class REX_three(object):
786+
_proto = None
787+
def __reduce_ex__(self, proto):
788+
self._proto = proto
789+
return REX_two, ()
790+
def __reduce__(self):
791+
raise TestFailed, "This __reduce__ shouldn't be called"
792+
793+
# Test classes for newobj
742794

743795
class MyInt(int):
744796
sample = 1

0 commit comments

Comments
 (0)