Commit a3debcf3 authored by Tres Seaver's avatar Tres Seaver

100% coverage.\!

parent ee89c134
...@@ -368,7 +368,7 @@ class Checker(Walker): ...@@ -368,7 +368,7 @@ class Checker(Walker):
".".join(map(str, path))) ".".join(map(str, path)))
self.errors.append(s) self.errors.append(s)
class Printer(Walker): class Printer(Walker): #pragma NO COVER
def __init__(self, obj): def __init__(self, obj):
Walker.__init__(self, obj) Walker.__init__(self, obj)
...@@ -422,6 +422,6 @@ def check(btree): ...@@ -422,6 +422,6 @@ def check(btree):
Checker(btree).check() Checker(btree).check()
def display(btree): def display(btree): #pragma NO COVER
"Display the internal structure of a BTree, Bucket, TreeSet or Set." "Display the internal structure of a BTree, Bucket, TreeSet or Set."
Printer(btree).display() Printer(btree).display()
...@@ -264,15 +264,6 @@ class CheckerTests(unittest.TestCase): ...@@ -264,15 +264,6 @@ class CheckerTests(unittest.TestCase):
def _makeOne(self, obj): def _makeOne(self, obj):
return self._getTargetClass()(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): def test_walk_w_empty_bucket(self):
from BTrees.OOBTree import OOBucket from BTrees.OOBTree import OOBucket
obj = OOBucket() obj = OOBucket()
...@@ -287,7 +278,7 @@ class CheckerTests(unittest.TestCase): ...@@ -287,7 +278,7 @@ class CheckerTests(unittest.TestCase):
checker.check() #noraise checker.check() #noraise
def test_walk_w_empty_btree(self): def test_walk_w_empty_btree(self):
obj = self._makeTree(False) obj = _makeTree(False)
checker = self._makeOne(obj) checker = self._makeOne(obj)
path = '/' path = '/'
parent = object() parent = object()
...@@ -299,7 +290,7 @@ class CheckerTests(unittest.TestCase): ...@@ -299,7 +290,7 @@ class CheckerTests(unittest.TestCase):
checker.check() #noraise checker.check() #noraise
def test_walk_w_degenerate_btree(self): def test_walk_w_degenerate_btree(self):
obj = self._makeTree(False) obj = _makeTree(False)
obj['a'] = 1 obj['a'] = 1
checker = self._makeOne(obj) checker = self._makeOne(obj)
path = '/' path = '/'
...@@ -312,7 +303,7 @@ class CheckerTests(unittest.TestCase): ...@@ -312,7 +303,7 @@ class CheckerTests(unittest.TestCase):
checker.check() #noraise checker.check() #noraise
def test_walk_w_normal_btree(self): def test_walk_w_normal_btree(self):
obj = self._makeTree(False) obj = _makeTree(False)
checker = self._makeOne(obj) checker = self._makeOne(obj)
path = '/' path = '/'
parent = object() parent = object()
...@@ -324,7 +315,7 @@ class CheckerTests(unittest.TestCase): ...@@ -324,7 +315,7 @@ class CheckerTests(unittest.TestCase):
checker.check() #noraise checker.check() #noraise
def test_walk_w_key_too_large(self): def test_walk_w_key_too_large(self):
obj = self._makeTree(True) obj = _makeTree(True)
state = obj.__getstate__() state = obj.__getstate__()
# Damage an invariant by dropping the BTree key to 14. # Damage an invariant by dropping the BTree key to 14.
new_state = (state[0][0], 14, state[0][2]), state[1] new_state = (state[0][0], 14, state[0][2]), state[1]
...@@ -341,7 +332,7 @@ class CheckerTests(unittest.TestCase): ...@@ -341,7 +332,7 @@ class CheckerTests(unittest.TestCase):
self.assertTrue(">= upper bound" in str(e)) self.assertTrue(">= upper bound" in str(e))
def test_walk_w_key_too_small(self): def test_walk_w_key_too_small(self):
obj = self._makeTree(True) obj = _makeTree(True)
state = obj.__getstate__() state = obj.__getstate__()
# Damage an invariant by bumping the BTree key to 16. # Damage an invariant by bumping the BTree key to 16.
new_state = (state[0][0], 16, state[0][2]), state[1] new_state = (state[0][0], 16, state[0][2]), state[1]
...@@ -358,7 +349,7 @@ class CheckerTests(unittest.TestCase): ...@@ -358,7 +349,7 @@ class CheckerTests(unittest.TestCase):
self.assertTrue("< lower bound" in str(e)) self.assertTrue("< lower bound" in str(e))
def test_walk_w_keys_swapped(self): def test_walk_w_keys_swapped(self):
obj = self._makeTree(True) obj = _makeTree(True)
state = obj.__getstate__() state = obj.__getstate__()
# Damage an invariant by bumping the BTree key to 16. # Damage an invariant by bumping the BTree key to 16.
(b0, num, b1), firstbucket = state (b0, num, b1), firstbucket = state
...@@ -401,74 +392,25 @@ class Test_check(unittest.TestCase): ...@@ -401,74 +392,25 @@ class Test_check(unittest.TestCase):
return tree return tree
def test_normal(self): def test_normal(self):
# Looks like (state, first_bucket) from BTrees.OOBTree import OOBTree
# where state looks like (bucket0, 15, bucket1). tree = OOBTree()
tree = self._makeOne() for i in range(31):
tree[i] = 2*i
state = tree.__getstate__() state = tree.__getstate__()
self.assertEqual(len(state), 2) self.assertEqual(len(state), 2)
self.assertEqual(len(state[0]), 3) self.assertEqual(len(state[0]), 3)
self.assertEqual(state[0][1], 15) self.assertEqual(state[0][1], 15)
tree._check() # shouldn't blow up self._callFUT(tree) #noraise
self._callFUT(tree) # shouldn't blow up
def test_key_too_large(self):
# Damage an invariant by dropping the BTree key to 14. def _makeTree(fill):
tree = self._makeOne() from BTrees.OOBTree import OOBTree
state = tree.__getstate__() from BTrees.OOBTree import _BUCKET_SIZE
news = (state[0][0], 14, state[0][2]), state[1] tree = OOBTree()
tree.__setstate__(news) if fill:
tree._check() # not caught for i in range(_BUCKET_SIZE + 1):
try: tree[i] = 2*i
# Expecting "... key %r >= upper bound %r at index %d" return tree
self._callFUT(tree)
except AssertionError as detail:
self.assertTrue(">= upper bound" in str(detail))
else:
self.fail("expected check(tree) to catch the problem")
def test_key_too_small(self):
# Damage an invariant by bumping the BTree key to 16.
tree = self._makeOne()
state = tree.__getstate__()
news = (state[0][0], 16, state[0][2]), state[1]
tree.__setstate__(news)
tree._check() # not caught
try:
# Expecting "... key %r < lower bound %r at index %d"
self._callFUT(tree)
except AssertionError as detail:
self.assertTrue("< lower bound" in str(detail))
else:
self.fail("expected check(tree) to catch the problem")
def test_keys_swapped(self):
# Damage an invariant by swapping two key/value pairs.
tree = self._makeOne()
state = tree.__getstate__()
# Looks like (state, first_bucket)
# where state looks like (bucket0, 15, bucket1).
(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))
tree._check() # not caught
try:
self._callFUT(tree)
except AssertionError, detail:
self.assertTrue(
"key 5 at index 4 >= key 4 at index 5" in str(detail))
else:
self.fail("expected check(tree) to catch the problem")
def test_suite(): def test_suite():
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment