[Checkins] SVN: BTrees/branches/pure_python/ Coverage for _Tree.___{g, s}etstate__.

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


Log message for revision 128357:
  Coverage for _Tree.___{g,s}etstate__.

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

-=-
Modified: BTrees/branches/pure_python/BTrees/tests/test__base.py
===================================================================
--- BTrees/branches/pure_python/BTrees/tests/test__base.py	2012-11-19 20:11:35 UTC (rev 128356)
+++ BTrees/branches/pure_python/BTrees/tests/test__base.py	2012-11-19 21:27:29 UTC (rev 128357)
@@ -1896,7 +1896,71 @@
             del tree[key]
         self.assertTrue(tree._data[1].child._firstbucket._next is next_b)
 
+    def test___getstate___empty(self):
+        tree = self._makeOne()
+        self.assertEqual(tree.__getstate__(), None)
 
+    def test___getstate___single_bucket_wo_oid(self):
+        tree = self._makeOne({'a': 'b'})
+        self.assertEqual(tree.__getstate__(), (((('a', 'b'),),),))
+
+    def test___getstate___single_bucket_w_oid(self):
+        tree = self._makeOne({'a': 'b'})
+        bucket = tree._firstbucket
+        jar = _Jar()
+        bucket._p_jar = jar
+        bucket._p_oid = 'OID'
+        self.assertEqual(tree.__getstate__(), ((bucket,), bucket))
+
+    def test___getstate___multiple_buckets(self):
+        tree = self._makeOne()
+        FMT = '%05d'
+        for i in range(1000):
+            key = FMT % i
+            tree[key] = i
+        bucket = tree._firstbucket
+        EXPECTED = (tree._data[0].child,)
+        for item in tree._data[1:]:
+            EXPECTED += (item.key, item.child)
+        self.assertEqual(tree.__getstate__(), (EXPECTED, bucket))
+
+    def test___setstate___invalid(self):
+        tree = self._makeOne()
+        self.assertRaises(TypeError, tree.__setstate__, ('a', 'b'))
+
+    def test___setstate___to_empty(self):
+        tree = self._makeOne({'a': 'b'})
+        tree.__setstate__(None)
+        self.assertEqual(len(tree), 0)
+
+    def test___setstate___to_single_bucket_wo_oid(self):
+        tree = self._makeOne()
+        tree.__setstate__((((('a', 'b'),),),))
+        self.assertEqual(list(tree.keys()), ['a'])
+        self.assertEqual(tree._findbucket('a')['a'], 'b')
+        self.assertTrue(len(tree._data), 1)
+        self.assertTrue(tree._data[0].child is tree._firstbucket)
+        self.assertTrue(tree._firstbucket._p_oid is None)
+
+    def test___setstate___to_multiple_buckets(self):
+        from .._base import Bucket
+        class _Bucket(Bucket):
+            def _to_key(self, x):
+                return x
+        tree = self._makeOne()
+        b1 = _Bucket({'a': 0, 'b': 1})
+        b2 = _Bucket({'c': 2, 'd': 3})
+        b1._next = b2
+        tree.__setstate__(((b1, 'c', b2), b1))
+        self.assertEqual(list(tree.keys()), ['a', 'b', 'c', 'd'])
+        self.assertTrue(len(tree._data), 2)
+        self.assertEqual(tree._data[0].key, None)
+        self.assertEqual(tree._data[0].child, b1)
+        self.assertEqual(tree._data[1].key, 'c')
+        self.assertEqual(tree._data[1].child, b2)
+        self.assertTrue(tree._firstbucket is b1)
+
+
 class _Jar(object):
     def __init__(self):
         self._current = set()



More information about the checkins mailing list