]> granicus.if.org Git - python/commitdiff
Added regression test for SF bug #415660 (failure to invalidate all
authorFred Drake <fdrake@acm.org>
Fri, 13 Apr 2001 17:18:15 +0000 (17:18 +0000)
committerFred Drake <fdrake@acm.org>
Fri, 13 Apr 2001 17:18:15 +0000 (17:18 +0000)
references to an object before calling registered callbacks).

Change last uses of verify() to self.assert_().

Lib/test/test_weakref.py

index d818b3365bb2bd5983d5809e7e466ab01d3abc1e..3fa240099c51d06fe1859eb2bde723658193b7a1 100644 (file)
@@ -2,7 +2,7 @@ import sys
 import unittest
 import weakref
 
-from test_support import run_unittest, verify
+from test_support import run_unittest
 
 
 class C:
@@ -63,6 +63,25 @@ class ReferencesTestCase(TestBase):
         self.assert_(self.cbcalled == 2,
                      "callback not called the right number of times")
 
+    def test_multiple_selfref_callbacks(self):
+        """Make sure all references are invalidated before callbacks
+        are called."""
+        #
+        # What's important here is that we're using the first
+        # reference in the callback invoked on the second reference
+        # (the most recently created ref is cleaned up first).  This
+        # tests that all references to the object are invalidated
+        # before any of the callbacks are invoked, so that we only
+        # have one invocation of _weakref.c:cleanup_helper() active
+        # for a particular object at a time.
+        #
+        def callback(object, self=self):
+            self.ref()
+        c = C()
+        self.ref = weakref.ref(c, callback)
+        ref1 = weakref.ref(c, callback)
+        del c
+
     def test_proxy_ref(self):
         o = C()
         o.bar = 1
@@ -91,10 +110,10 @@ class ReferencesTestCase(TestBase):
         o = factory()
         ref = weakref.ref(o, self.callback)
         del o
-        verify(self.cbcalled == 1,
-               "callback did not properly set 'cbcalled'")
-        verify(ref() is None,
-               "ref2 should be dead after deleting object reference")
+        self.assert_(self.cbcalled == 1,
+                     "callback did not properly set 'cbcalled'")
+        self.assert_(ref() is None,
+                     "ref2 should be dead after deleting object reference")
 
     def test_ref_reuse(self):
         o = C()