[Checkins] SVN: persistent/trunk/persistent/ Coverage.

Tres Seaver cvs-admin at zope.org
Mon May 14 23:22:47 UTC 2012


Log message for revision 125881:
  Coverage.
  
  Drop can't-get-here condition in PickleCache.__delitem__.
  
  Cover PickleCache.debug_info, and fix a bug found thereby.

Changed:
  U   persistent/trunk/persistent/picklecache.py
  U   persistent/trunk/persistent/tests/test_picklecache.py

-=-
Modified: persistent/trunk/persistent/picklecache.py
===================================================================
--- persistent/trunk/persistent/picklecache.py	2012-05-14 23:22:39 UTC (rev 125880)
+++ persistent/trunk/persistent/picklecache.py	2012-05-14 23:22:44 UTC (rev 125881)
@@ -87,8 +87,6 @@
         else:
             value = self.data.pop(oid)
             node = self.ring.next
-            if node is None:
-                return
             while node is not self.ring:
                 if node.object is value:
                     node.prev.next, node.next.prev = node.next, node.prev
@@ -215,13 +213,13 @@
         result = []
         for oid, klass in self.persistent_classes.items():
             result.append((oid,
-                            len(gc.getreferents(klass)),
+                            len(gc.get_referents(klass)),
                             type(klass).__name__,
                             klass._p_state,
                             ))
         for oid, value in self.data.items():
             result.append((oid,
-                            len(gc.getreferents(value)),
+                            len(gc.get_referents(value)),
                             type(value).__name__,
                             value._p_state,
                             ))
@@ -230,7 +228,7 @@
     def update_object_size_estimation(self, oid, new_size):
         """ See IPickleCache.
         """
-        pass
+        pass #pragma NO COVER
 
     cache_size = property(lambda self: self.target_size)
     cache_drain_resistance = property(lambda self: self.drain_resistance)

Modified: persistent/trunk/persistent/tests/test_picklecache.py
===================================================================
--- persistent/trunk/persistent/tests/test_picklecache.py	2012-05-14 23:22:39 UTC (rev 125880)
+++ persistent/trunk/persistent/tests/test_picklecache.py	2012-05-14 23:22:44 UTC (rev 125881)
@@ -168,6 +168,51 @@
         else:
             self.fail("Didn't raise KeyError with nonesuch OID.")
 
+    def test___delitem___w_persistent_class(self):
+        cache = self._makeOne()
+        class pclass(object):
+            pass
+        cache = self._makeOne()
+
+        cache['pclass'] = pclass
+        del cache['pclass']
+        self.assertTrue(cache.get('pclass', self) is self)
+        self.assertFalse('pclass' in cache.persistent_classes)
+        self.assertEqual(cache.ringlen(), 0)
+
+    def test___delitem___w_normal_object(self):
+        from persistent.interfaces import UPTODATE
+        cache = self._makeOne()
+        uptodate = self._makePersist(state=UPTODATE)
+
+        cache['uptodate'] = uptodate
+
+        del cache['uptodate']
+        self.assertTrue(cache.get('uptodate', self) is self)
+
+    def test___delitem___w_ghost(self):
+        from persistent.interfaces import GHOST
+        cache = self._makeOne()
+        ghost = self._makePersist(state=GHOST)
+
+        cache['ghost'] = ghost
+
+        del cache['ghost']
+        self.assertTrue(cache.get('ghost', self) is self)
+
+    def test___delitem___w_remaining_object(self):
+        from persistent.interfaces import UPTODATE
+        cache = self._makeOne()
+        remains = self._makePersist(state=UPTODATE)
+        uptodate = self._makePersist(state=UPTODATE)
+
+        cache['remains'] = remains
+        cache['uptodate'] = uptodate
+
+        del cache['uptodate']
+        self.assertTrue(cache.get('uptodate', self) is self)
+        self.assertTrue(cache.get('remains', self) is remains)
+
     def test_lruitems(self):
         from persistent.interfaces import UPTODATE
         cache = self._makeOne()
@@ -543,7 +588,58 @@
         cache.invalidate('123')
         self.failIf('123' in cache.persistent_classes)
 
+    def test_debug_info_w_persistent_class(self):
+        import gc
+        from persistent.interfaces import UPTODATE
+        class pclass(object):
+            pass
+        cache = self._makeOne()
+        pclass._p_state = UPTODATE
+        cache['pclass'] = pclass
 
+        info = cache.debug_info()
+
+        self.assertEqual(len(info), 1)
+        oid, refc, typ, state = info[0]
+        self.assertEqual(oid, 'pclass')
+        self.assertEqual(refc, len(gc.get_referents(pclass)))
+        self.assertEqual(typ, 'type')
+        self.assertEqual(state, UPTODATE)
+
+    def test_debug_info_w_normal_object(self):
+        import gc
+        from persistent.interfaces import UPTODATE
+        cache = self._makeOne()
+        uptodate = self._makePersist(state=UPTODATE)
+        cache['uptodate'] = uptodate
+
+        info = cache.debug_info()
+
+        self.assertEqual(len(info), 1)
+        oid, refc, typ, state = info[0]
+        self.assertEqual(oid, 'uptodate')
+        self.assertEqual(refc, len(gc.get_referents(uptodate)))
+        self.assertEqual(typ, 'DummyPersistent')
+        self.assertEqual(state, UPTODATE)
+
+
+    def test_debug_info_w_ghost(self):
+        import gc
+        from persistent.interfaces import GHOST
+        cache = self._makeOne()
+        ghost = self._makePersist(state=GHOST)
+        cache['ghost'] = ghost
+
+        info = cache.debug_info()
+
+        self.assertEqual(len(info), 1)
+        oid, refc, typ, state = info[0]
+        self.assertEqual(oid, 'ghost')
+        self.assertEqual(refc, len(gc.get_referents(ghost)))
+        self.assertEqual(typ, 'DummyPersistent')
+        self.assertEqual(state, GHOST)
+
+
 class DummyPersistent(object):
 
     def _p_invalidate(self):



More information about the checkins mailing list