diff options
author | Guido van Rossum <guido@python.org> | 2008-01-23 23:23:43 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2008-01-23 23:23:43 (GMT) |
commit | 9acc387bcfca60f4f641f52914e70714034b085c (patch) | |
tree | 53d423c0b34f9beda9c9da5a39b8ba110f78471f /Lib | |
parent | f30ba3dd662127e4896c1342894fd83cfbfedb51 (diff) | |
download | cpython-9acc387bcfca60f4f641f52914e70714034b085c.zip cpython-9acc387bcfca60f4f641f52914e70714034b085c.tar.gz cpython-9acc387bcfca60f4f641f52914e70714034b085c.tar.bz2 |
Turn three recently fixed crashers into regular tests.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_descr.py | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index c6a4246..085592a 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1,5 +1,7 @@ # Test enhancements related to descriptors and new-style classes +# XXX Please, please, please, someone convert this to unittest style! + from test.test_support import verify, vereq, verbose, TestFailed, TESTFN, get_original_stdout from copy import deepcopy import warnings @@ -4427,6 +4429,8 @@ def test_assign_slice(): # ceval.c's assign_slice used to check for # tp->tp_as_sequence->sq_slice instead of # tp->tp_as_sequence->sq_ass_slice + if verbose: + print "Testing assign_slice..." class C(object): def __setslice__(self, start, stop, value): @@ -4436,8 +4440,70 @@ def test_assign_slice(): c[1:2] = 3 vereq(c.value, 3) +def test_weakref_in_del_segfault(): + # This used to segfault until r60057 + if verbose: + print "Testing weakref in del segfault..." + + import weakref + global ref + + class Target(): + def __del__(self): + global ref + ref = weakref.ref(self) + + w = Target() + del w + del ref + +def test_borrowed_ref_3_segfault(): + # This used to segfault until r60224 + if verbose: + print "Testing borrowed ref 3 segfault..." + + class KeyFunc(object): + def __call__(self, n): + del d['key'] + return 1 + + d = {'key': KeyFunc()} + try: + min(range(10), **d) + except: + pass + +def test_borrowed_ref_4_segfault(): + # This used to segfault until r60224 + if verbose: + print "Testing borrowed ref 4 segfault..." + + import types + import __builtin__ + + + class X(object): + def __getattr__(self, name): + # this is called with name == '__bases__' by PyObject_IsInstance() + # during the unbound method call -- it frees the unbound method + # itself before it invokes its im_func. + del __builtin__.__import__ + return () + + pseudoclass = X() + + class Y(object): + def __call__(self, *args): + # 'self' was freed already + return (self, args) + + # make an unbound method + __builtin__.__import__ = types.MethodType(Y(), None, (pseudoclass, str)) + import spam + + def test_main(): - weakref_segfault() # Must be first, somehow + #XXXweakref_segfault() # Must be first, somehow wrapper_segfault() do_this_first() class_docstrings() @@ -4535,6 +4601,9 @@ def test_main(): methodwrapper() notimplemented() test_assign_slice() + test_weakref_in_del_segfault() + test_borrowed_ref_3_segfault() + test_borrowed_ref_4_segfault() if verbose: print "All OK" |