[Checkins] SVN: BTrees/branches/pure_python/ Coverage for _Tree._p_resolveConflict.

Tres Seaver cvs-admin at zope.org
Mon Nov 19 21:27:34 UTC 2012


Log message for revision 128359:
  Coverage for _Tree._p_resolveConflict.

Changed:
  _U  BTrees/branches/pure_python/
  U   BTrees/branches/pure_python/BTrees/_base.py
  U   BTrees/branches/pure_python/BTrees/tests/test__base.py

-=-
Modified: BTrees/branches/pure_python/BTrees/_base.py
===================================================================
--- BTrees/branches/pure_python/BTrees/_base.py	2012-11-19 21:27:31 UTC (rev 128358)
+++ BTrees/branches/pure_python/BTrees/_base.py	2012-11-19 21:27:33 UTC (rev 128359)
@@ -1008,8 +1008,9 @@
         return state
     if not isinstance(state, tuple):
         raise TypeError("_p_resolveConflict: expected tuple or None for state")
-    if len(state) == 2:
+    if len(state) == 2: # non-degenerate BTree, can't resolve
         raise BTreesConflictError(-1, -1, -1, 11)
+    # Peel away wrapper to get to only-bucket state.
     if len(state) != 1:
         raise TypeError("_p_resolveConflict: expected 1- or 2-tuple for state")
     state = state[0]

Modified: BTrees/branches/pure_python/BTrees/tests/test__base.py
===================================================================
--- BTrees/branches/pure_python/BTrees/tests/test__base.py	2012-11-19 21:27:31 UTC (rev 128358)
+++ BTrees/branches/pure_python/BTrees/tests/test__base.py	2012-11-19 21:27:33 UTC (rev 128359)
@@ -2034,8 +2034,104 @@
         tree._data.append(first.__class__('c', b2))
         tree._check() #no raise
 
+    def test__p_resolveConflict_invalid_state_non_tuple(self):
+        tree = self._makeOne()
+        INVALID = []
+        EMPTY = None
+        DEGEN = (((('a', 'b'),),),)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          INVALID, EMPTY, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, INVALID, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, DEGEN, INVALID)
 
+    def test__p_resolveConflict_non_degenerate_state(self):
+        from ..Interfaces import BTreesConflictError
+        tree = self._makeOne()
+        FIRST = object()
+        NON_DEGEN = ((FIRST, 'a', object(), 'b', object()), FIRST)
+        EMPTY = None
+        DEGEN = (((('a', 'b'),),),)
+        e = self.assertRaises(BTreesConflictError, tree._p_resolveConflict,
+                              NON_DEGEN, EMPTY, DEGEN)
+        self.assertEqual(e.reason, 11)
+        e = self.assertRaises(BTreesConflictError, tree._p_resolveConflict,
+                              EMPTY, NON_DEGEN, DEGEN)
+        self.assertEqual(e.reason, 11)
+        e = self.assertRaises(BTreesConflictError, tree._p_resolveConflict,
+                              EMPTY, DEGEN, NON_DEGEN)
+        self.assertEqual(e.reason, 11)
 
+    def test__p_resolveConflict_invalid_state_non_1_tuple(self):
+        tree = self._makeOne()
+        INVALID = ('a', 'b', 'c')
+        EMPTY = None
+        DEGEN = (((('a', 'b'),),),)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          INVALID, EMPTY, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, INVALID, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, DEGEN, INVALID)
+
+    def test__p_resolveConflict_invalid_state_nested_non_tuple(self):
+        tree = self._makeOne()
+        INVALID = ([],)
+        EMPTY = None
+        DEGEN = (((('a', 'b'),),),)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          INVALID, EMPTY, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, INVALID, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, DEGEN, INVALID)
+
+    def test__p_resolveConflict_invalid_state_nested_non_1_tuple(self):
+        tree = self._makeOne()
+        INVALID = (('a', 'b', 'c'),)
+        EMPTY = None
+        DEGEN = (((('a', 'b'),),),)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          INVALID, EMPTY, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, INVALID, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, DEGEN, INVALID)
+
+    def test__p_resolveConflict_invalid_state_nested2_non_tuple(self):
+        tree = self._makeOne()
+        INVALID = (([],),)
+        EMPTY = None
+        DEGEN = (((('a', 'b'),),),)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          INVALID, EMPTY, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, INVALID, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, DEGEN, INVALID)
+
+    def test__p_resolveConflict_invalid_state_nested2_non_1_tuple(self):
+        tree = self._makeOne()
+        INVALID = ((('a', 'b', 'c'),))
+        EMPTY = None
+        DEGEN = (((('a', 'b'),),),)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          INVALID, EMPTY, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, INVALID, DEGEN)
+        self.assertRaises(TypeError, tree._p_resolveConflict,
+                          EMPTY, DEGEN, INVALID)
+
+    def test__p_resolveConflict_w_degenerate_state(self):
+        tree = self._makeOne()
+        OLD = (((('a', 'b', 'c', 'd'),),),)
+        COM = (((('a', 'b', 'c', 'd', 'e', 'f'),),),)
+        NEW = (((('a', 'b'),),),)
+        resolved = tree._p_resolveConflict(OLD, COM, NEW)
+        self.assertEqual(resolved, (((('a', 'b', 'e', 'f'),),),))
+
+
 class _Jar(object):
     def __init__(self):
         self._current = set()



More information about the checkins mailing list