[Checkins] SVN: BTrees/branches/pure_python/ Coverage.

Tres Seaver cvs-admin at zope.org
Wed Dec 5 00:41:49 UTC 2012


Log message for revision 128530:
  Coverage.

Changed:
  _U  BTrees/branches/pure_python/
  U   BTrees/branches/pure_python/BTrees/tests/test_check.py

-=-
Modified: BTrees/branches/pure_python/BTrees/tests/test_check.py
===================================================================
--- BTrees/branches/pure_python/BTrees/tests/test_check.py	2012-12-04 22:14:39 UTC (rev 128529)
+++ BTrees/branches/pure_python/BTrees/tests/test_check.py	2012-12-05 00:41:48 UTC (rev 128530)
@@ -14,6 +14,14 @@
 import unittest
 
 
+def _assertRaises(self, e_type, checked, *args, **kw):
+    try:
+        checked(*args, **kw)
+    except e_type as e:
+        return e
+    self.fail("Didn't raise: %s" % e_type.__name__)
+
+
 class Test_classify(unittest.TestCase):
 
     def _callFUT(self, obj):
@@ -132,6 +140,253 @@
         self.assertEqual(values, [1, 2, 3])
 
 
+class Test_type_and_adr(unittest.TestCase):
+
+    def _callFUT(self, obj):
+        from BTrees.check import type_and_adr
+        return type_and_adr(obj)
+
+    def test_type_and_adr_w_oid(self):
+        from BTrees.utils import oid_repr
+        class WithOid(object):
+            _p_oid = 'DEADBEEF'
+        t_and_a = self._callFUT(WithOid())
+        self.assertTrue(t_and_a.startswith('WithOid (0x'))
+        self.assertTrue(t_and_a.endswith('oid=%s)' % oid_repr('DEADBEEF')))
+
+    def test_type_and_adr_wo_oid(self):
+        class WithoutOid(object):
+            pass
+        t_and_a = self._callFUT(WithoutOid())
+        self.assertTrue(t_and_a.startswith('WithoutOid (0x'))
+        self.assertTrue(t_and_a.endswith('oid=None)'))
+
+
+class WalkerTests(unittest.TestCase):
+
+    def _getTargetClass(self):
+        from BTrees.check import Walker
+        return Walker
+
+    def _makeOne(self, obj):
+        return self._getTargetClass()(obj)
+
+    def test_visit_btree_abstract(self):
+        walker = self._makeOne(object())
+        obj = object()
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        self.assertRaises(NotImplementedError, walker.visit_btree,
+                          obj, path, parent, is_mapping, keys, kids, lo, hi)
+
+    def test_visit_bucket_abstract(self):
+        walker = self._makeOne(object())
+        obj = object()
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        self.assertRaises(NotImplementedError, walker.visit_bucket,
+                          obj, path, parent, is_mapping, keys, kids, lo, hi)
+
+    def test_walk_w_empty_bucket(self):
+        from BTrees.OOBTree import OOBucket
+        obj = OOBucket()
+        walker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        self.assertRaises(NotImplementedError, walker.walk)
+
+    def test_walk_w_empty_btree(self):
+        from BTrees.OOBTree import OOBTree
+        obj = OOBTree()
+        walker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        self.assertRaises(NotImplementedError, walker.walk)
+
+    def test_walk_w_degenerate_btree(self):
+        from BTrees.OOBTree import OOBTree
+        obj = OOBTree()
+        obj['a'] = 1
+        walker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        self.assertRaises(NotImplementedError, walker.walk)
+
+    def test_walk_w_normal_btree(self):
+        from BTrees.IIBTree import IIBTree
+        obj = IIBTree()
+        for i in range(1000):
+            obj[i] = i
+        walker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        self.assertRaises(NotImplementedError, walker.walk)
+
+
+class CheckerTests(unittest.TestCase):
+
+    assertRaises = _assertRaises
+
+    def _getTargetClass(self):
+        from BTrees.check import Checker
+        return Checker
+
+    def _makeOne(self, obj):
+        return self._getTargetClass()(obj)
+
+    def _makeTree(self, fill):
+        from BTrees.OOBTree import OOBTree
+        from BTrees.OOBTree import _BUCKET_SIZE
+        tree = OOBTree()
+        if fill:
+            for i in range(_BUCKET_SIZE + 1):
+                tree[i] = 2*i
+        return tree
+
+    def test_walk_w_empty_bucket(self):
+        from BTrees.OOBTree import OOBucket
+        obj = OOBucket()
+        checker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        checker.check() #noraise
+
+    def test_walk_w_empty_btree(self):
+        obj = self._makeTree(False)
+        checker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        checker.check() #noraise
+
+    def test_walk_w_degenerate_btree(self):
+        obj = self._makeTree(False)
+        obj['a'] = 1
+        checker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        checker.check() #noraise
+
+    def test_walk_w_normal_btree(self):
+        obj = self._makeTree(False)
+        checker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        checker.check() #noraise
+
+    def test_walk_w_key_too_large(self):
+        obj = self._makeTree(True)
+        state = obj.__getstate__()
+        # Damage an invariant by dropping the BTree key to 14.
+        new_state = (state[0][0], 14, state[0][2]), state[1]
+        obj.__setstate__(new_state)
+        checker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        e = self.assertRaises(AssertionError, checker.check)
+        self.assertTrue(">= upper bound" in str(e))
+
+    def test_walk_w_key_too_small(self):
+        obj = self._makeTree(True)
+        state = obj.__getstate__()
+        # Damage an invariant by bumping the BTree key to 16.
+        new_state = (state[0][0], 16, state[0][2]), state[1]
+        obj.__setstate__(new_state)
+        checker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        e = self.assertRaises(AssertionError, checker.check)
+        self.assertTrue("< lower bound" in str(e))
+
+    def test_walk_w_keys_swapped(self):
+        obj = self._makeTree(True)
+        state = obj.__getstate__()
+        # Damage an invariant by bumping the BTree key to 16.
+        (b0, num, b1), firstbucket = state
+        self.assertEqual(b0[4], 8)
+        self.assertEqual(b0[5], 10)
+        b0state = b0.__getstate__()
+        self.assertEqual(len(b0state), 2)
+        # b0state looks like
+        # ((k0, v0, k1, v1, ...), nextbucket)
+        pairs, nextbucket = b0state
+        self.assertEqual(pairs[8], 4)
+        self.assertEqual(pairs[9], 8)
+        self.assertEqual(pairs[10], 5)
+        self.assertEqual(pairs[11], 10)
+        newpairs = pairs[:8] + (5, 10, 4, 8) + pairs[12:]
+        b0.__setstate__((newpairs, nextbucket))
+        checker = self._makeOne(obj)
+        path = '/'
+        parent = object()
+        is_mapping = True
+        keys = []
+        kids = []
+        lo = 0
+        hi = None
+        e = self.assertRaises(AssertionError, checker.check)
+        self.assertTrue("key 5 at index 4 >= key 4 at index 5" in str(e))
+
+
 class Test_check(unittest.TestCase):
 
     def _callFUT(self, tree):
@@ -216,33 +471,13 @@
             self.fail("expected check(tree) to catch the problem")
 
 
-class Test_type_and_adr(unittest.TestCase):
-
-    def _callFUT(self, obj):
-        from BTrees.check import type_and_adr
-        return type_and_adr(obj)
-
-    def test_type_and_adr_w_oid(self):
-        from BTrees.utils import oid_repr
-        class WithOid(object):
-            _p_oid = 'DEADBEEF'
-        t_and_a = self._callFUT(WithOid())
-        self.assertTrue(t_and_a.startswith('WithOid (0x'))
-        self.assertTrue(t_and_a.endswith('oid=%s)' % oid_repr('DEADBEEF')))
-
-    def test_type_and_adr_wo_oid(self):
-        class WithoutOid(object):
-            pass
-        t_and_a = self._callFUT(WithoutOid())
-        self.assertTrue(t_and_a.startswith('WithoutOid (0x'))
-        self.assertTrue(t_and_a.endswith('oid=None)'))
-
-
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(Test_classify),
         unittest.makeSuite(Test_crack_btree),
         unittest.makeSuite(Test_crack_bucket),
+        unittest.makeSuite(Test_type_and_adr),
+        unittest.makeSuite(WalkerTests),
+        unittest.makeSuite(CheckerTests),
         unittest.makeSuite(Test_check),
-        unittest.makeSuite(Test_type_and_adr),
     ))



More information about the checkins mailing list