diff options
author | Guido van Rossum <guido@python.org> | 2002-06-06 17:53:03 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2002-06-06 17:53:03 (GMT) |
commit | a48cb8f77dbee2942050e947bd6fa0b37f71690c (patch) | |
tree | 6e68edfd59ea16af2ee7e34b89f44e289b7e2d8f /Lib | |
parent | 3e3583c345e35d72a394f751bbee33257880fbd4 (diff) | |
download | cpython-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')
-rw-r--r-- | Lib/test/test_descr.py | 29 |
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__": |