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__).
This commit is contained in:
Guido van Rossum 2002-06-06 17:53:03 +00:00
parent 3e3583c345
commit a48cb8f77d
1 changed files with 29 additions and 0 deletions

View File

@ -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__":