summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_descr.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2002-06-06 17:53:03 (GMT)
committerGuido van Rossum <guido@python.org>2002-06-06 17:53:03 (GMT)
commita48cb8f77dbee2942050e947bd6fa0b37f71690c (patch)
tree6e68edfd59ea16af2ee7e34b89f44e289b7e2d8f /Lib/test/test_descr.py
parent3e3583c345e35d72a394f751bbee33257880fbd4 (diff)
downloadcpython-a48cb8f77dbee2942050e947bd6fa0b37f71690c.zip
cpython-a48cb8f77dbee2942050e947bd6fa0b37f71690c.tar.gz
cpython-a48cb8f77dbee2942050e947bd6fa0b37f71690c.tar.bz2
Fix from SF patch 565085: copy._reduction doesn't __setstate__.
Straightforward fix. Will backport to 2.2. If there's ever a new 2.1 release, this could be backported there too (since it's an issue with anything that's got both a __reduce__ and a __setstate__).
Diffstat (limited to 'Lib/test/test_descr.py')
-rw-r--r--Lib/test/test_descr.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index aa71a2f..b83ace8 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -3071,6 +3071,34 @@ def string_exceptions():
except:
raise TestFailed, "string subclass allowed as exception"
+def copy_setstate():
+ if verbose:
+ print "Testing that copy.*copy() correctly uses __setstate__..."
+ import copy
+ class C(object):
+ def __init__(self, foo=None):
+ self.foo = foo
+ self.__foo = foo
+ def setfoo(self, foo=None):
+ self.foo = foo
+ def getfoo(self):
+ return self.__foo
+ def __getstate__(self):
+ return [self.foo]
+ def __setstate__(self, lst):
+ assert len(lst) == 1
+ self.__foo = self.foo = lst[0]
+ a = C(42)
+ a.setfoo(24)
+ vereq(a.foo, 24)
+ vereq(a.getfoo(), 42)
+ b = copy.copy(a)
+ vereq(b.foo, 24)
+ vereq(b.getfoo(), 24)
+ b = copy.deepcopy(a)
+ vereq(b.foo, 24)
+ vereq(b.getfoo(), 24)
+
def do_this_first():
if verbose:
print "Testing SF bug 551412 ..."
@@ -3153,6 +3181,7 @@ def test_main():
imulbug()
docdescriptor()
string_exceptions()
+ copy_setstate()
if verbose: print "All OK"
if __name__ == "__main__":